[英]acmStreamConvert - destination buffer is always empty
我有一个编码的 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 函数中都没有错误,包括转换函数,所以我知道格式(来源和建议)是正确的,那么为什么从 acmConvert 返回的缓冲区是空的?
编辑
我添加了一些可能会有所帮助的信息。
我尝试播放的那个 adpcm 文件是我通过以下步骤创建的文件:
所有步骤都是用 NAudio 完成的。
我检查了所有输出文件(raw、wav、adpcm)的信号,信号看起来是正确的。 通过 Audacity 完成的检查。
我还尝试使用 WaveFileReader 读取 adpcm 但随后在 WavFormatConversionStream 的读取方法中,“计数”始终为零(因为块对齐检查)。
原始采样率为 9600 会出问题吗?
还有一件事,我刚刚看到 WaveFileWriter 无法创建每个样本位 = 4 的文件,所以我的编码文件实际上是用每个样本 16 位而不是 4 位创建的。
该文件很可能是由第三方打包程序压缩的。 如果您正在尝试解码游戏音频,请尝试在启动期间挖掘游戏的转储。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.