WPF Воспроизведение и остановка нескольких медиаэлементов - PullRequest
3 голосов
/ 21 октября 2011

У меня есть вопрос о нескольких MediaElement в WPF.Я хочу воспроизводить только один MediaElement снова и снова одновременно, пока не изменится аудиоиндекс.Источник звука - это всего лишь короткое слово, поэтому я буду повторять / повторять его.Но проблема в том, что он останавливается через некоторое время, не играя больше.Кто-нибудь может мне помочь?

Вот код:

*. Xaml

<MediaElement x:Name="mediaElementStrawberries" LoadedBehavior="Manual" UnloadedBehavior="Manual" MediaEnded="mediaElementStrawberriesEnded" Source="Media\Strawberries.mp3"/>
<MediaElement x:Name="mediaElementBlackberries" LoadedBehavior="Manual" UnloadedBehavior="Manual" MediaEnded="mediaElementBlackberriesEnded" Source="Media\Blackberries.mp3"/>
<MediaElement x:Name="mediaElementBlueberries" LoadedBehavior="Manual" UnloadedBehavior="Manual" MediaEnded="mediaElementBlueberriesEnded" Source="Media\Blueberries.mp3"/>

*. Cs

 if (audioindex == 1)
 {
     mediaElementStrawberries.Play();
 }
 if (audioindex == 2)
 {
     mediaElementBlackberries.Play();
 }
 if (audioindex == 3)
 {
     mediaElementBlueberries.Play();
 }

 public void mediaElementStrawberriesEnded(object sender, RoutedEventArgs e)
 {
        if (audioindex == 1)
        {
            mediaElemenStrawberries.Position = TimeSpan.Zero;
            mediaElementStrawberries.LoadedBehavior = MediaState.Play;
        }
        else if (audioindex == 2)
        {
            mediaElementBlackberries.Position = TimeSpan.Zero;
            mediaElementBlackberries.LoadedBehavior = MediaState.Play;
        }
        else if (audioindex == 3)
        {
            mediaElementBlueberries.Position = TimeSpan.Zero;
            mediaElementBlueberries.LoadedBehavior = MediaState.Play;
        }
    }

    private void mediaElementBlackberriesEnded(object sender, RoutedEventArgs e)
    {
        if (audioindex == 2)
        {
            mediaElementBlackberries.Position = TimeSpan.Zero;
            mediaElementBlackberries.LoadedBehavior = MediaState.Play;
        }
        else if (audioindex == 1)
        {
            mediaElementStrawberries.Position = TimeSpan.Zero;
            mediaElementStrawberries.LoadedBehavior = MediaState.Play;
        }
        else if (audioindex == 3)
        {
            mediaElementBlueberries.Position = TimeSpan.Zero;
            mediaElementBlueberries.LoadedBehavior = MediaState.Play;
        }
    }

1 Ответ

0 голосов
/ 30 сентября 2014

Я знаю, что с SoundPlayer и MediaElement он ограничен одним звуковым каналом.Так что если вы играете один звук, а затем пытаетесь воспроизвести второй, второй обрежет первый.(одноканальный звук)

Я предполагаю, что у вас возникла похожая проблема, и, к сожалению, я нашел единственный способ ее исправить - использовать XNA (который сейчас прекращен) или перейти на DirectX.

...