2017-12-28 71 views
1

키를 누를 때마다 음을 연주하는 간단한 피아노 키보드가 있습니다. 각 음표를 목록에 저장 한 다음 "재생을 누르십시오"버튼을 누르면 서로 다른 음을 연주하고 싶습니다. 이미 List를 만들고 List에 눌려진 각 노트를 추가하고 있습니다. 그러나 목록을 가로 지르고 각 사운드를 재생하는 데 문제가 있습니다.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