我有一个编码的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文件是通过以下步骤创建的文件:
NAudio完成所有步骤。
我检查了所有输出文件(raw,wav,adpcm)的信号,信号看起来正确。使用Audacity进行的检查。
我也尝试使用WaveFileReader读取adpcm,但是在WavFormatConversionStream的read方法中,“count”始终为零(因为blockalign检查)。
原始采样率为9600会造成问题吗?
还有一件事,我只是看到WaveFileWriter无法创建每个样本= 4的文件,因此我的编码文件实际上是每个样本16位而不是4。
最佳答案
该文件很可能是由第三方打包程序压缩的。如果要解码游戏音频,请尝试在启动过程中深入研究游戏转储。