我有一个 ac# 应用程序,可以通过 directsound 播放简单的 wav 文件。使用我拥有的测试数据,代码运行良好。但是,当我使用真实世界的数据时,它在创建辅助缓冲区时产生了一个非常无用的错误:“ArgumentException:值不在预期范围内。”
测试 wav 具有 512kbps 的比特率、16bit 的音频采样大小和 32kHz 的音频采样率。新的 wav 分别为 1152kbps、24bit 和 48kHz。如何让 Directsound 处理这些较大的值,或者如果不是,我如何在尝试播放文件之前以编程方式检测这些值?
它是我正在使用的托管 DirectX v9.00.1126,我在下面包含了一些示例代码:
using DS = Microsoft.DirectX.DirectSound;
...
DS.Device device = new DS.Device();
device.SetCooperativeLevel(this, CooperativeLevel.Normal);
...
BufferDescription bufferDesc = new BufferDescription();
bufferDesc.ControlEffects = false;
...
try
{
SecondaryBuffer sound = new SecondaryBuffer(path, bufferDesc, device);
sound.Play(0, BufferPlayFlags.Default);
}
...
附加信息:真实世界的 wav 文件也不会在 windows 媒体播放器中播放,告诉我需要编解码器才能播放文件,而它们在 winamp 中播放正常。
附加信息 2:比较工作测试数据和不良真实数据的字节,我可以看到在 RIFF 块之后,不良数据有一个“bext”块,互联网告诉我是与广播相关的元数据音频扩展,而测试数据直接进入 fmt 块。/is/ 坏数据中有一个 fmt 块,所以我不知道它是否格式错误,或者加载程序是否应该进一步寻找 fmt 数据。我可以看看我是否可以从向我提供数据的人那里获得有关此 rouge bext 块的一些信息 - 如果他们可以删除它,我的代码可能仍然有效。