我有一个编码的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));
P.S。如果它有任何区别,我实际上也用SampleProvider封装了流。
当我尝试播放该文件时,在acmStreamConvert中,目标缓冲区始终为空,因此没有缓冲区填充到waveOut缓冲区。
我在所有acm函数中都没有错误包括转换函数所以我理解格式(源和建议)是正确的,为什么从acmConvert返回缓冲区 - 空?
修改
我添加了一些可能有帮助的信息..
我尝试播放的adpcm文件是我使用以下步骤创建的文件:
使用NAudio完成的所有步骤。
我检查了所有输出文件(raw,wav,adpcm)的信号,信号看起来正确。使用Audacity完成检查。
我还尝试用WaveFileReader读取adpcm,但是在WavFormatConversionStream的read方法中读取' count'始终为零(因为块对齐检查)。
原始采样率是9600是否会出问题?
还有一件事,我刚看到WaveFileWriter无法创建每个样本位= 4的文件,因此我的编码文件实际上是每个样本创建16位而不是4位。
答案 0 :(得分:0)
该文件很可能是由第三方打包程序压缩的。如果您要解码游戏音频,请尝试在启动过程中深入研究游戏转储。