c# - 如何删除两个计时器滴答之间的间隔

时间:2018-02-09 12:26:12

标签: c# audio timer naudio

我正在使用计时器将多个音频文件连接在一起。有一个音频文件列表,计时器将逐个读取文件。一旦有音频读取,它将被播放。目标是在完成之后立即播放前一个音频文件(没有任何中断)。 (我正在使用Naudio)

以下是代码:

 private void timer_key_Tick(object sender, EventArgs e)
 {
     if(!isPlaying)
     {
         //play the current audio
         DirectSoundOut dso = sounds2[key_indexer];
         dso.Play();
         targetMusics.Add(dso);
     }
     else
     {
         foreach (DirectSoundOut dso in targetMusics)
         {//stop the current audio
             dso.Stop();
         }
         targetMusics.Clear();
         key_indexer++;     //switch to the next audio
         if (key_indexer >= myMT.Keys.Count)
         {
             key_indexer = 0;
             timer_key.Stop();
         }
     }
     isPlaying = !isPlaying;
 }

然而,事实是,当第一首音乐结束时,第二首音乐不能立即播放。它是在一秒钟后休息的。这是关于计时器本身的问题吗?我该怎么改变它?

1 个答案:

答案 0 :(得分:0)

感谢@HansPassant的帮助。我在这个计时器中弄错了逻辑。在我应用他的建议之后,这是正确的代码:

//stop the current playing
foreach(DirectSoundOut d in targetMusics)
{
    d.Stop();
}
targetMusics.Clear();

//stop the entire process
if (key_indexer >= myMT.Keys.Count)
{
    key_indexer = 0;
    timer_key.Stop();
}
else
{   //play the current audio
    DirectSoundOut dso = sounds2[key_indexer];
    targetMusics.Add(dso);
    dso.Play();

    key_indexer++;
}