Воспроизведение песен пользователя с помощью Silverlight - PullRequest
2 голосов
/ 02 декабря 2010

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

        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 голос
/ 07 декабря 2010
  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, и использовать второй пример кода только в этом случае.

...