使用.net多次播放wav文件异步

我有一个应用程序,我需要在按下一个键时播放一个wav文件,我使用SoundPlayer类,但如果按下一个新键时正在播放另一个声音,它会停止声音再次播放它使它看起来很难看。 …

是否有任何方法可以再次播放相同的声音,即使有另一个被播放?

谢谢!

将Windows API中的PlaySoundSND_ASYNCSND_NOSTOP标志结合使用。

http://www.pinvoke.net/default.aspx/winmm.playsound

用法

 //And the actual usage PlaySound (fileName, UIntPtr.Zero, (uint)(SoundFlags.SND_FILENAME | SoundFlags.SND_ASYNC | SoundFlags.SND_NOSTOP)); 

声明

 [Flags] public enum SoundFlags { /// play synchronously (default) SND_SYNC = 0x0000, /// play asynchronously SND_ASYNC = 0x0001, /// silence (!default) if sound not found SND_NODEFAULT = 0x0002, /// pszSound points to a memory file SND_MEMORY = 0x0004, /// loop the sound until next sndPlaySound SND_LOOP = 0x0008, /// don't stop any currently playing sound SND_NOSTOP = 0x0010, /// Stop Playing Wave SND_PURGE = 0x40, /// don't wait if the driver is busy SND_NOWAIT = 0x00002000, /// name is a registry alias SND_ALIAS = 0x00010000, /// alias is a predefined id SND_ALIAS_ID = 0x00110000, /// name is file name SND_FILENAME = 0x00020000, /// name is resource name or atom SND_RESOURCE = 0x00040004 } [DllImport("winmm.dll", SetLastError=true)] static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound); 

更新

道歉,你是对的。 API不能用于同时播放声音。 你应该使用waveOut api。 看看这篇文章: http : //www.codeproject.com/KB/audio-video/cswavrec.aspx

NAudio可能会提供您所需要的。 我自己没有用它,但它相对受欢迎。

有一个免费的(用于非商业应用程序).​​NET的声音库,名为Irrklang ,支持同时播放多个声音(至少从我可以收集的wav和mp3),他们的教程专门涵盖了这个案例的基本用法。图书馆。

如果您问“我怎样才能一次播放多个声音”,那么SoundPlayer永远不会成为答案。 我相信,PlaySound同样受到限制。

您可以查看此问题和此问题,以获取有关声音API的更多选项。 我快速浏览了SDL和SDL Mixer,并认为SDL太原始了(你必须自己混合声音)和SDL Mixer太重量级了(它就是这一切一袋芯片 – 无限的混音和音乐通道(mp3) ,ogg,midi等))。 我看不到BASS的C#绑定的在线参考,但它可以免费用于非商业用途。