Silverlight 4 MediaElement воспроизводит звук - PullRequest
0 голосов
/ 12 апреля 2010

Я преобразовал локальный звуковой файл в ресурс, который встроил это в мой 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 в загрузку или запустить его в фоновом режиме, чтобы пользователь мог читать экран, одновременно загружая звуковой файл? Другими словами, когда он нажимает кнопку, чтобы услышать звуковой файл, в идеале он уже был бы предварительно загружен для него. В этом приложении для изучения языка пользователь увидит слово на иностранном языке и попытается произнести его сам, а затем нажмет кнопку «Воспроизвести», чтобы услышать звук и проверить свои результаты.

1 Ответ

2 голосов
/ 22 апреля 2010

Первый код, который указывает на локальный файл, не будет работать в обычном приложении 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), который позволит вам очень легко контролировать эти вещи.

Удачи:)

...