2014-12-18 3 views
0

Я хочу воспроизвести весь mp3 из переменной List, но он воспроизводит только последний mp3-файл.Я не могу воспроизвести весь mp3 из переменной List в C#

Это мой код

private void button2_Click(object sender, EventArgs e) 
{ 
    List<String> voiceEN = new List<string>(); 
    WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer(); 

    voiceEN = NumberToWordEN(4515); 


    foreach (string i in voiceEN) 
    { 
     wplayer.URL = "voicesEN\\" + i + ".mp3"; 
     wplayer.controls.play(); 

     Console.WriteLine("voicesEN\\" + i + ".mp3"); 
    } 
} 

, когда я запускаю этот код он покажет, как это в выходной

voicesTH\five.mp3 
voicesTH\thousand.mp3 
voicesTH\five.mp3 
voicesTH\ten.mp3 
voicesTH\1sp.mp3 

Но играть 1sp.mp3 только. Как играть в все эти mp3.

+0

'Play' начинает играть файл, он не ждет, пока он закончится. Вы не можете воспроизводить все файлы с помощью * одиночного * игрока. Что именно вы ожидали? –

+0

Вы пытались переместить 'WMPLib.WindowsMediaPlayer wplayer = новый WMPLib.WindowsMediaPlayer();' внутри цикла foreach? –

+0

Вы не ждете, пока mp3s закончат использование события 'PlayStateChanged', чтобы определить, закончился ли mp3. – Sybren

ответ

2

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

Не знаю, как использовать библиотеку вы используете, но я предполагаю, что вам нужно сделать одно из следующих действий:

  • Либо использовать плейлист функцию библиотеки
  • Или играть в один файл и подписываться на какое-то «сделанное игровое событие», где вы начинаете играть на следующей дорожке, когда заканчивается предыдущая.
+0

Я пытаюсь исправить, используя funtion wplayer_PlayStateChange и tmr_Tick, как это [ссылка] http://stackoverflow.com/questions/17644754/how-to-detect-when-a-mp3-file-has-finished-playing [ссылка] Но это только последний файл 1st.mp3. Он не запускает каждый файл. Как это исправить. – user572575

+0

Добавьте свои файлы в очередь. Начните воспроизведение первого элемента. Подпишитесь на PlayStateChange, и когда вы получите 'WMPLib.WMPPlayState.wmppsStopped', упомянутый @mrwombat, начните воспроизведение следующего файла в очереди. Повторяйте до тех пор, пока очередь не будет пустой. – Svish

0

Как @Svish и @Sybren сказал, регистрируетесь в случае, когда воспроизведение завершено:

Если вы используете WindowsMediaPlayer библиотеку, используйте PlayStateChange событие и проверить WMPLib.WMPPlayState.wmppsStopped

0

Спасибо , Теперь я могу воспроизвести весь mp3 из списка, добавив все mp3 в плейлист. WMPLib.IWMPPlaylist wplayerList;