Как я могу приостановить текущую песню Zune, воспроизвести свой собственный звук с помощью BackgroundAudioPlayer, а затем возобновить песню Zune?

Я пытаюсь получить звуковой сигнал предупреждения в одном из моих приложений для воспроизведения того, что воспроизводится в Zune. Я использую BackgroundAudioPlayer для воспроизведения звука.

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

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


person Chad Mildenberger    schedule 16.11.2011    source источник


Ответы (2)


Здесь есть образец: http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx

Пример делает это (обратите внимание, что вам нужно сослаться на XNA и инициализировать объект GameTimer, чтобы использовать класс MediaPlayer):

public MainPage()
{
    InitializeComponent();

    // Timer to simulate the XNA game loop (SoundEffect class is from the XNA Framework)
    GameTimer gameTimer = new GameTimer();
    gameTimer.UpdateInterval = TimeSpan.FromMilliseconds(33);

    // Call FrameworkDispatcher.Update to update the XNA Framework internals.
    gameTimer.Update += delegate { try { FrameworkDispatcher.Update(); } catch { } };

    // Start the GameTimer running.
    gameTimer.Start();

    // Prime the pump or we'll get an exception.
    FrameworkDispatcher.Update();
}

// Flag that indicates if we need to resume Zune playback upon exiting.
bool resumeMediaPlayerAfterDone = false;

private void ZunePause()
{
    // Please see the MainPage() constructor above where the GameTimer object is created.
    // This enables the use of the XNA framework MediaPlayer class by pumping the XNA FrameworkDispatcher.

    // Pause the Zune player if it is already playing music.
    if (!MediaPlayer.GameHasControl)
    {
        MediaPlayer.Pause();
        resumeMediaPlayerAfterDone = true;
    }
}

private void ZuneResume()
{
    // If Zune was playing music, resume playback
    if (resumeMediaPlayerAfterDone)
    {
        MediaPlayer.Resume();
    }
}
person Filip Skakun    schedule 16.11.2011

Как вы предполагаете, невозможно приостановить все, что воспроизводится в Zune, воспроизвести дорожку/звук через BackgroundAudioPlayer, а затем возобновить предыдущую воспроизводимую дорожку в Zune.

BackgroundAudioPlayer использует ту же очередь мультимедиа, что и проигрыватель Zune, поэтому, когда ваш трек воспроизводится BAP, все, что было ранее в очереди, удаляется. Даже если бы это было не так, невозможно воспроизвести (или запустить воспроизведение) дорожку из MediaLibrary из BAP.

Использование фонового звука здесь кажется совершенно неправильным вариантом. (Или у вас есть причина, по которой вы должны его использовать?)
Почему бы не воспроизводить звук уведомления поверх любого звука, который уже воспроизводится пользователем? (Используя либо MediaElement, либо SoundEffect.) Я бы предположил, что этот предупреждающий шум уведомления — это просто короткий звуковой сигнал об ошибке, поэтому не должно быть никаких проблем с этим фоном поверх любой другой музыки. Вы можете совместить звуковое уведомление с использованием VibrateController, чтобы также помочь пользователю понять, что что-то не так.
В качестве альтернативы, поскольку уведомление поступает во время работы вашего приложения, почему бы не использовать визуальную индикацию предупреждения?

person Matt Lacey    schedule 16.11.2011