Как играть в файл звуковых файлов WPF - программирование
Подтвердить что ты не робот

Как играть в файл звуковых файлов WPF

Я пытаюсь воспроизвести звуковой файл в своем приложении WPF. В настоящее время у меня есть следующий вызов:

private void PlaySound(string uriPath)
{
    Uri uri = new Uri(@"pack://application:,,,/Media/movepoint.wav");
    var player = new MediaPlayer();
    player.Open(uri);
    player.Play();
}

Теперь, если я укажу Media/movepoint.wav как действие сборки Content и загружаю его как относительный или абсолютный путь к файлу, он работает нормально, поэтому я подозреваю, что это имеет какое-то отношение к Pack URI, но я не могу на всю жизнь из меня выяснить, что.

Цель состоит в том, чтобы сохранить файл в качестве ресурса, чтобы он не был доступен в выходном каталоге. Я могу предоставить либо копию WAV, либо копию MP3.

4b9b3361

Ответ 1

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

new Uri(@"pack://application:,,,/Resources/logo.png")

Убедитесь, что папка "Медиа" не вложена ни в одну другую папку. Если это так, вам нужно также включить эту папку.

Использование .NET Framework 4.0, VS2012.

Эта ссылка дает довольно хорошее описание всей "пакетной" схемы вещей.

ИЗМЕНИТЬ

Больше исследований по этой теме, похоже, указывает на то, что то, что вы хотите сделать, может оказаться невозможным с аудио- или видеофайлами. Выдержка ниже взята из раздела примечаний этой страницы MSDN.

Хотя вы можете объявить экземпляр этого класса в Extensible Язык разметки приложений (XAML), вы не можете загружать и воспроизводить медиа без использования кода. Для воспроизведения медиафайлов только в XAML используйте MediaElement. Кроме того, если вы объявите экземпляр в XAML, единственное практическое применение заполнить синтаксис элемента свойства свойства Player.

При распространении медиафайлов с вашим приложением вы не можете использовать медиа файл как ресурс проекта. В файле проекта вы должны установить тип носителя для содержимого и установите CopyToOutputDirectory в PreserveNewest или Always.

MediaPlayer может использоваться в двух разных режимах, в зависимости от того, что вождение проигрывателя: независимый режим или режим синхронизации. В независимом режиме, MediaPlayer аналогичен изображению, а носитель открыт через Open метод приводит в движение воспроизведение. В режиме "Часы" MediaPlayer можно рассматривать как цель для анимации, и, таким образом, он будет иметь соответствующие временные и временные записи в режиме синхронизации дерево, которое контролирует воспроизведение. Для получения дополнительной информации о режимах мультимедиа см. Обзор мультимедиа.

MediaPlayer отличается от MediaElement тем, что он не является который может быть добавлен непосредственно в пользовательский интерфейс (UI) выражение. Чтобы отобразить носитель, загруженный с помощью MediaPlayer, VideoDrawing или DrawingContext.

Ответ 2

В .NET Framework 4.5 работает следующее:

var sri = Application.GetResourceStream(new Uri("pack://application:,,,/MyAssemblyName;component/Resources/CameraShutter.wav"));

if ((sri != null)) 
{
  using (s == sri.Stream) 
  {
    System.Media.SoundPlayer player = new System.Media.SoundPlayer(s);
    player.Load();
    player.Play();
  }
}

CameraShutter.wav встроен в Ресурс в моем проекте (и находится внутри подкаталога Ресурсы, как указано в URI пакета).