2017-02-03 2 views
0

Я пытаюсь обрезать mp3-файл. используя этот код:NAudio trimming mp3 файл

private void TrimMp3(string open, string save) 
    { 
     using (var mp3FileReader = new Mp3FileReader(open)) 
     using (var writer = File.Create(save)) 
     { 
      var startPostion = TimeSpan.FromSeconds(60); 
      var endPostion = TimeSpan.FromSeconds(90); 
      mp3FileReader.CurrentTime = startPostion; 
      while (mp3FileReader.CurrentTime < endPostion) 
      { 
       var frame = mp3FileReader.ReadNextFrame(); 
       if (frame == null) break; 
       writer.Write(frame.RawData, 0, frame.RawData.Length); 
      } 
     } 
    } 

«открыть» это файл я подрезки и «сохранить» это место я экономлю. Отделка работает, но не полностью. Новый файл начинается с 60 секунд, но он продолжается и не останавливается на 90 секунд. Например, если файл составляет 3 минуты, он начнется через 1 минуту и ​​заканчивается на 3. Его как будто всегда верно. Что я здесь делаю неправильно?

Заранее благодарен!

ответ

0

Я понятия не имею, что делает ваш Mp3FileReader. Но ваш while loop выглядит странно. Есть mp3FileRead.ReadNextFrame() также изменить mp3FileReader.CurrentTime? Если нет, то есть ваша проблема. Вы должны atleast do mp3FileReader.CurrentTime + 1Frame. В противном случае ваш CurrentTime никогда не изменяется и петля всегда будет true

+0

Я думаю, что это должно быть. Я из библиотеки NAudio. Я изучаю курс Mark Heath (автор NAudio), и это тот код, который он написал, но вместо того, чтобы предоставить местоположение файла для открытия и сохранения, он сделал это безупречным. – EldarGoren

+0

@EldarGoren Вы можете ссылаться на документацию? –

+0

Вы имеете в виду документацию по NAudio? если да: https: //naudio.codeplex.com/documentation – EldarGoren

0

В NAudio 1.8.0, Mp3FileReader.ReadNextFrame не прогрессирует CurrentTime, хотя я checked in a fix для этого в последнее время.

Таким образом, вы можете либо получить последний код NAudio, либо использовать свойство SampleCount на каждом Mp3Frame, чтобы точно отслеживать, насколько далеко вы сами.

+0

Я уже использую NAudio 1.8.0 Я довольно новичок в этом, поэтому я могу скачать исправление? Если не плохо, попробуйте испортить счетчик образцов. – EldarGoren

+0

Я добавил переменную положения в код, как вы это делали в исправлении. 'var position = 0; while (mp3FileReader.CurrentTime EldarGoren

Смежные вопросы