Воспроизведение аудиофайла Dialogic ADPCM с помощью NAUDIO
Я пытаюсь воспроизвести файл Dialogic ADPCM (без заголовка RIFF) с библиотекой NAUDIO. Я пробовал несколько разных вещей, но пока безуспешно. Я попробовал простое преобразование WAV:
FileStream fs = new FileStream(@"C:\TestFile.vox", FileMode.Open, FileAccess.Read);
WaveFormat wf = new WaveFormat(8000, 1);
WaveOut wo = new WaveOut();
RawSourceWaveStream rawSource = new RawSourceWaveStream(fs, wf);
wo.Init(rawSource);
wo.Play();
Это фактически загружает файл и начинает воспроизведение, но он очень шумный и искаженный (фактически не слышимый) почти как неправильный кодек, выбранный для преобразования файла. Я попробовал более конкретное преобразование, потому что кажется, что NAUDIO имеет встроенную поддержку Dialogic ADPCM:
FileStream fs = new FileStream(@"C:\TestFile.vox", FileMode.Open, FileAccess.Read);
WaveFormat wf = WaveFormat.CreateCustomFormat(WaveFormatEncoding.DialogicOkiAdpcm, 8000, 1, 3000, 1, 4);
WaveOut wo = new WaveOut();
RawSourceWaveStream rawSource = new RawSourceWaveStream(fs, wf);
wo.Init(rawSource);
wo.Play();
Это вызывает исключение при вызове WaveOut.Init(). Исключением является "WaveBadFormat вызывая waveOutOpen". Я также пытался использовать
AdpcmWaveFormat wf = new AdpcmWaveFormat(8000, 1);
для моего объекта WaveFormat - я получаю то же исключение. Файл записан с частотой дискретизации 8000 Гц и имеет только 1 канал. Любая помощь в решении этого будет принята с благодарностью. Спасибо
1 ответ
Вам нужно конвертировать в обычный PCM, прежде чем вы сможете играть в нее. использование WaveFormatConversionStream.ConvertToPcm
сделать это. Он будет работать только в том случае, если на вашем компьютере установлен кодек ACM, который может распаковать ADPCM, и вам также необходимо передать точно правильную структуру WaveFormat.
Приложение NAudioDemo может показать вам, какие кодеки ACM установлены на вашем компьютере и какие форматы входных и выходных сигналов они поддерживают.
Чтобы узнать больше о преобразовании форматов с помощью NAudio, вы можете прочитать мою статью о CodeProject.