我有一个简单的钢琴键盘,每按一次键就会弹奏一个音符。我想将每个音符存储在一个列表中,然后在按下“播放按钮”时播放所有音符。我已经创建了List并将每个注释添加到List中。但我在浏览列表并播放每个声音时遇到问题。
MusicNote mn = new MusicNote(count, duration, bNoteShape, xLoc, mk.musicNote);
notes.Add(mn);
mn.Location = new Point(xLoc, yLoc);
this.panel1.Controls.Add(mn.drawNote());
private void Play_Click(object sender, EventArgs e)
{
foreach(MusicNote mn in notes)
{
textBox2.Text += mn.ToString();
sp.SoundLocation = @"C:/Users/Daryl/Desktop/mapped/" + mn.musicNote + ".wav"; //change this to the location of your "mapped" folder
sp.Play();
}
}
不幸的是,按下按钮后只播放最后一个音符。
答案 0 :(得分:2)
原因可能是你没有等待每个声音完成而声音被覆盖了#34;。这样你只能听到最后一个。您需要确保在迭代之前继续播放另一个声音之前播放声音。
假设代码中的sp
是SoundPlayer
类的实例。您可以使用sp.PlaySync()
确保程序暂停,然后再转到下一个声音。