c# - C#播放声音列表

标签 c# list audio piano

我有一个简单的钢琴键盘,每次按下琴键都会弹一个音符。我想将每个音符存储在一个列表中,然后在按下“播放”按钮时依次播放所有音符。我已经创建了列表,并将每个注释添加到列表中。但是我在遍历列表和播放每种声音时遇到问题。

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

不幸的是,一旦按下按钮,只有最后一个音符正在播放。

最佳答案

原因可能是您不等待每种声音结束而声音会被“覆盖”。这样,您只会听到最后一个。您需要确保播放完声音,然后再继续进行迭代。

假设代码中的spSoundPlayer类的实例。您可以使用sp.PlaySync()来确保您的程序在移至下一个声音之前暂停。

关于c# - C#播放声音列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009147/

相关文章:

python - 列表理解导致 "name ... is not defined"错误

android - 如何同时启动两个媒体播放器(并同步播放)?

ios - AudioServicesCreateSystemSoundID 不播放 mp3 文件

c# - 使用现有对象而不是创建特定的锁定对象安全吗?

c# - DataTemplates 和通用类型

c# - 处理网站和 cms 身份验证的用户身份

r - 如何在不丢失名称的情况下向列表中的列表添加列?

java - 如何将列表分配为子列表,同时保持元素的原始顺序?

android - 在 (GSM) 电话通话期间读取音频流

c# - 当超时时,我们如何避免多个 Rebus 消息?