我正在尝试创建我自己的小Soundboard播放WAV文件。现在回放不是问题,但如果需要的话,我想要一种停止回放的方法。我想到了一个停止按钮,但不知道如何让它工作。所以我想使用一个循环,但它似乎不起作用。只是想知道是否有人可以帮助我哪里错了,或者如果这只是一个失败的方式去做,那么如果你能告诉我一个更好的方法,那就太好了。:)
private void button1Sound(object sender, MouseEventArgs e)
{
int i = 0;
SoundPlayer simpleSound = new SoundPlayer(@"file.wav");
while (i == 0)
{
simpleSound.Play();
i++;
}
if (i >= 1)
{
simpleSound.Stop();
}
}我也想过只做一个其他的IF,但这也不起作用。我试过了:
private void button1Sound(object sender, MouseEventArgs e)
{
int i = 0;
SoundPlayer simpleSound = new SoundPlayer(@"file.wav");
if (i == 0)
{
simpleSound.Play();
i++;
}
else if (i > 1)
{
simpleSound.Stop();
}
}发布于 2012-10-15 08:13:31
因为您已经在int i = 0中添加了i,所以每次调用该事件时,void将始终为。因此,最好将i包含在空白处。
int i = 0;
SoundPlayer simpleSound = new SoundPlayer(@"file.wav"); //Thanks to @Wanabrutbeer
private void button1Sound(object sender, MouseEventArgs e)
{
if (i == 0)
{
simpleSound.Play();
i++;
}
else if (i >= 1)
{
simpleSound.Stop();
i--;
}
}注意:SoundPlayer类只播放.wav文件。如果您想播放其他媒体文件,如.mp3、.mpeg等...请改用MediaPlayer。
谢谢,
我希望这能有所帮助:)
发布于 2012-10-15 08:06:19
编辑-编辑代码片段以显示异步加载的用法
尝试以下代码:
private System.Media.SoundPlayer sound;
private bool isPlaying = false;
private System.Drawing.Image playimage = System.Drawing.Image.FromFile(@"playimage");
private System.Drawing.Image stopimage = System.Drawing.Image.FromFile(@"stopimage");
private void playstopbutton_Click(object sender, EventArgs e)
{
Button btn = (sender as Button);
if (isPlaying)
{
sound.Stop();
isPlaying = false;
btn.Text = "Play";
btn.Image = playimage;
}
else if (sound.IsLoadCompleted)
{
sound.Play();
isPlaying = true;
btn.Text = "Stop";
btn.Image = stopimage;
}
else
{
btn.Enabled = false;
if (sound == null) sound = new System.Media.SoundPlayer(@"wavefile");
sound.LoadCompleted += new AsyncCompletedEventHandler(sound_LoadCompleted);
sound.LoadAsync();
}
}
private void sound_LoadCompleted(object sender, AsyncCompletedEventArgs e)
{
this.playstopbutton.Text = "Stop";
this.playstopbutton.Image = playimage;
this.playstopbutton.Enabled = true;
isPlaying = true;
sound.Play();
}你可能会遇到的问题是声音的作用域只在方法内部,它需要是类作用域,这样每次都会处理相同的实例声音。从技术上讲,如果您在单击处理程序外部声明了SoundPlayer,那么您使用的int方法将会正常工作。此外,您用来跟踪播放状态的任何变量都需要存在于处理程序方法之外,以便在每次单击操作时保持该值。
https://stackoverflow.com/questions/12887589
复制相似问题