如何在不创建新玩家的情况下播放声音

时间:2012-10-23 15:22:58

标签: c# wav audio-player soundplayer

我正在一个表单项目中工作并在一些方法和事件中播放一些声音。 例如,在方法中我有这个:

SoundPlayer sndplayrONE = new SoundPlayer(Properties.Resources.wavsound1);

sndplayrONE.Play();

在另一个中,我有这个:

SoundPlayer sndplayrTWO = new SoundPlayer(Properties.Resources.wavsound2);

sndplayrTWO.Play();

我想要的是在表单代码的开头只创建一个soundplayer类的实例,比如

SoundPlayer sndplayr = new SoundPlayer(--some generic input---)

然后从任何事件中调用它,例如

sndplayr2.Play(sound1); sndplayr2.Play(sound2); sndplayr2.Play(sound3);

等...

我见过一些像SoundPlayer(Stream)SoundPlayer(String)这样的构造函数,但我不明白这些构造函数。我需要一些简单易用的东西,就像我以前那样,但是每次我想播放声音时都不会创建新的实例。我在Resources.resx中有所有声音。

2 个答案:

答案 0 :(得分:2)

使用不同的构造函数

http://msdn.microsoft.com/en-us/library/system.media.soundplayer.aspx

System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer();
myPlayer.SoundLocation = @"c:\click.wav";
myPlayer.Play();

答案 1 :(得分:0)

查看此处的信息:MSDN SoundPlayer Class (System.Media)

看起来您可以通过设置SoundLocation属性然后执行Load()或LoadAsync()来更改特定播放器将播放的声音。

然而,制作像字典这样的东西可能会明智地将许多SoundPlayer对象放入您认为与当前上下文相关的对象中。类似的东西:

Dictionary<string, SoundPlayer> sounds;

// Load sounds

// I wouldn't hardcode strings here, use constants or something. This is just an example.
sound["Sound1"].Play();