Класс MediaPlayer

59

Классы SoundPlayer, SoundPlayerAction и SystemSounds легко использовать, но все они относительно маломощные. В современном мире вместо исходного формата WAV намного более распространен сжатый формат звука МРЗ для всех целей, за исключением простейших звуков. Для воспроизведения МРЗ-аудио или MPEG-видео предназначены классы MediaPlayer и MediaElement. Оба они зависят от ключевых элементов технологии, предоставленной проигрывателем Windows Media.

Класс MediaPlayer (находящийся в специфичном для WPF пространстве имен System.Windows.Media) — это WPF-эквивалент класса SoundPlayer. Хотя ясно, что он не настолько легковесен, все же он работает примерно так же. Объект MediaPlayer создается, с помощью метода Open() загружается аудиофайл, а вызовом метода Рlау() запускается асинхронное воспроизведение. (Опция синхронного воспроизведения не предусмотрена.) Рассмотрим пример:

private MediaPlayer player = new MediaPlayer();
private void Button_Click(object sender, RoutedEventArgs e)
{
   player.Open(new Uri("music.mp3", UriKind.Relative));
   player.Play();
}

Существует несколько важных деталей, на которые следует обратить внимание в этом примере:

MediaPlayer достаточно прост, хотя обладает большими возможностями, чем SoundPlayer. Он предоставляет небольшой набор полезных методов, свойство и событий. Их полный перечень приведен ниже:

Члены класса MediaPlayer
Balance Устанавливает баланс между левым и правым каналом как число от -1 (только левый канал) до 1 (только правый канал)
Volume Устанавливает громкость в виде числе от 0 (полная тишина) до 1 (полная громкость). Значение по умолчанию равно 0.5
SpeedRatio Устанавливает повышенную скорость при воспроизведении звука (или видео). Значение по умолчанию равно 1, что означает нормальную скорость, в то время как 2 — двойную скорость, 10 — скорость, вдесятеро выше нормальной, 0.5 — половину нормальной скорости и т.д. Можно использовать любое положительное значение типа double
HasAudio и HasVideo Указывает на то, содержит ли текущий загруженный медиафайл, соответственно, аудио- и видеосоставляющие. Для воспроизведения видео должен использоваться класс MediaElement, описанный в следующей статье
NaturalDuration, NaturalVideoHeight и NaturalVideoWidth Указывают на то, идет ли воспроизведение на нормальной скорости, а также задают размер видео-окна. (Ниже будет показано, что допускается растягивать и сжимать видео для заполнения окон разного размера.)
Position Объект TimeSpan, указывающий текущее местоположение в медиафайле. Это свойство можно устанавливать для пропуска части файла и продолжения воспроизведения с указанного места
DownloadProgress и BufferingProgress Показывает процент загружаемого файла (удобно в тех случаях, когда источником является URL, указывающий на местоположение в Интернете или на другом компьютере). Процент представлен в виде числа от 0 до 1
Clock Получает или устанавливает часы MediaClock, ассоциированные с проигрывателем. MediaClock используется только тогда, когда аудио синхронизируется с временной шкалой (примерно так же, как это делалось при синхронизации анимации с временной шкалой). При использовании методов MediaPlayer для выполнения воспроизведения вручную это свойство равно null
Open() Загружает новый медиафайл
Play() Начинает воспроизведение. Не имеет никакого эффекта, если файл уже воспроизводится
Pause() Временно приостанавливает воспроизведение, не меняя его позиции. Если вызвать Play() снова, то воспроизведение начнется с текущей позиции. Если воспроизведение не происходит, не дает никакого эффекта
Stop() Останавливает воспроизведение и сбрасывает позицию на начало файла. Если снова вызвать Play(), то воспроизведение начнется с начала файла. Не имеет эффекта, если воспроизведение уже остановлено

Используя эти члены класса, можно построить базовый полнофункциональный медиапроигрыватель. Однако программисты WPF обычно применяют другой, относительно более простой элемент, который рассматривается в следующей статье — MediaElement.

Пройди тесты
Лучший чат для C# программистов