【问题标题】:Playing multiple wav files in C#在 C# 中播放多个 wav 文件
【发布时间】:2013-03-20 11:05:45
【问题描述】:

我有一个应用程序,我需要在按下或单击一个键或按钮时播放一个 wav 文件,我使用 SoundPlayer 类,但是当我尝试同时播放另一个 wav 文件时,正在播放的文件停止了。

有没有办法同时播放多个 wav 文件? 如果是,请给我例子或教程?

这是我目前得到的:

private void pictureBox20_Click(object sender, EventArgs e)
{
    if (label30.Text == "Waiting 15.wav")
    {
        MessageBox.Show("No beat loaded");
        return;
    }
    using (SoundPlayer player = new SoundPlayer(label51.Text))
    {
        try
        {
            player.Play();
        }
        catch (FileNotFoundException)
        {
            MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
        }
    }
}

谢谢!

【问题讨论】:

  • 您能发布您现有的代码吗?您可以通过单击edit 来完成此操作。谢谢。
  • 这是一个 Windows 窗体程序吗?
  • 嗯,我明白了,已编辑。

标签: c# winforms audio wav


【解决方案1】:

您可以使用 System.Windows.Media.MediaPlayer 类来做到这一点。请注意,您需要添加对WindowsBasePresentationCore 的引用。

private void pictureBox20_Click(object sender, EventArgs e)
{
    const bool loopPlayer = true;
    if (label30.Text == "Waiting 15.wav")
    {
        MessageBox.Show("No beat loaded");
        return;
    }
    var player = new System.Windows.Media.MediaPlayer();
    try
    {
        player.Open(new Uri(label51.Text));
        if(loopPlayer)
            player.MediaEnded += MediaPlayer_Loop;
        player.Play();
    }
    catch (FileNotFoundException)
    {
        MessageBox.Show("File has been moved." + "\n" + "Please relocate it now!");
    }
}

编辑:您可以通过订阅MediaEnded 事件来循环播放声音。

void MediaPlayer_Loop(object sender, EventArgs e)
{
    MediaPlayer player = sender as MediaPlayer;
    if (player == null)
        return;

    player.Position = new TimeSpan(0);
    player.Play();
}

根据您的代码,我猜您正在编写某种音乐制作软件。老实说,我不确定这种方法是否每次都能完美循环,但据我所知,这是使用 MediaPlayer 控件循环的唯一方法。

【讨论】:

  • 谢谢,您也可以使用这种方法进行循环吗?如果可能怎么办?谢谢!
  • @JoseCardama 您可以使用 MediaEnded 事件来循环播放声音。查看我的编辑。
  • 谢谢您,非常感谢您的帮助。 (要停止,我只需制作“player.Stop();”?)
  • 嗨,循环和播放/停止工作正常。现在我需要用轨迹栏控制音量。你能告诉我怎么做吗?提前致谢。
  • 您可以使用MediaPlayer.Volume设置音量。请注意,Volume 是 0 和 1 之间的两倍,因此您需要类似 player.Volume = (double)trackBar.Value / trackBar.Maximum 的内容。
【解决方案2】:

不能使用 SoundPlayer 同时播放两个声音。

SoundPlayer 使用 Native WINAPI PlaySound,它不支持在同一实例中播放多个声音。

更好的选择是参考WindowsMediaPlayer

添加对C:\Windows\System32\wmp.dll的引用

var player1 = new WMPLib.WindowsMediaPlayer();
player1.URL = @"C:\audio_output\sample1.wav";

var player2 = new WMPLib.WindowsMediaPlayer();
player2.URL = @"C:\audio_output\sample2.wav";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多