Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么有些wav文件会在我的c#directsound应用程序中播放,而有些则不会';T_C#_Audio_Directx_Directsound - Fatal编程技术网

为什么有些wav文件会在我的c#directsound应用程序中播放,而有些则不会';T

为什么有些wav文件会在我的c#directsound应用程序中播放,而有些则不会';T,c#,audio,directx,directsound,C#,Audio,Directx,Directsound,我有一个通过directsound播放简单wav文件的c#应用程序。根据我掌握的测试数据,代码运行良好。然而,当我使用真实数据时,它在创建辅助缓冲区时产生了一个非常无用的错误:“ArgumentException:值不在预期范围内。” 测试WAV具有512kbps比特率、16位音频采样大小和32kHz音频采样率。新的wavs分别为1152kbps、24位和48kHz。如何让directsound处理这些较大的值,或者如果没有,如何在尝试播放文件之前通过编程检测这些值 我正在使用的是托管的Dire

我有一个通过directsound播放简单wav文件的c#应用程序。根据我掌握的测试数据,代码运行良好。然而,当我使用真实数据时,它在创建辅助缓冲区时产生了一个非常无用的错误:“ArgumentException:值不在预期范围内。”

测试WAV具有512kbps比特率、16位音频采样大小和32kHz音频采样率。新的wavs分别为1152kbps、24位和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数据。我可以看看是否可以从提供数据的人那里获得关于这个胭脂下一块的一些信息——如果他们可以删除它,我的代码可能仍然有效。

并非所有声卡都支持24位样本播放,即使它们支持24位样本播放,通常也必须在该模式下以独占方式打开它们。抽样率也存在类似的问题。您的声卡可能在44.1kHz下工作,在这种情况下,需要重新采样48kHz才能播放


我已经编写了一个名为的开源.NET音频库,它允许您了解给定WAV文件的采样率和位深度。它还提供了播放音频的替代方法(例如,通过Wav…API),以及使用DMO重采样器对象对文件进行重采样的能力。

除了采样问题,Wav只是一种容器格式,音频可以压缩为各种音频格式中的任何一种(就像AVI是视频容器一样)。因此,您可以使用类似的工具来确定您的WAV是否以非标准格式编码,并安装编解码器。Winamp默认安装的编解码器比WMP多,这就解释了为什么Winamp播放它而WMP不播放它。

谢谢-gspot说这两种类型的文件都是PCM,只是我的原始帖子中的统计数据不同而已。很棒的应用程序。只是附加信息:WAV文件的信息表明它们是mono文件。干杯。我会看一看你的应用程序。尝试过你的示例应用程序后,它仍然无法加载-但现在我收到了更好的错误消息:“不是wave文件-没有fmt头”有关更多信息,请参阅我的问题。。。