Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按键按下时播放声音_C#_Soundplayer - Fatal编程技术网

C# 按键按下时播放声音

C# 按键按下时播放声音,c#,soundplayer,C#,Soundplayer,我想在按键按下时播放C#音。如果松开钥匙,声音会自动停止 这就是我到目前为止所做的: var player = new System.Windows.Media.MediaPlayer(); try { player.Open(new Uri(label46.Text)); player.Volume = (double)trackBar4.Value / 100; player.Play(); } catc

我想在按键按下时播放C#音。如果松开钥匙,声音会自动停止

这就是我到目前为止所做的:

    var player = new System.Windows.Media.MediaPlayer();
    try
    {
        player.Open(new Uri(label46.Text));
        player.Volume = (double)trackBar4.Value / 100;
        player.Play();
    }
    catch (FileNotFoundException)
    {
        MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
    }

这个类在键盘改变状态时触发事件,您可以订阅这些事件,然后检查所按下的键是否是您想要的键

例如,在KeyDown事件中,检查他们的密钥是否为“p”或其他,如果是,则播放文件。在KeyUp事件中,检查它们的密钥是否相同,然后停止播放文件

这个例子并不完全是您需要的,但它应该让您开始:

private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Return)
    {
        textBlock1.Text = "You Entered: " + textBox1.Text;
    }
}

您可以通过KeyDown和KeyUp事件来处理此问题。为此,这两个事件都需要知道您的媒体对象和播放状态。可能还有其他我不知道的可能性。我用这个senerio来播放和录音。你可以试着只玩

其次,如果在媒体结束或出现故障后仍连续按键,则还需要重置。因此,您需要注册这些事件,并执行与在KeyUP事件中相同的操作

下面的示例显示了应用程序窗口的KeyUP和KeyDown事件

MediaPlayer player = new System.Windows.Media.MediaPlayer();
bool playing = false;

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (playing == true)
    {
        return;
    }

    /* your code follows */
    try
    {
        player.Open(new Uri(label46.Text));
        player.Volume = (double)trackBar4.Value / 100;
        player.Play();
        playing = true;
    }
    catch (FileNotFoundException)
    {
        MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
    }
}

private void Window_KeyUp(object sender, KeyEventArgs e)
{
    if (playing == false)
    {
        return;
    }

    /* below code you need to copy to your Media Ended/Media Failed events */
    player.Stop();
    player.Close();
    playing = false;
}

我建议将
player
对象保留在附近,当按键按下时,只需调用
.Play()
。这样,您就不必每次都打开文件。问题是我使用了很多声音文件,所以是的。所以,当按下任何键或特定键时?按键向下事件按预期工作,但按键向上不会工作:私有无效窗口\u键向上(对象发送器,KeyEventArgs e){if(playing==false){return;}如果(e.KeyCode==Keys.D1){pictureBox6.Image=Beatpadpc.Properties.Resources.black_square_按钮;player.Stop();player.Close();playing=false;}