从两个不同的按钮播放和停止音频

时间:2015-02-01 21:20:43

标签: c# naudio

我正在运行此代码暂停这首歌,但它无意中无法正常工作。 我无法从第二个按钮访问第一个按钮的变量,因此我无法暂停该歌曲。 你怎么认为我能做到这一点? 我正在使用naudio库,因为我想将音频文件作为资源。

private void button3_Click(object sender, EventArgs e)
{            
    MemoryStream mp3file = new MemoryStream(Properties.Resources.musica1);                
    Mp3FileReader mp3reader = new Mp3FileReader(mp3file);
    var waveOut = new WaveOut();
    waveOut.Init(mp3reader);
    waveOut.Play();

            if (pausa)
            {
                waveOut.Pause();
            }


    }
    private void button2_Click(object sender, EventArgs e)
    {
        pausa = true;
    }

1 个答案:

答案 0 :(得分:1)

您需要重新构建代码。问题是,在button3_Click方法中,您正在加载和播放MP3,但随后该功能会立即终止。 if语句不会被连续检查,这是我认为你会想到的。因此,点击button2只会更改pausa的状态,但这并不会影响任何内容。

一种方法是在类级别声明所有变量(mp3filemp3readerwaveOut),然后将其余代码放在{{1}中比如说,你的表格button3_Click事件处理程序。

Load

现在,您的// These variables are declared at the class level MemoryStream mp3file; Mp3FileReader mp3reader; WaveOut waveOut; ... private void Form1_Load(object sender, EventArgs e) { mp3file = new MemoryStream(Properties.Resources.musica1); mp3reader = new Mp3FileReader(mp3file); waveOut = new WaveOut(); waveOut.Init(mp3reader); } 功能看起来像这样(假设buttonX_Click是您的播放按钮而button3是您的暂停按钮):

button2

由于private void button3_Click(object sender, EventArgs e) { waveOut.Play(); } private void button2_Click(object sender, EventArgs e) { waveOut.Pause(); } 在类级别声明,因此两个按钮都可以访问它,因此可以随意播放和暂停。你不再需要waveOut,除非你当然需要知道该计划其他地方的游戏状态。