使用.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
{
/// <summary>play synchronously (default)</summary>
SND_SYNC = 0x0000,
/// <summary>play asynchronously</summary>
SND_ASYNC = 0x0001,
/// <summary>silence (!default) if sound not found</summary>
SND_NODEFAULT = 0x0002,
/// <summary>pszSound points to a memory file</summary>
SND_MEMORY = 0x0004,
/// <summary>loop the sound until next sndPlaySound</summary>
SND_LOOP = 0x0008,
/// <summary>don't stop any currently playing sound</summary>
SND_NOSTOP = 0x0010,
/// <summary>Stop Playing Wave</summary>
SND_PURGE = 0x40,
/// <summary>don't wait if the driver is busy</summary>
SND_NOWAIT = 0x00002000,
/// <summary>name is a registry alias</summary>
SND_ALIAS = 0x00010000,
/// <summary>alias is a predefined id</summary>
SND_ALIAS_ID = 0x00110000,
/// <summary>name is file name</summary>
SND_FILENAME = 0x00020000,
/// <summary>name is resource name or atom</summary>
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),他们的教程专门介绍了这种情况作为图书馆。
链接地址: http://www.djcxy.com/p/25983.html