MP3 проигрывается в отдельной ветке - PullRequest
1 голос
/ 27 февраля 2011

Одна проблема была решена, за ней последовала другая: В C # -программе я использую следующий метод, чтобы установить цвет меток на зеленый, затем воспроизводить mp3-файл и, наконец, установить цвет обратно на черный.Проблема заключается в том, что звук воспроизводится в дополнительном потоке, поэтому время между сменой двух цветов слишком короткое (фактически, он должен иметь зеленый цвет во время воспроизведения файла).

private void playSound()
    {
        label1.ForeColor = Color.LimeGreen;
        Application.DoEvents();

        WMPLib.WindowsMediaPlayer wmp = new WMPLib.WindowsMediaPlayer();
        wmp.URL = @"C:\examplesound.mp3"; // duration about 30s
        wmp.controls.play();

        label1.ForeColor = Color.Black;
    }

Можно ли что-нибудь сделать, чтобы лейбл сохранял зеленый цвет во время воспроизведения mp3-файла?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2011

Не устанавливайте черный цвет сразу, так как воспроизведение идет в другом потоке.

Когда текущая дорожка заканчивается, WMPLib отправляет событие PlayStateChange.

Итак, добавьте обработчик:

wmp.PlayStateChange += this.Player_PlayStateChange;

private void Player_PlayStateChange(int newState)
{
    if ((WMPLib.WMPPlayState)newState == WMPLib.WMPPlayState.wmppsStopped)
    {
        label1.ForeColor = Color.Black;
    }
}

Страница для playState имеет список значений:

8 - MediaEnded - Mediaвоспроизведение завершено.

Вам необходимо убедиться, что это сделано в потоке пользовательского интерфейса.

0 голосов
/ 27 февраля 2011

Попробуйте перехватить событие PlayStateChanged и поместить туда label1.ForeColor = Color.Black;.

В данный момент в вашем коде нет ничего, что говорило бы о том, что оно должно измениться на черное, только когда оно закончится, только после того, как оно начнет играть.

...