【问题标题】:How do I play two sounds one after the other in a Windows Forms application?如何在 Windows 窗体应用程序中一个接一个地播放两种声音?
【发布时间】:2011-10-16 14:12:59
【问题描述】:

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

我的问题是每次单击按钮时这两种声音都是不同的,我不知道它们的长度以便使用Thread.Sleep。但我不希望这些声音相互叠加。

【问题讨论】:

标签: c# winforms audio playback


【解决方案1】:

听起来你在使用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 开始可用,所以你应该拥有它。

【讨论】:

    【解决方案2】:

    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();
      }
    

    【讨论】:

    • 您最好取消订阅该活动。
    【解决方案3】:

    在 Shadow Wizards 示例中,不必每次都制作新的声音播放器。 这也有效:

    player.SoundLocation = "path/to/media";
    player.PlaySync();
    player.SoundLocation = "path/to/media2";
    player.PlaySync();
    

    【讨论】:

      【解决方案4】:

      使用 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;
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-08
        相关资源
        最近更新 更多