Фоновая буферная музыка в Silverlight - PullRequest
0 голосов
/ 11 сентября 2010

Я делаю игру в Silverlight, и я хотел бы дать ей немного фоновой музыки. И, в частности, я бы хотел избежать включения MP3 в первоначальную загрузку (XAP), чтобы пользователь мог начать воспроизведение до того, как музыка закончит загрузку.

Как мне:

  • Динамически начать воспроизведение файла MP3 с заданного URL-адреса
  • Начните воспроизведение файла MP3 до завершения загрузки
  • Начните загрузку файла MP3 без его воспроизведения (т.е. предварительно загрузите его)
  • Таким образом, что файл MP3 кэшируется, если пользователь возвращается на страницу позже

(Я предполагаю, что все это возможно?)

Кстати, я на самом деле не использую XAML - так что ответ на основе кода приветствуется.

Ответы [ 2 ]

1 голос
/ 15 сентября 2010
Очевидно, что

System.Windows.Controls.MediaElement - это элемент управления.Его необходимо добавить в визуальное дерево Silverlight, чтобы оно работало полностью корректно.

Вот код для предварительной загрузки песни:

mediaElement.AutoPlay = false;
mediaElement.Source = new Uri("/content/something.mp3", UriKind.Relative);

(Музыка лучше всего добавлять в проект и устанавливать с помощьюBuild Action = Нет, и Copy to Output Directory = Copy, если новее. Это поместит его рядом с XAP.)

Это позволяет песне начать загрузку в фоновом режиме без воспроизведения.Чтобы проверить, когда он закончил предварительную загрузку, подключите mediaElement.DownloadProgressChanged и проверьте mediaElement.DownloadProgress == 1.Хук MediaFailed сообщит вам, если загрузка не удалась.

Песня может быть запущена без ожидания завершения загрузки.А MediaElement будет правильно кэшировать полностью загруженную песню в кеш браузера.

0 голосов
/ 11 сентября 2010

Объект MediaElement поддерживает прогрессивную загрузку файлов MP3. Вы можете поместить файлы MP3 на свой сервер и потоковую передачу, когда это необходимо. Если вам нужен больший контроль над хранилищем, вы можете реализовать собственный потоковый протокол, реализовав MediaStreamSource .

...