2

我有一个窗口应用程序,可让您根据单击的字母播放声音。您可以根据您在 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();                      
    }
4

0 回答 0