我正在使用计时器将多个音频文件连接在一起。这里有一个音频文件列表,计时器将一一读取文件。读取音频后,将开始播放。目的是在音频文件播放完后立即播放音频文件(不间断)。
(我正在使用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;
 }

但是,事实是,当第一首音乐结束时,第二首没有立即播放。一秒钟休息之后。这是计时器本身的问题吗?我该如何更改?

最佳答案

感谢@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++;
}

07-28 13:03