如何在Windows窗体应用程序中一个接一个地播放两个声音

本文关键字:一个 播放 两个 声音 窗体 Windows 应用程序 | 更新日期: 2023-09-27 18:11:36

我想播放两个声音一个接一个的响应按钮点击。当第一个声音结束时,第二个声音应该开始播放。

我的问题是,每次点击按钮这两个声音是不同的,我不知道他们的长度,以便使用Thread.Sleep。但是我不希望这些声音一个接一个地播放

如何在Windows窗体应用程序中一个接一个地播放两个声音

听起来你是在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;
 }