Silverlight 4 MediaElement воспроизводит звук

Я преобразовал локальный звуковой файл в ресурс, который встроил его в мой XAML:

<UserControl.Resources>
    <my:Uri x:Key="SoundFiles">file:///c:/Audio/HebrewDemo/Shalom.wav</my:Uri>
</UserControl.Resources>

Я сделал это, вставив имя файла mp3 локального диска в источник, затем щелкнув «точку» рядом с источником и выбрав «Извлечь значение в ресурс».

Когда я запускаю, он сообщает мне, что «URI» недействителен, и, конечно же, в Intellisense я вижу другие элементы, которые начинаются с «uri», но не только сам URI.

В реальном мире я хочу указать динамическое имя файла mp3. Например, у меня может быть база данных слов на иностранном языке, используемых для карточек, я хочу воспроизвести звуковой файл по URL-адресу. Но я думала, что перед бегом попробую пройтись ...

Сейчас пробую это:

    mediaElement1.Source = new Uri(
                     "http://HebrewResources.com/SoundFiles/Shalom.mp3", 
                      UriKind.Absolute); 
    mediaElement1.Play(); 

Строка состояния в браузере FireFox показывает, что некоторые данные передаются с веб-сайта. Однако я никогда не слышу звука. Может это просто проблема с кодировкой? Могу ли я получить сообщение об ошибке, если он не закодирован должным образом?

Кроме того, могу ли я поместить оператор Uri в загрузку или заставить его работать в фоновом режиме, чтобы пользователь мог читать экран во время загрузки звукового файла? Другими словами, когда он нажимает кнопку, чтобы прослушать звуковой файл, в идеале он должен быть предварительно загружен для него. В этом приложении для изучения языков пользователь увидит слово на иностранном языке и попытается произнести его сам, а затем нажмет кнопку «Воспроизвести», чтобы услышать звук и проверить свои результаты.


person NealWalters    schedule 11.04.2010    source источник


Ответы (1)


Первый код, указывающий на локальный файл, не будет работать в обычном приложении Silverlight из-за «sanboxed» модели безопасности Silverlight. Запустив в браузере обычное приложение Silverlight, вы не сможете получить доступ к локальным ресурсам, как если бы вы работали с установленным приложением winforms / WPF. Посмотрите это видео-руководство http://www.silverlight.net/learn/videos/all/local-file-access/, если вы хотите узнать больше о доступе к локальным файлам с помощью Silverlight.

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

Я создал образец приложения и указал его на ваш mp3-файл, и оно «не сработало», однако быстрый поиск образцов mp3-файлов привел меня к другому свободно доступному (первое попадание). Используя приведенный ниже код / ​​URL-адрес, он работает нормально.

myMediaelement.Source = new Uri("http://www.robtowns.com/music/blind_willie.mp3", UriKind.Absolute);

Что касается загрузки, он начнет загрузку файла, когда попадет в код, который устанавливает источник медиаэлемента. Поэтому, если вы установите источник для медиа-элемента в своем конструкторе или в загруженном событии, загрузка автоматически начнется в фоновом режиме. Затем вы просто вызываете myMediaelement.Play (); в событии нажатия кнопки.

Если вы обнаружите, что использование Firefox немного ограничено, когда дело доходит до определения того, что и когда загружается что-то вроде внешних файлов или веб-сервисов. Есть отличный бесплатный инструмент под названием Fiddler (http://www.fiddlertool.com/fiddler/version.asp), что позволит вам очень легко отслеживать эти вещи.

Удачи :)

person Ola Karlsson    schedule 22.04.2010
comment
Спасибо, я закончил тем, что начал здесь обсуждение и много обсуждал. forum.silverlight.net/forums/p/174934/397840.aspx. Я добавил событие MediaFailed и использовал Expression Encoder для кодирования файла (даже не знал, что есть Expression Encoder). К сожалению, я боюсь кодировать около 3000 mp3 файлов. - person NealWalters; 22.04.2010
comment
Приятно слышать, что вы разобрались, что касается кодирования файлов, используя SDK кодировщика и Powershell, вы можете довольно легко автоматизировать этот процесс :) Взгляните на это clarkezone.net/ и, возможно, поискать по автоматизации кодировщика Expression или что-то в этом роде - person Ola Karlsson; 23.04.2010