2017-12-28 54 views
1

私は、キーを押すたびに音符を演奏する単純なピアノのキーボードを持っています。私はListに各音符を保存しておき、 "Playが押された"ボタンを押すと、音符の後にすべての音符を再生したい。私はすでにリストを作成し、リストに押された各ノートを追加しています。しかし、私はリストを横断して各サウンドを再生することに問題があります。C#音のリストを再生

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

残念ながら、ボタンを押すと最後の音符だけが再生されます。

答えて

2

おそらく、それぞれのサウンドが終了するのを待たずにサウンドが「オーバーライド」されるからです。あなたは最後のものだけを聞きます。あなたは、あなたの反復でもう一方のサウンドに進む前に、サウンドの再生が終了していることを確認する必要があります。

spSoundPlayerクラスのインスタンスであるとします。 sp.PlaySync()を使用して、次のサウンドに移動する前にプログラムが一時停止していることを確認できます。

+0

それはうまくいきました、ありがとうございます! – betamech

+1

@betamech、NP、あなたが答えとしてそれを受け入れることができるなら、多分それは他人を助けるでしょう。 – Hasan

+0

クリックイベント内でplaysyncを実行すると、UIがフリーズされます – Steve