使用.net多次播放wav文件异步
我有一个应用程序,我需要在按下一个键时播放一个wav文件,我使用SoundPlayer类,但如果按下一个新键时正在播放另一个声音,它会停止声音再次播放它使它看起来很难看。 …
是否有任何方法可以再次播放相同的声音,即使有另一个被播放?
谢谢!
将Windows API中的PlaySound
与SND_ASYNC
和SND_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#绑定的在线参考,但它可以免费用于非商业用途。