C# 声音播放的开始被切断

C# 声音播放的开始被切断,c#,.net,winapi,audio,C#,.net,Winapi,Audio,我试图从嵌入式资源中播放WAV,但它始终会从开始的0.5秒到2.0秒之间的任何位置断开。也就是说,如果WAV是一个录制的声音,说“大家好,今天的新闻…”,那么播放通常会从一开始就切断“Hello every--” 回放代码非常简单: using System.Media; play(GetResourceStream(audioItem)); ... private static void play(UnmanagedMemoryStream sndData) { SoundPlay

我试图从嵌入式资源中播放WAV,但它始终会从开始的0.5秒到2.0秒之间的任何位置断开。也就是说,如果WAV是一个录制的声音,说“大家好,今天的新闻…”,那么播放通常会从一开始就切断“Hello every--”

回放代码非常简单:

using System.Media;

play(GetResourceStream(audioItem));

...

private static void play(UnmanagedMemoryStream sndData)
{
   SoundPlayer sp = new SoundPlayer(sndData);
   sp.LoadCompleted += delegate( object sender, System.ComponentModel.AsyncCompletedEventArgs e)
   {
      sp.Play();
   };    
   sp.LoadAsync();
}
原始代码刚刚创建了SoundPlayer对象,然后调用Play()方法。我添加了LoadAsync()调用和LoadCompleted事件处理程序,以查看这是否解决了问题,但它的行为似乎没有任何不同


附加信息:似乎只有在应用程序第一次调用SoundPlayer.Play()时,声音播放才会被切断。后续呼叫似乎正常。

应该没有问题。尝试将wav放入文件并从文件播放。如果问题仍然存在,我认为您应该检查声卡的各种效果设置,如褪色

试着播放“C:\Windows\Media\chord.wav”,它非常短,甚至不到一秒钟

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"C:\Windows\Media\chord.wav");
player.Play();

若你们对“同步”播放并没有问题,那个就试试这个方法。在完全相同的情况下(即使用“嵌入式资源”),这对我来说非常有效。

我刚刚遇到了同样的问题。在应用程序中以及通过外部媒体播放器(如VLC)播放时,声音的开头都会被切断。就我而言,问题与蓝牙扬声器有关。将声音输出切换到有线扬声器后,效果良好。

谢谢您的尝试,但我认为这没有帮助。声音在一个文件中。作为嵌入式资源,它存储在程序的EXE文件中。在程序需要它之前,它不会加载到RAM中。LoadASync调用将声音加载到RAM中,并在完成后调用LoadCompleted处理程序。然后,事件处理程序调用Play函数。没有涉及可能影响播放的声卡设置。我知道它在一个嵌入的文件中。尽管如此,它们可以以不同的方式处理。你应该尝试两个实验并报告观察结果。。。如果你想解决这个问题,当然。对不起,但我不认为这样的实验会有什么帮助。比如说,我尝试将声音保存在自己的文件中,但问题仍然存在。这并没有让我更接近一个解决方案。假设我试过了,但问题并不存在。这仍然没有让我更接近解决方案。我没有选择将声音数据保存在单独的文件中。它们必须是嵌入式资源。测试文件存储有助于缩小问题。例如,测试一个简短的声音会显示它是否存在跳过开头的问题或任何音效问题。如果你不愿意花一分钟做一些简单的测试,那就靠你自己了。好吧,为了便于讨论,我试着用你发布的代码播放一个文件中的声音。声音没有播放。现在,我们已经按照您想要的方式缩小了范围,解决方案是什么?必须是异步的。我有相同的问题,但我用相反的方式解决了它:我从有线切换到蓝牙(这是在mac上)。