Universal Windows Platform имеет широкие возможности для работы с аудио, со звуками, с их обработкой. Для воспроизведения аудиофайлов мы можем использовать в рамках UWP такой элемент как MediaElement.
MediaElement представляет простейший элемент для воспроизведения аудио. С помощью свойства Source или метода SetSource() (программным способом) можно установить источник аудио.
К примеру, создадим в проекте новую папку для хранения аудиофайлов, которую назовем Audio, и добавим в нее какой-нибудь аудиофайл:
В данном случае аудиофайл называется "beethoven_fur_elise.mp3". Тогда, чтобы его воспроизвести, я могу использовать следующую разметку:
<MediaElement x:Name="media" Source="ms-appx:///audio/beethoven_fur_elise.mp3" AutoPlay="True" />
Для проигрывания файлов из проекта применяется Uri в формате "ms-appx:///путь к файлу", либо просто путь без префикса, например, "audio/beethoven_fur_elise.mp3". Также, мы можем в качестве источника указывать интернет-ресурсы.
Установка источника программным способом:
using System; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.ApplicationModel; namespace MediaApp { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); this.Loaded += MainPage_Loaded; } private async void MainPage_Loaded(object sender, RoutedEventArgs e) { var file = await Package.Current.InstalledLocation.GetFileAsync("audio\\beethoven_fur_elise.mp3"); var stream = await file.OpenReadAsync(); media.SetSource(stream, ""); media.Play(); } } }
Элемент MediaElement имеет множество свойств, которые позволяют настраивать и управлять воспроизведением, но среди них прежде всего можно выделить следующие:
AutoPlay: при значении true аудио начнет автоматически проигрываться после загрузки страницы
IsMuted: при значении true уменьшает громкость о нуля
IsLooping: при значении true композиция повторяется после завершения
Volume: уровень громкости в виде значения double
AreTransportControlsEnabled: при значении true отображаются элементы управления воспроизведением
Так, чтобы добавить стандартные элементы управления воспроизведения, достаточно использовать свойство AreTransportControlsEnabled
:
<MediaElement x:Name="media" Source="audio\\beethoven_fur_elise.mp3" AreTransportControlsEnabled="True" />
Тогда элемент будет выглядеть следующим образом:
Однако, если встроенные элементы нас не устраивают, тогда мы можем сами создать свои компоненты управления, используя методы класса MediaElement:
Play(): запускает воспроизведение
Pause(): приостанавливание воспроизведение
Stop(): полностью останавливает проигрывание
При работе с MediaElement мы также можем применять его события для отслеживания состояния элемента. Некоторые из событий:
MediaOpened: срабатывает при начале воспроизведения
MediaFailed: генерируется при ошибке открытия файла
MediaEnded: срабатывает при завершении воспроизведения
Используем обычные кнопки для управления воспроизведения аудио:
<Page x:Class="MediaApp.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:MediaApp" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <StackPanel> <TextBlock x:Name="headerBlock" HorizontalAlignment="Center" /> <MediaElement x:Name="media" AutoPlay="False" Source="audio/beethoven_fur_elise.mp3" MediaFailed="Media_MediaFailed" MediaOpened="Media_MediaOpened" MediaEnded="Media_MediaEnded" /> <StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> <Button Content="Play" Click="Play_Click" Margin="10" /> <Button Content="Pause" Click="Pause_Click" Margin="10"/> <Button Content="Stop" Click="Stop_Click" Margin="10" /> </StackPanel> </StackPanel> </Grid> </Page>
В файле кода C# пропишем обработчики всех событий:
using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace MediaApp { public sealed partial class MainPage : Page { public MainPage() { this.InitializeComponent(); } // начало воспроизведения void Play_Click(object sender, RoutedEventArgs e) { media.Play(); } // пауза void Pause_Click(object sender, RoutedEventArgs e) { if (media.CanPause) media.Pause(); } // остановка void Stop_Click(object sender, RoutedEventArgs e) { media.Stop(); } // если открытие файла завершилось с ошибкой void Media_MediaFailed(object sender, ExceptionRoutedEventArgs e) { headerBlock.Text = "Ошибка открытия файла"; } // открытие файла void Media_MediaOpened(object sender, RoutedEventArgs e) { headerBlock.Text = media.Source.LocalPath; } // окончание воспроизведения void Media_MediaEnded(object sender, RoutedEventArgs e) { headerBlock.Text = "Воспроизведение завершено"; } } }