Воспроизведение песен пользователя с помощью Silverlight

Есть ли у кого-нибудь работающий (проверенный) пример кода для воспроизведения аудиофайла из изолированного хранилища. Код, который у меня сейчас есть, который не выдает исключение и не издает никаких звуков:

        MediaElement ME = new MediaElement();
        ME.AutoPlay = false;
        IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication();
        ME.SetSource(ISF.OpenFile("foo.wav", FileMode.Open));
        ME.Play();

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

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

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

Наконец, как и в примере, я предпочел бы делать это в коде на C#, а не на XAML.

1 ответ

Решение
  1. Вы не можете использовать команду Play в том же методе, что и команда SetSource, так как файл будет открыт асинхронно. Установив AutoPlay на true (что также является значением по умолчанию). Вы убедитесь, что он будет играть, как только он загружен.

    MediaElement ME = new MediaElement();
    ME.AutoPlay = true;
    IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication();
    ME.SetSource(ISF.OpenFile("foo.wma", FileMode.Open));
    
  2. Silvelright изначально не поддерживает wav-файлы, поэтому для воспроизведения wav-файлов вам необходимо скачать http://code.msdn.microsoft.com/wavmss, а затем использовать следующий код.

    MediaElement ME = new MediaElement();
    ME.AutoPlay = true;
    IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication();
    ME.SetSource(new WaveMediaStreamSource(ISF.OpenFile("foo.wav", FileMode.Open)));
    

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

Другие вопросы по тегам