Воспроизведение песен пользователя с помощью 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.


person ForbesLindesay    schedule 02.12.2010    source источник
comment
Вы потом проверяли свойство CurrentState? Вы пытались подключить обработчик к событию MediaFailed?   -  person Ben Voigt    schedule 02.12.2010
comment
Вы пытались открыть текстовый файл или файл изображения, чтобы убедиться, что вы правильно поняли этот бит?   -  person ChrisF    schedule 02.12.2010
comment
Текущее состояние шло прямо к паузе. Кажется, что метод воспроизведения не будет работать до тех пор, пока файл не будет загружен (сработал, когда я поместил его в отдельный обработчик событий). Установка AutoPlay на true работает нормально.   -  person ForbesLindesay    schedule 02.12.2010
comment
Вы должны добавить это как ответ и принять его (через пару дней) › Это поможет всем, у кого есть такая же проблема.   -  person ChrisF    schedule 02.12.2010
comment
Я испытываю аналогичную проблему. Был бы признателен, если бы вы разместили свое решение в качестве ответа.   -  person Stephen    schedule 02.12.2010


Ответы (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, и использовать второй пример кода только в этом случае.

person ForbesLindesay    schedule 07.12.2010