2014-01-29 14 views
1

Я хотел бы знать, как я могу эффективно читать локальные mp3-файлы с помощью NAudio?
Я пробовал несколько способов читать mp3 и воспроизводить его с помощью WaveOut, но это очень медленно.
Для моего текущего теста я взял несколько файлов mp3 с размером файлов от 80 до 180 МБ.
Сначала я использовал Mp3FileReader:Медленное чтение mp3-файлов с NAudio

myWaveOut.Init(new Mp3FileReader("test.mp3")); 

Тогда я использовал FileStream и передал его в Mp3FileReader.

FileStream stream = File.OpenRead("test.mp3"); 
myWaveOut.Init(new Mp3FileReader(stream)); 

Те же проблемы ...
Далее я использовал variatons этих (например, различных размеров буфера/читателей).

Я проверил своего диспетчера задач, и каждый раз, когда я читал файл, кажется, что читатель читает весь файл перед его воспроизведением. Например. для воспроизведения одного из моих файлов потребовалось 10-20 секунд. По словам моего диспетчера задач, файл был загружен с 5,6 до 6,5 МБ/с за это время. Таким образом, за этот период весь файл мог быть загружен.

Я делаю что-то неправильно?
Есть ли более эффективные способы загрузки больших файлов и их потока?

ответ

3

Это потому, что Mp3FileReader создает оглавление спереди, позволяя ему сообщать о продолжительности и точно устанавливать. Самый простой способ избежать этого - просто использовать MediaFoundationReader для воспроизведения файлов MP3, а также просто создать простой класс MP3FileReader, разбор MP3Frames и декодирования с помощью AcmMp3FrameDecompressor. Возможно, будущая версия NAudio сделает генерацию TOC опциональной.

+1

Чтобы добавить к этому: читатель WM ASF также известен тем, что читает файлы MP3: еще один вариант на выбор, когда дело доходит до стандартных предложений. –

+0

Да, это хорошо работает. больше не жду :) спасибо – TorbenJ

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