C# 从两个不同的按钮播放和停止音频
我正在运行暂停歌曲的代码,但它显然不起作用。 我无法从第二个按钮访问第一个按钮的变量,因此无法暂停歌曲。 你觉得我怎么能做到? 我使用naudio库是因为我想把音频文件作为资源C# 从两个不同的按钮播放和停止音频,c#,naudio,C#,Naudio,我正在运行暂停歌曲的代码,但它显然不起作用。 我无法从第二个按钮访问第一个按钮的变量,因此无法暂停歌曲。 你觉得我怎么能做到? 我使用naudio库是因为我想把音频文件作为资源 private void button3_Click(object sender, EventArgs e) { MemoryStream mp3file = new MemoryStream(Properties.Resources.musica1);
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;
}
您需要重新构造代码。问题是,在您的
按钮3\u Click
方法中,您正在加载并播放MP3,但随后该功能立即终止。if
语句不会被持续检查,我想您会假设会发生这种情况。因此,单击按钮2
只会更改pausa
的状态,但这不会影响任何内容
一种方法是在类级别声明所有变量(mp3file
、mp3reader
和waveOut
),然后将其余的代码放入按钮3\u单击
中,比如说,放入表单的加载
事件处理程序中
// 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\u单击
功能可以如下所示(假设button3
是您的播放按钮,button2
是您的暂停按钮):
因为
waveOut
是在类级别声明的,所以两个按钮都可以访问它,因此可以随意播放和暂停。您不再需要pausa
,当然,除非您需要知道程序中其他地方的播放状态。您熟悉Scope
吗?您不能从另一个方法之外访问一个方法中的局部变量。。这是这里的基本知识,是一个很好的方法,可供您使用和将来参考。。我建议您在更加熟练之前使用它| |在类级别将pausa
声明为自动属性或公共属性。另外,如果你要发布代码,发布所有相关代码,你在哪里声明pausa
我不熟悉var关键字,所以我刚刚复制了var waveOut=new waveOut()代码>并且我无法将其排除在方法之外。几天前我解决了这个问题,将waveOut声明为waveOut代码>,谢谢你:这是一个新手问题,很难^很简单
private void button3_Click(object sender, EventArgs e)
{
waveOut.Play();
}
private void button2_Click(object sender, EventArgs e)
{
waveOut.Pause();
}