acmStreamConvert - целевой буфер всегда пуст
У меня есть закодированный файл adpcm (частота дискретизации 9600 и глубина в битах 4), и я хочу воспроизвести его с помощью NAudio.
Я читаю файл с помощью RawSourceWaveStream и затем делаю:
var reader = new RawSourceWaveStream(new MemoryStream(File.ReadAllBytes(path)), new AdpcmWaveFormat(9600,1));
var convert = WaveFormatConversionStream.CreatePcmStream(reader);
waveOut.Init(new BlockAlignReductionStream(convert));
PS Если это имеет какое-то значение, я на самом деле обволакиваю поток также SampleProvider.
Когда я пытаюсь воспроизвести файл, в acmStreamConvert целевой буфер всегда пуст, и поэтому буфер не заполняется в буфер waveOut.
Я не получил никаких ошибок во всех функциях acm, включая функцию convert, так что я понимаю, что форматы (исходные и предлагаемые) верны, так почему буфер возвращается из acmConvert - пустой?
редактировать
Я добавляю некоторую информацию, которая, возможно, поможет..
Этот файл adpcm, который я пытаюсь воспроизвести, является файлом, который я создал с помощью следующих шагов:
- У меня есть необработанный файл PCM (без заголовка wav) частота дискретизации =9600, бит на выборку =16, каналы = моно
- Я создаю файл WAV из сырого
- Я прочитал этот wav-файл и преобразовал его в частоту дискретизации файла adpcm =9600, бит на семпл =4, каналы = моно
- Я читаю закодированный файл adpcm и пытаюсь воспроизвести его, но безуспешно
Все шаги сделаны с NAudio.
Я проверил сигнал всех выходных файлов (raw, wav, adpcm) и сигнал выглядит правильно. Проверка выполнена с Audacity.
Я также попытался прочитать adpcm с WaveFileReader, но затем в методе чтения WavFormatConversionStream 'count' всегда равен нулю (потому что проверка blockalign).
Необработанная частота дискретизации составляет 9600, это может сделать проблему?
Еще одна вещь, я только что увидел, что WaveFileWriter не может создавать файлы с битом на семпл =4, поэтому мой закодированный файл фактически создается с 16 битами на семпл, а не с 4.
0 ответов
Скорее всего файл сжат сторонним упаковщиком. Если вы пытаетесь расшифровать звук игры, попробуйте покопаться в дампе игры при запуске.