2015-12-11 3 views
0

Итак, я делаю простое пианино и пытаюсь пересечь коллекцию, где храню заметки, но SoundPlayer не хочет правильно воспроизводить их в «без режима отладки», играя только последние один. Однако, когда я помещаю точку останова, он играет все из нихВоспроизведение музыки из коллекции SoundPlayer

public static List<MusicNote> music = new List<MusicNote>(15); 
public static void PlayAll() 
    { 
     SoundPlayer sp = new SoundPlayer(); 
     for (int i = 0; i <= music.Count - 1; i++) 
     { 
      string text = music[i].pitch.ToString(); 
      sp.SoundLocation = (@"c:\my path here\" + text + ".wav"); 
      sp.Play(); 
      sp.Stop(); 
     } 
    } 

Шаг - это просто порядковый номер для ссылки на файл.
Заранее спасибо

ответ

0

U лучше использовать PlaySyn для того, чтобы рассказать свою программу, чтобы ждать, пока музыка полного

// Create new SoundPlayer in the using statement. 
    using (SoundPlayer player = new SoundPlayer()) 
    { 
     for (int i = 0; i <= music.Count - 1; i++) 
      { 
       string text = music[i].pitch.ToString(); 
       sp.SoundLocation = (@"c:\my path here\" + text + ".wav"); 
       // Use PlaySync to load and then play the sound. 
       // ... The program will pause until the sound is complete. 
       player.PlaySync(); 
      } 
    } 
+0

Приветствую вас, вы должны дать нам хотя бы голосование или отметить ответ :) –

0

Я думаю, что это лучше, если вы используете PlaySync(); вместо Play();

Потому что тогда вам не нужен метод Stop().

Here a link to the docu of SoundPlayer

Почему PlaySync? Если вы просто вызываете метод воспроизведения в этой программе, программа прекратится до того, как начнется воспроизведение звука. Синхронизация указывает, что программа должна приостанавливаться во время воспроизведения звука.

+0

Спасибо большое! Я ожидал чего-то с потоками и т. Д., Но это стало так просто. –

Смежные вопросы