使用循环 c# 同时播放两个声音

本文关键字:两个 声音 播放 循环 | 更新日期: 2023-09-27 18:34:26

我有一个背景音乐,还有一个按钮,正在播放1~2秒的音效。我想要的是使背景音乐即使在播放按钮声音后仍会继续播放。

目前,它正在永久停止背景音乐以播放声音按钮。

这是我现在拥有的当前解决方案

private void LoginGUI_Load(object sender, EventArgs e)
{
    try
    {
        string filename = @"..'..'Soundtracks'The Boy Who Shattered Time.wav";
        Player = new System.Media.SoundPlayer(filename);
        Player.PlayLooping();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Unable to play soundtrack.");
    }
}

这是按钮

public virtual void getButtonSound()
{
    try
    {
        string filename = @"..'..'Soundtracks'demacia.wav";
        Player = new System.Media.SoundPlayer(filename);
        Player.PlaySync();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Unable to play soundtrack.");
    }
}

使用循环 c# 同时播放两个声音

尝试使用线程

new System.Threading.Thread(() => {
        var c = new System.Windows.Media.MediaPlayer();
        c.Open(new System.Uri(@"..'..'Soundtracks'The Boy Who Shattered Time.wav"));
        c.PlayLooping();
    }).Start();

new System.Threading.Thread(() => {
        var c = new System.Windows.Media.MediaPlayer();
        c.Open(new System.Uri(@"..'..'Soundtracks'demacia.wav"));
        c.Play();
    }).Start();

我想Player是你的类的一个字段,所以你用你的按钮声音覆盖了包含循环 wav 文件的第一个实例。使用两个SoundPlayer实例 - 每个声音一个 - 并且不需要线程。

此外,您应该将PlaySync()更改为 Play() ,因为 Play()PlayLooping() 将在内部使用线程,而PlaySync()将阻塞当前线程。