我有一个c#应用程序,通过directsound播放简单的wav文件。通过测试数据,代码运行良好。但是,当我使用真实世界的数据时,它在创建辅助缓冲区时产生了非常无益的错误:“ArgumentException:值不在预期的范围内。”为什么一些wav文件在我的c#directsound应用程序中播放,但有些不是?
测试wavs具有512kbps比特率,16bit音频采样大小和32kHz音频采样率。新的波形分别是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 Media Player播放或者,告诉我需要一个编解码器来播放这个文件,而他们在winamp中播放得很好。
附加信息2:比较工作测试数据和错误的真实世界数据的字节,我可以看到过去的RIFF块,坏数据有一个“bext”块,互联网告诉我的是元数据与广播音频扩展相关联,而测试数据直接进入fmt块。在坏数据中有/ fmt块,所以我不知道它是否格式不正确,或者装载者是否应该进一步寻找fmt数据。我可以看到,如果我可以从提供数据的人那里得到关于这个胭脂虫块的一些信息 - 如果他们可以删除它,我的代码仍然可以工作。
只是附加信息:WAV文件的信息表明它们是单声道文件。 – tzot 2008-09-19 09:54:02