2016-09-05 3 views
0

Я передискретирую MP4 (аудио) файл в WAV, используя MediaFoundationReader и ResamplerDmoStream для WaveFormat (16000, 16, 1). После передискретизации я отправляю API-интерфейс потока в речь для транскрипции, но API терпит неудачу, потому что поток не содержит заголовок WAV. Если я сохраню поток в WAV-файл (используя WaveFileWriter), снова прочитайте файл и отправьте поток в API, тогда API работает, потому что поток содержит заголовок WAV. Есть ли способ добавить заголовок WAV в поток после повторной выборки ResamplerDmoStream, чтобы предотвратить дорогостоящий ввод-вывод?Предварительный заголовок WAV в NAudio

ответ

0

Вы можете использовать WaveFileWriter, чтобы написать Stream. Поэтому в этом случае я напишу в MemoryStream, а WaveFileWriter должен быть удален, чтобы правильно завершить WAV-заголовки. Но тогда у вас будет представление WAV-файла в памяти.

Одно предостережение, что вы могли бы в конечном итоге располагая MemoryStream при выбрасывании WaveFileWriter, поэтому у меня есть класс, удобство в NAudio называется IgnoreDisposeStream который можно обернуть MemoryStream, чтобы остановить его получение утилизировать, прежде чем использовать его.

+0

Спасибо за подробное объяснение. Использование ResamplerDmoStream обеспечило непоследовательные результаты на стороне API, поэтому в итоге я в конечном итоге использовал MediaFoundationResampler. Я попробовал WaveFileWriter.Write, но для этого требуется знать длину массива байтов, чтобы создать поток соответствующего размера, а MediaFoundationResampler не предоставляет getter для Length. Как создать поток из MediaFoundationResampler соответствующего размера? –

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