我有一个窗口应用程序,可让您根据单击的字母播放声音。您可以根据您在 TextBox 中输入的数字重复声音,并且可以按顺序播放 1 到 3。这一切都与下面的代码一起工作。但我希望能够在播放和暂停时停止声音,但不能。停止按钮事件在完成后触发。
我试过让你使用 WMPLib.WindowsMediaPlayer,这里的停止和暂停正在工作,但是声音同时播放,我创建了一个线程在声音之间休眠,但挑战是声音的持续时间不一样所以如果时间太长,它可以在其他人仍在播放时开始。
private SoundPlayer myPlayer;
myPlayer = new SoundPlayer();
public void PlaySound()
{
int PageNo = Convert.ToInt16(cboPage.SelectedItem);
int lineNumber = 0;
int fromLetter = 0;
int toLetter = 0;
int numberOfLoop = 0;
int numberOfRepeat = 0;
try
{
numberOfRepeat = Convert.ToInt32(nudRepeat.Value);
while (numberOfRepeat > 0)
{
if (cboLine.InvokeRequired)
{
cboLine.Invoke(new MethodInvoker(delegate { lineNumber = Convert.ToInt32(cboLine.SelectedItem); }));
}
if (cboLetterFrom.InvokeRequired)
{
cboLetterFrom.Invoke(new MethodInvoker(delegate { fromLetter = Convert.ToInt32(cboLetterFrom.SelectedItem); }));
}
if (cboLetterTo.InvokeRequired)
{
cboLetterTo.Invoke(new MethodInvoker(delegate { toLetter = Convert.ToInt32(cboLetterTo.SelectedItem); }));
}
numberOfLoop = toLetter - fromLetter + 1;
while (numberOfLoop > 0)
{
myPlayer.SoundLocation = @"C:\Sound\Page " + PageNo.ToString() + "\\Line " + lineNumber.ToString() + "\\Lesson " + fromLetter + ".wav";
myPlayer.PlaySync();
fromLetter += 1;
numberOfLoop -= 1;
}
numberOfRepeat -= 1;
}
}
catch (FileNotFoundException fnfe)
{
MessageBox.Show(fnfe.Message.ToString(), "Audio file not found");
}
catch (InvalidOperationException ioe)
{
MessageBox.Show(ioe.Message.ToString(), "Invalid wav format");
}
private void btnStop_Click(object sender, EventArgs e)
{
myPlayer.Stop();
}