如何在Windows窗体应用程序中一个接一个地播放两个声音
本文关键字:一个 播放 两个 声音 窗体 Windows 应用程序 | 更新日期: 2023-09-27 18:11:36
我想播放两个声音一个接一个的响应按钮点击。当第一个声音结束时,第二个声音应该开始播放。
我的问题是,每次点击按钮这两个声音是不同的,我不知道他们的长度,以便使用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();
}
在《Shadow Wizards》的例子中,没有必要每次都创建一个新的声音播放器。
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;
}