首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >停止SoundPlayer播放

停止SoundPlayer播放
EN

Stack Overflow用户
提问于 2012-10-15 07:37:55
回答 2查看 4.7K关注 0票数 4

我正在尝试创建我自己的小Soundboard播放WAV文件。现在回放不是问题,但如果需要的话,我想要一种停止回放的方法。我想到了一个停止按钮,但不知道如何让它工作。所以我想使用一个循环,但它似乎不起作用。只是想知道是否有人可以帮助我哪里错了,或者如果这只是一个失败的方式去做,那么如果你能告诉我一个更好的方法,那就太好了。:)

代码语言:javascript
复制
    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,但这也不起作用。我试过了:

代码语言:javascript
复制
    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();
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-15 08:13:31

因为您已经在int i = 0中添加了i,所以每次调用该事件时,void将始终为。因此,最好将i包含在空白处。

代码语言:javascript
复制
 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

谢谢,

我希望这能有所帮助:)

票数 3
EN

Stack Overflow用户

发布于 2012-10-15 08:06:19

编辑-编辑代码片段以显示异步加载的用法

尝试以下代码:

代码语言:javascript
复制
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方法将会正常工作。此外,您用来跟踪播放状态的任何变量都需要存在于处理程序方法之外,以便在每次单击操作时保持该值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12887589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档