Могу ли я на WP7 воспроизвести песню из библиотеки, прервать ее звуком в формате mp3, а затем возобновить воспроизведение?

чего я хочу добиться, так это:

  1. Воспроизведение фоновой музыки из медиатеки
  2. По определенному триггеру затухание музыки, воспроизведение другого mp3-файла (разной длины, от секунд до минуты)
  3. После того, как этот фрагмент аудио будет воспроизведен, возобновите предыдущую музыку из библиотеки.

Теперь я сталкиваюсь с этими ограничениями:

  • Чтобы получить доступ и воспроизвести музыку из пользовательской библиотеки, мне нужно использовать класс MediaPlayer XNA.
  • Чтобы воспроизвести произвольный mp3-файл, мне нужно использовать либо MediaPlayer, либо MediaElement, но не SoundEffect или SoundEffectInstance.
  • Если я воспроизвожу что-либо с помощью MediaElement, MediaPlayer останавливается. Он полностью теряет очередь аудио, поэтому мне нужно воспроизвести оставшуюся музыку, что было бы нормально, НО
  • MediaPlayer не поддерживает поиск, поэтому я не могу открыть предыдущую песню и просто перейти к позиции, прежде чем она была приостановлена

So:

  • Я не хочу использовать SoundEffect или SoundEffectInstance, так как звук должен быть в формате wav.
  • Я не могу использовать только MediaPlayer, потому что, если бы я воспроизвел там звук, чтобы прервать песню, я бы не смог перейти к ее предыдущей позиции.
  • Я не могу использовать комбинацию MediaPlayer и MediaElement, поскольку MediaPlayer останавливает MediaPlayer, что снова не позволяет мне возобновить предыдущее воспроизведение
  • Я не могу просто использовать MediaElement, потому что он не может воспроизводить песни из библиотеки.

Вы видите что-то, что я пропустил, или это действительно единственный вариант, который у меня есть, чтобы смириться и использовать файлы wav? (Многие из них будут загружены на лету, и это просто неэффективно!) Любые предложения?

Спасибо!


person karel_evzen    schedule 19.05.2011    source источник
comment
Я не пробовал, но остановится ли MediaPlayer, если вы приостановите его перед вызовом MediaElement?   -  person keyboardP    schedule 19.05.2011
comment
Вы можете использовать MediaElement для пользовательской библиотеки?   -  person vlad    schedule 19.05.2011
comment
@vlad - Нет, MediaElement может получить доступ только к изолированному хранилищу или внешним URI. На данный момент только Media Player может получить доступ к библиотеке пользователя.   -  person keyboardP    schedule 19.05.2011
comment
или, возможно, вы можете приостановить работу MediaPlayer, когда хотите воспроизвести MediaElement, а затем возобновить работу MediaPlayer после завершения MediaElement?   -  person vlad    schedule 19.05.2011
comment
@keyboardP спасибо, я понятия не имел.   -  person vlad    schedule 19.05.2011
comment
Нет, пробовал это сам, даже если вы приостановите работу MediaPlayer, он остановится извне, как только вы воспроизведете MediaElement. Очень неприятно!   -  person karel_evzen    schedule 19.05.2011


Ответы (2)


К сожалению, вы столкнулись с ограничением платформы.

В дополнение к альтернативе, которую вы определили, вы можете воспроизводить музыку, передаваемую из внешнего источника через MediaElement. Используя таймер для отслеживания того, сколько времени было воспроизведено, при возобновлении дорожки начните с этого расстояния, включив начальную точку в свой запрос к серверу потоковой передачи. Это, конечно, означает, что вам нужно предоставить или найти подходящую возможность потоковой передачи. :(

Ни один из них не идеален, но пока это лучшее, что у нас есть. Возможности фонового звука, которые появятся в Mango, могут помочь, но пока не будут объявлены подробности, мы не можем сказать наверняка.

person Matt Lacey    schedule 19.05.2011

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

Вы получите событие mediastatechanged с помощью MediaPlayer, и в этом случае вы можете проверить состояние медиаплеера и приостановить песню, а затем вы также можете возобновить песню

person phanish    schedule 19.03.2012