在c#中播放多个wav文件
本文关键字:wav 文件 播放 | 更新日期: 2023-09-27 18:04:51
我有一个应用程序,我需要播放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!");
}
}
}
谢谢!
您可以对System.Windows.Media.MediaPlayer
类执行此操作。注意,您需要添加对WindowsBase
和PresentationCore
的引用。
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控件循环的唯一方法。
不能使用SoundPlayer同时播放两种声音
SoundPlayer使用原生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";