У меня есть файл wav, который мне нужно преобразовать в формат, который может быть прочитан одним из наших приложений. Файл, который я хочу преобразовать, имеет формат:
- Кодировка: PCM
- Частота дискретизации: 48 кГц
- Битрейт: 16 бит
- Каналы: 1
Читаемый формат файла, в который я хочу преобразовать:
- Кодировка: u-Law
- Частота дискретизации: 8 кГц
- Битрейт: 8 бит
- Каналы: 1
Для этого я использую библиотеку NAudio. Код, который я использую для преобразования, выглядит примерно так:
using (WaveFileReader reader = new WaveFileReader(inputWavFilePath))
{
WaveFormat newFormat = WaveFormat.CreateMuLawFormat(8000, 1);
using (var conversionStream = new WaveFormatConversionStream(newFormat, reader))
{
WaveFileWriter.CreateWaveFile(outputWavFilePath, conversionStream);
}
}
Приведенное выше преобразование вызывает ошибку
AcmNotPossible вызов acmStreamOpen
Я видел несколько ссылок для перехода с U-закона на PCM, но у меня проблемы с обратным.
Я изо всех сил пытаюсь понять, почему, когда я конвертирую PCM/48kHz/16bit
->
uLaw/48kHz/8bit
, исключение не генерируется. Но когда я затем пытаюсь преобразовать полученный файл в uLaw/8kHz/8bit
, создается исключение.
Я новичок в работе с аудиофайлами и различными форматами, поэтому приношу свои извинения, если мне не хватает чего-то простого.
Может ли кто-нибудь объяснить, почему преобразование вызывает исключение только при преобразовании частоты дискретизации, а не в двух других преобразованиях (кодирование PCM -> uLaw
&& 16bit -> 8bit
)?