Как воспроизвести два звука один за другим в приложении Windows Forms? - PullRequest
5 голосов
/ 16 октября 2011

Я хочу воспроизводить два звука один за другим в ответ на нажатие кнопки. Когда первый звук заканчивается, второй звук должен начать воспроизводиться.

Моя проблема в том, что каждый раз, когда нажимается кнопка, эти два звука различаются, и я не знаю их длины, чтобы использовать Thread.Sleep. Но я не хочу, чтобы эти звуки играли друг на друге.

Ответы [ 4 ]

6 голосов
/ 16 октября 2011

Похоже, что вы после PlaySync метода SoundPlayer класса .. сначала добавьте это сверху:

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, поэтому он должен быть у вас.

1 голос
/ 19 ноября 2011

В примере с Shadow Wizards нет необходимости каждый раз создавать новый звуковой плеер.Это также работает:

player.SoundLocation = "path/to/media";
player.PlaySync();
player.SoundLocation = "path/to/media2";
player.PlaySync();
1 голос
/ 16 октября 2011

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();
  }
0 голосов
/ 19 июля 2013

Пример использования 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;
 }
...