Сегодня я хочу показать каким образом в .NET-проектах возможно работать с медиафайлами.
Для начала рассмотрим процесс открытия и запуска звукового файла формата .wav.
Для этого создадим простой WindowsForms-проект.
Поместим на главную форму две кнопки для запуска и остановки проигрывания звукового файла:

Соответственно, для каждой кнопки подпишемся на событие Click.
На данный момент код файла Form1.cs должен выглядеть так:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Sound
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Start_Click(object sender, EventArgs e)
{
}
private void Stop_Click(object sender, EventArgs e)
{
}
}
}
Следующий шаг состояит в том, что бы использовать возможности класса SoundPlayer.
Во первых, не мешает подключить пространство имен System.Media, в котором и находится интересующий нас класс.
Затем следует создать экземпляр данного класса для последующего использования его в работе со звуковыми файлами.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;//подключили пространство имен SoundPlayer
namespace Sound
{
public partial class Form1 : Form
{
SoundPlayer sp;//объявляем поле типа SoundPlayer
public Form1()
{
InitializeComponent();
//создаем экземпляр класса SoundPlayer
sp = new SoundPlayer();
}
private void Start_Click(object sender, EventArgs e)
{
}
private void Stop_Click(object sender, EventArgs e)
{
}
}
}
Следующий шаг заключается в указании для объекта sp нашего звукового файла. Для начала используем файл, хранящийся в ресурсах проекта. Что бы добавить в ресурсы новый файл, дважды щелкните на файле Resources.resx:

После этого откроется вкладка ресурсов, где нажмите кнопку Add Resource, как показано на рисунке. Откроется диалоговое окно выбора файла. Выделите необходимый и нажмите кнопку «Открыть»:

В итоге в ресурсах появится следующий файл:

При чем, имя ресурса по умолчанию совпадает с именем исходного файла. Заметьте, что копия исходного файла теперь также находится в проекте в папке Resources:

Теперь дело осталось за малым – поместить потоковый файл ресурсов в свойство Stream нашего SoundPlayer и добавить методы запуска и остановки проигрывания файла в соответствующих обработчиках событий:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
namespace Sound
{
public partial class Form1 : Form
{
SoundPlayer sp;//объявляем поле типа SoundPlayer
public Form1()
{
InitializeComponent();
//создаем экземпляр класса SoundPlayer
sp = new SoundPlayer();
//вытягиваем из ресурсов звуковой файл
sp.Stream = Properties.Resources.
Rainbow_Temple_of_The_King;
}
private void Start_Click(object sender, EventArgs e)
{
sp.Play();//начинаем проигрывание
}
private void Stop_Click(object sender, EventArgs e)
{
sp.Stop();//останавливаем проигрывание
}
}
}
Теперь все готово для тестового запуска приложения. Попробуйте поработать с имеющимися на форме кнопками. Как видим, метод Play запускает проигрывание файла, а метод Stop останавливает. Если мы хотим, что б по окончанию проигрывания звуковой файл вновь начинал звучать с начала следует использовать метод PlayLoop. В этом случае файл циклически будет звучать пока мы его принудительно не остановим.
Такой вариант подходит если мы жестко задаем один единственный файл, который может звучать при работе приложения. В случае надобности выбора для прослушивания произвольного звукового файла, следует воспользоваться элементом OpenFileDialog. Что бы добавить данный элемент на форму, откройте панель инструментов и перетащите на форму ланный контрол:

Данный контрол относится к не отображаемым на форме во время выполнения приложения. Однако, в нижней панели он появляется и мы имеем возможность также работать с ним из дизайнера:

Поместим на форму третью кнопку, которая будет давать пользователю возможность выбора на своем компьютере произвольный звуковой файл:

Также, для кнопки создадим обработчик события Click:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Media;
namespace Sound
{
public partial class Form1 : Form
{
SoundPlayer sp;//объявляем поле типа SoundPlayer
public Form1()
{
InitializeComponent();
sp = new SoundPlayer();//создаем экземпляр класса SoundPlayer
}
private void Start_Click(object sender, EventArgs e)
{
sp.Play();//начинаем проигрывание
}
private void Stop_Click(object sender, EventArgs e)
{
sp.Stop();//останавливаем проигрывание
}
private void Choose_Click(object sender, EventArgs e)
{
//если пользователь выбрал файл
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
//если пользователь выбрал файл типа wav
if(openFileDialog1.FileName.Substring(
openFileDialog1.FileName.Length - 3, 3)
== "wav")
sp.SoundLocation = openFileDialog1.FileName;
}
}
}
}
Сдесь мы открываем окно выбора файлом посредством вызова метода ShowDialog и проверяем результат данного диалога. Если пользователь выбрал требуемый файл, мы обязательно должны проверить формат этого файла. Обратите внимание, как просто мы можем это осуществить без использования регулярных выражений а лишь помня, что строки являются массивами типа char. Поэтому методом Substring мы просто выделяем подстроку из имени файла, содержащую всего последние три символа, которые и представляют тип файла.
Однако, можно прямо в самом контроле задать свойство на отображение только определенного типа файлов:
openFileDialog1.Filter = "File .wav|*.wav";
Сдесь мы задали фильтр для отображения только файлов типа wav, а в строке состояния отображается описание файла "File .wav". Можем также укзать более расширенный фильтр:
openFileDialog1.Filter =
"WAV files (*.wav)|*.wav|All files (*.*)|*.*";
Так, мы даем возможность выбора переключения между режимами отображения только файлов *.wav, или всех типов файлов.
Соответственно, если пользователь выбрал подходящий тип файла, то мы без проблем можем его воспроизвести.
На этом я закончу данную статью. В следующей статье я покажу более распространенный вариант открытия любых файлов мультимедия, которые поддерживает WindowsMediaPlayer. Его мы и используем в следующей статье.