我有一个编码的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));

附言如果有什么不同,我实际上也将流与SampleProvider包在一起。

当我尝试播放文件时,在acmStreamConvert中,目标缓冲区始终为空,因此waveOut缓冲区中没有缓冲区。

我在所有包含avert函数的acm函数中都没有遇到任何错误,因此我了解格式(源和建议的格式)是正确的,那么为什么从acmConvert返回的缓冲区为空?

编辑

我添加了一些信息,可能会有所帮助。

我尝试播放的adpcm文件是通过以下步骤创建的文件:
  • 我有一个原始的pcm文件(无wav头),采样率= 9600,每个样本的位数= 16,通道=单
  • 我从原始
  • 创建一个wav文件
  • 我阅读了这个wav文件,并将其转换为adpcm文件,采样率= 9600,每个采样位数= 4,通道=单声道
  • 我阅读了编码的adpcm文件并尝试播放它,但没有成功

  • NAudio完成所有步骤。

    我检查了所有输出文件(raw,wav,adpcm)的信号,信号看起来正确。使用Audacity进行的检查。

    我也尝试使用WaveFileReader读取adpcm,但是在WavFormatConversionStream的read方法中,“count”始终为零(因为blockalign检查)。

    原始采样率为9600会造成问题吗?

    还有一件事,我只是看到WaveFileWriter无法创建每个样本= 4的文件,因此我的编码文件实际上是每个样本16位而不是4。

    最佳答案

    该文件很可能是由第三方打包程序压缩的。如果要解码游戏音频,请尝试在启动过程中深入研究游戏转储。

    10-08 20:23