为什么有些wav文件在我的c#directsound应用程序中播放,但有些则没有?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么有些wav文件在我的c#directsound应用程序中播放,但有些则没有?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1647字,纯文字阅读大概需要3分钟。
内容图文
我有一个c#应用程序通过directsound播放简单的wav文件.根据我的测试数据,代码运行良好.但是,当我使用真实数据时,它在创建辅助缓冲区时产生了一个非常无用的错误:“ArgumentException:Value不在预期范围内.”
测试wavs具有512kbps比特率,16比特音频样本大小和32kHz音频采样率.新的wavs分别为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块.坏数据中有/一个fmt块,所以我不知道它是否格式错误,或者加载器是否应该进一步寻找fmt数据.我可以看看是否可以从提供数据的人那里获得关于此rouge bext chunk的一些信息 – 如果他们可以删除它,我的代码可能仍然有用.
解决方法:
并非所有的声卡都支持24位样本回放,即使它们这样做,它们通常也必须在该模式下独占打开.采样率存在类似问题.您的声卡可能在44.1kHz运行,在这种情况下,48kHz需要重新采样才能播放.
我编写了一个名为NAudio的开源.NET音频库,它可以让你找出给定WAV文件的采样率和位深度.它还提供了播放音频的替代方法(例如,通过Wav … API),以及使用DMO重采样器对象重新采样文件的功能.
内容总结
以上是互联网集市为您收集整理的为什么有些wav文件在我的c#directsound应用程序中播放,但有些则没有?全部内容,希望文章能够帮你解决为什么有些wav文件在我的c#directsound应用程序中播放,但有些则没有?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。