Главная » WPF » Аудио WPF

0

У аудио и видеофайлов общая реализация – класс MediaTimeline. Представле ние мультимедийного содержимого  в виде временной  шкалы может показаться странной идеей, но на самом деле «timeline»  – это абстрактное определение анима ции, которая и составляет  существо любого аудио или видеофайла. Для воспроиз ведения любого мультимедийного содержимого необходимы «часы» – MediaClock. Вспомните, как при обсуждении анимации мы проводили различие между собственно определением анимации  (Timeline) и одним ее прогоном (Clock).

Для    воспроизведения   аудиофайла   нужно    создать    экземпляр   класса

MediaTimeline и в его свойство Source записать адрес источника  данных:

public class MediaAudio : Window {

MediaTimeline _audioTimeline;

public MediaAudio() {

_audioTimeline = new MediaTimeline();

_audioTimeline.Source =

new Uri(@»C:\…\Beethoven’s Symphony No. 9 (Scherzo).wma»);

}

}

Временная  шкала  сохраняется в переменной члене,  чтобы ее не убрал сбор щик мусора. Поскольку видео обычно отображается в составе дерева элементов, о нем тревожиться нет нужды, а вот ссылки на объекты, представляющие аудио, необходимо сохранять!

Помимо временной  шкалы, следует еще создать часы, которые предстоит «за вести». Для обычной анимации,  кроме часов, больше ничего и не нужно, но для мультимедийных файлов  требуется  еще объект проигрыватель MediaPlayer, ко торый управляет  состоянием  воспроизведения:

public class MediaAudio : Window { MediaTimeline _audioTimeline; MediaClock _audioClock;

public MediaAudio() {

_audioTimeline = new MediaTimeline();

_audioTimeline.Source =

new Uri(@»C:\…\Beethoven’s Symphony No. 9 (Scherzo).wma»);

_audioClock = _audioTimeline.CreateClock();

MediaPlayer player = new MediaPlayer();

player.Clock = _audioClock;

}

}

Подготовив прогрыватель и часы, мы можем приступить  к воспроизведению музыки.  Глядя  на объектную  модель  MediaPlayer, сразу хочется  вызвать  метод Play, но это было бы ошибкой. Класс MediaPlayer поддерживает два режима: свя занный и несвязанный. Если объект MediaPlayer привязан к часам, то часы игра ют главенствующую  роль, а проигрыватель просто  наблюдает  за ними.  Управ лять воспроизведением следует, вызывая  методы объекта часов, а не самого про игрывателя. В несвязанном режиме MediaPlayer создает часы внутри себя, и тог да им можно пользоваться напрямую  (ниже мы это увидим).

Чтобы хоть что нибудь увидеть в самой книге, подпишемся на событие часов CurrentTimeInvalidated и будем  обновлять свойство  Window.Title, показывая, что мы «слушаем» музыку (рис. 5.60):

public class MediaAudio : Window { MediaTimeline _audioTimeline; MediaClock _audioClock;

public MediaAudio() {

_audioTimeline = new MediaTimeline();

_audioTimeline.Source =

new                       Uri(@»C:\Users\Public\Music\Sample

Music\Symphony_No_3.wma»);

_audioClock = _audioTimeline.CreateClock(); MediaPlayer player = new MediaPlayer();

player.Clock = _audioClock;

_audioClock.CurrentTimeInvalidated += TimeChanged;

_audioClock.Controller.Begin();

}

void TimeChanged(object sender, EventArgs e) { Title = _audioClock.CurrentTime.ToString();

}

}

Три базовых объекта – временная  шкала, часы и прогрыватель – присутству ют при работе с мультимедиа всегда. WPF скрывает эти детали за обертывающим элементом MediaElement:

<MediaElement

Source=’C:\Users\Public\Music\Sample Music\Symphony_No_3.wma’ />

Рис. 5.60. Воспроизведение музыки

(а вы и не подозревали, что это можно показать на картинке?)

Объект MediaElement с помощью свойства Player предоставляет доступ к прогрывателю,  который  позволяет  управлять различными аспектами  воспроиз ведения. Если требуется  что то более сложное (например, подписаться на собы тие CurrentTimeInvalidated), то придется  создать в программе временную  шкалу и часы.

Видео

Воспроизвести видео можно с помощью того же объекта MediaElement, кото рый мы только что рассматривали. Поскольку MediaElement – на самом деле ви зуальный  элемент (что для проигрывания музыки несколько  странновато), то воспроизвести видео ему не составит труда (рис. 5.61):

<Window … Title=’Media Video’>

<MediaElement

Source=’C:\Windows\Help\Windows\en US\mouse.wmv’ />

</Window>

Вспомним  начало этой главы, где было сказано, что одной из основ WPF яв ляется  принцип  интеграции. Коль скоро элемент Image – это способ визуализи ровать данные изображения, представленного в свою очередь в виде кисти, кото рой можно нарисовать любой штрих, закрасить фигуру и даже материал трехмер ного объекта, то же самое должно быть верно в отношении  видео.

Класс VideoDrawing позволяет  включить  видео в любой рисунок. Поскольку кисть DrawingBrush может заполнить заданным  рисунком все, что угодно, то по чему бы не связать  ее с видеофайлом и не использовать внутри  обогащенного текста (рис. 5.62):

<!— MediaVideo.xaml —>

<Window … Title=’Media Video’>

<RichTextBox

FontSize=’148pt’ FontFamily=’Arial’ FontWeight=’Bold’ Background=’Yellow’ Name=’_text’>

<RichTextBox.Document>

<FlowDocument>

<Paragraph>

Welcome to Video!

</Paragraph>

</FlowDocument>

</RichTextBox.Document>

</RichTextBox>

</Window>

// mediavideo.xaml.cs

public partial class MediaVideo : Window { MediaTimeline _videoTimeline;

MediaClock _videoClock;

public MediaVideo() { InitializeComponent();

_videoTimeline = new MediaTimeline();

_videoTimeline.Source =

new Uri(@»C:\Windows\Help\Windows\en US\mouse.wmv»);

VideoDrawing v = new VideoDrawing();

v.Player = new MediaPlayer();

v.Rect = new Rect(0, 0, 1, 1);

v.Player.Clock = _videoClock = _videoTimeline.CreateClock();

_text.Foreground = new DrawingBrush(v);

}

}

Рис. 5.61. Воспроизведение видео с помощью элемента MediaElement

Рис. 5.62. Использование видео внутри обогащенного текста

Чего мы достигли?

В этой главе мы познакомились с тем, как визуализируются элементы  управ ления. Мы видели, как приложения создаются из элементов управления, позици онированных менеджерами  размещения и отображаемых с помощью визуальных элементов.  Все подсистемы  WPF спроектированы для совместной  работы, одна служит основой для другой.

Источник: К. Андерсон  Основы  Windows Presentation Foundation. Пер. с англ. А. Слинкина — М.: ДМК Пресс, 2008 — 432 с.: ил.

По теме:

  • Комментарии