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, который я пытаюсь воспроизвести, является файлом, который я создал с помощью следующих шагов:

  1. У меня есть необработанный файл PCM (без заголовка wav) частота дискретизации =9600, бит на выборку =16, каналы = моно
  2. Я создаю файл WAV из сырого
  3. Я прочитал этот wav-файл и преобразовал его в частоту дискретизации файла adpcm =9600, бит на семпл =4, каналы = моно
  4. Я читаю закодированный файл adpcm и пытаюсь воспроизвести его, но безуспешно

Все шаги сделаны с NAudio.

Я проверил сигнал всех выходных файлов (raw, wav, adpcm) и сигнал выглядит правильно. Проверка выполнена с Audacity.

Я также попытался прочитать adpcm с WaveFileReader, но затем в методе чтения WavFormatConversionStream 'count' всегда равен нулю (потому что проверка blockalign).

Необработанная частота дискретизации составляет 9600, это может сделать проблему?

Еще одна вещь, я только что увидел, что WaveFileWriter не может создавать файлы с битом на семпл =4, поэтому мой закодированный файл фактически создается с 16 битами на семпл, а не с 4.

0 ответов

Скорее всего файл сжат сторонним упаковщиком. Если вы пытаетесь расшифровать звук игры, попробуйте покопаться в дампе игры при запуске.

Другие вопросы по тегам