我希望在按钮点击后依次播放两个声音。当第一个声音播放完毕后,第二个声音应该开始播放。
我的问题是每次点击按钮时这两个声音都不同,并且我不知道它们的长度,无法使用
我的问题是每次点击按钮时这两个声音都不同,并且我不知道它们的长度,无法使用
Thread.Sleep
。但我不希望这些声音重叠播放。SoundPlayer
类的PlaySync
方法。首先在顶部添加以下内容:using System.Media;
SoundPlayer player = new SoundPlayer(@"path to first media file");
player.PlaySync();
player = new SoundPlayer(@"path to second media file");
player.PlaySync();
这个类从.NET 2.0版本开始可用,所以你应该已经拥有它。
MediaPlayer有MediaEnded事件。在事件处理程序中,只需启动新媒体,它们就应该连续播放。
protected System.Windows.Media.MediaPlayer pl = new MediaPlayer();
public void StartPlayback(){
pl.Open(new Uri(@"/Path/to/media/file.wav"));
pl.MediaEnded += PlayNext;
pl.Play();
}
private void PlayNext(object sender, EventArgs e){
pl.Open(new Uri(@"/Path/to/media/file.wav"));
pl.Play();
}
player.SoundLocation = "path/to/media";
player.PlaySync();
player.SoundLocation = "path/to/media2";
player.PlaySync();
使用NAudio的示例
private List<string> wavlist = new List<string>();
wavlist.Add("c:\\1.wav");
wavlist.Add("c:\\2.wav");
foreach(string file in wavlist)
{
AudioFileReader audio = new AudioFileReader(file);
audio.Volume = 1;
IWavePlayer player = new WaveOut(WaveCallbackInfo.FunctionCallback());
player.Init(audio);
player.Play();
System.Threading.Thread.Sleep(audio.TotalTime);
player.Stop();
player.Dispose();
audio.Dispose();
player = null;
audio = null;
}