我正在使用计时器将多个音频文件连接在一起。有一个音频文件列表,计时器将逐个读取文件。一旦有音频读取,它将被播放。目标是在完成之后立即播放前一个音频文件(没有任何中断)。 (我正在使用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;
}
然而,事实是,当第一首音乐结束时,第二首音乐不能立即播放。它是在一秒钟后休息的。这是关于计时器本身的问题吗?我该怎么改变它?
答案 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++;
}