Использование звуковых файлов
Использование звуковых файлов
Мир современных компьютеров трудно представить без мультимедийных возможностей; однако проигрывание звуковых файлов не поддерживалось в библиотеке .NET Framework 1.0. Подобный подход Microsoft удивил многих программистов. В этом случае приходилось использовать неуправляемый код с вызовом функции PlaySound.
С выходом .NET Framework 2.0 ситуация изменилась в лучшую сторону. Но легкая поддержка звуковых файлов остается прерогативой настольных систем. В библиотеке .NET Compact Framework по-прежнему отсутствует поддержка проигрывания звуковых файлов. А ведь для разработки игры наличие звуковых эффектов является обязательным условием, иначе игра будет просто неинтересна!
Поэтому нужно устранить недоработку разработчиков из Microsoft. В новом примере будут использоваться два способа воспроизведения звуков. В первом случае программа будет извлекать звуковой фрагмент из ресурсов. Во втором случае программа будет проигрывать звук из обычного WAV-файла.
Итак, нужно создать новый проект с именем PlaySound_CS. К проекту надо добавить новый класс с именем Sound. Объявление функции PlaySound, необходимой для проигрывания звуков, нужно поместить в класс Sound, как показано в листинге 13.10.
Листинг 13.10
private enum Flags {
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_MEMORY = 0x0004,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_ALIAS = 0x00010000,
SND_ALIAS_ID = 0x00110000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004
}
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int PlaySound(string szSound, IntPtr hMod, int flags);
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int PlaySoundBytes(byte[] szSound, IntPtr hMod,
int flags);
Данная функция использует для параметра flags несколько предопределенных констант. Более подробную информацию о назначении флагов этой функции можно найти в документации.
После этого создаются два конструктора с разными параметрами, которые будут использоваться для разных методов воспроизведения звука, и метод Play. Теперь нужно перейти к основной форме и разместить на ней две кнопки. Первая кнопка, butResource, будет проигрывать звуковой фрагмент, который хранится в ресурсах приложения. Кнопка butFilе запустит метод, который проигрывает аудиофайл.
Для того чтобы пример работал, понадобятся два звуковых файлов. В состав Windows XP входит несколько звуковых файлов. Для данного примера использовался файл chimes.wav. Его нужно добавить в проект. Чтобы включить файл chimes.wav в проект как ресурс, надо в свойствах файла выбрать пункт Build Action и установить значение Embedded Resource.
В качестве внешнего аудиофайла будет использоваться файл alarm3.wav, входящий в состав Windows Mobile. Этот файл находится в папке Windows. При желании можно использовать свой файл, но при этом надо в коде указать путь к нему. Теперь достаточно прописать код для обработки события Click созданных кнопок, как показано в листинге 13.11, — и приложение готово.
Листинг 13.11
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.InteropServices;
namespace PlaySound_CS {
public class Sound {
private byte[] m_soundBytes;
private string m_fileName;
private enum Flags {
SND_SYNC = 0x0000,
SND_ASYNC = 0x0001,
SND_NODEFAULT = 0x0002,
SND_MEMORY = 0x0004,
SND_LOOP = 0x0008,
SND_NOSTOP = 0x0010,
SND_NOWAIT = 0x00002000,
SND_ALIAS = 0x00010000,
SND_ALIAS_ID = 0x00110000,
SND_FILENAME = 0x00020000,
SND_RESOURCE = 0x00040004
}
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int PlaySound(string szSound, IntPtr hMod, int flags);
[DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
private extern static int PlaySoundBytes(byte[] szSound, IntPtr hMod,
int flags);
/// <summary>
/// Конструктор объекта Sound, который проигрывает звук из
/// указанного файла
/// </summary>
public Sound(string fileName) {
m_fileName = fileName;
}
/// <summary>
/// Конструктор объекта Sound, который проигрывает звук из
/// ресурсов
/// </summary>
public Sound(Stream stream) {
// читаем данные из потока
m_soundBytes = new byte[stream.Length];
stream.Read(m_soundBytes, 0, (int)stream.Length);
}
/// <summary>
/// Воспроизводим звук
/// </summary>
public void Play() {
// Если из файла, то вызываем PlaySound.
// если из ресурсов, то PlaySoundBytes.
if (m_fileName != null)
PlaySound(m_fileName, IntPtr.Zero,
(int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
else
PlaySoundBytes(m_soundBytes, IntPtr.Zero,
(int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
}
}
}
Теперь нужно перейти к самой форме. Код для нее приведен в листинге 13.12.
Листинг 13.12
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
namespace PlaySound_CS {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
InitializeComponent();
#if DEBUG
MinimizeBox = false;
#else
MinimizeBox = true;
#endif
}
private void butResource_Click(object sender, EventArgs e) {
Sound sound =
new Sound(Assembly.GetExecutingAssembly().GetManifestResourceStream(
"PlaySound_CS.chimes.wav"));
sound.Play();
}
private void butFile_Click(object sender, EventArgs e) {
Sound sound = new Sound("Windows\alarm3.wav");
sound.Play();
}
}
}
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Использование предварительно скомпилированных двоичных файлов
Использование предварительно скомпилированных двоичных файлов Задокументированный процесс установки Asterisk предполагает, что пользователь самостоятельно компилирует исходный код. Однако некоторые дистрибутивы Linux (такие, как Debian) включают предварительно
Использование файлов занятий
Использование файлов занятий После установки файлов занятий с компакт-диска, прилагающегося к книге, файлы сохраняются на локальном жестком диске в папке DocumentsMicrosoft PressSBS_WSSv3 в подпапках с именами, соответствующими номерам и названиям глав. Перед каждым упражнением
Совместное использование файлов
Совместное использование файлов InterBase-сервер может быть встроен не только в ваше серверное программное обеспечение, поэтому основные файлы, входящие в состав его установки, надо зарегистрировать в Windows. Регистрация происходит точно так же, как описано выше в разделе
Удаление звуковых клипов со звуковых дорожек
Удаление звуковых клипов со звуковых дорожек Некоторые клипы данного проекта содержат звуковое сопровождение. В процессе создания фильма вы уже обратили внимание, что это звуковое сопровождение содержит шумы, вызванные ветром (в клипах Clip05.avi и Clip02.avi), шумом двигателя
Изменение громкости звуковых клипов и звуковых дорожек
Изменение громкости звуковых клипов и звуковых дорожек В данном проекте смикшируем музыкальное сопровождение и звуки шума автомобиля и вертолета. Для этого необходимо немного убавить громкость воспроизведения музыки на этих участках последовательности.1. Разверните
Копирование звуковых файлов
Копирование звуковых файлов 1. Вставьте в привод компакт-диск, который хотите скопировать, и запустите программу Nero StartSmart.2. Перейдите на вкладку Rip and Burn (Перенос и запись).3. Щелкните кнопкой мыши на задании Rip Audio CD (Перенос аудио-CD). Откроется окно приложения Nero Burning ROM с
Кодирование звуковых файлов
Кодирование звуковых файлов Кодирование файлов во многом аналогично рассмотренной выше процедуре копирования.Звуковые файлы формата Audio CD можно конвертировать с помощью инструмента Encode Files (Кодировать файлы) пакета Nero 8. Для этого выполните такую последовательность
1.4. Использование REG-файлов
1.4. Использование REG-файлов В процессе эксплуатации системы могут возникать ситуации, когда редактирование реестра средствами Редактора реестра невозможно либо нецелесообразно. В таких случаях следует использовать файлы реестра, которые имеют расширение REG. В данном
20.2.5. Использование команды getopts для преобразования файлов
20.2.5. Использование команды getopts для преобразования файлов А теперь воспользуемся сценарием tr_case, который преобразуем с помощью только что изученной команды getopts. Существует единственное отличие между методами getopts и shift, применяемыми для обработки опций командной строки.
1.10.7. Совместное использование файлов и папок
1.10.7. Совместное использование файлов и папок На каждом Маке в окне жесткого диска находится папка Пользователи (Users), в которой хранятся домашние папки всех пользователей данного компьютера. Раскрыв любую из них, кроме своей домашней папки (на рис. 1.116 пользователь sn
Использование предыдущих версий файлов
Использование предыдущих версий файлов Одной из наиболее распространенных причин потери данных на компьютере является ошибочная перезапись нужного файла другим с одинаковым именем. Эту ошибку можно допустить как при копировании с помощью Проводника, так и при
Форматы звуковых файлов
Форматы звуковых файлов Ad Lib Sample SMPФормат используется звуковой картой Ad Lib Gold для загрузки в нее семплов инструментов. Поддерживает 8/16-битный звук, моно/стерео, 4-битную компрессию Yamaha ADPCM. Файлы этого формата имеют расширение. smp.Amiga SVXЭтот тип файла применяется на
Глава 10 Подготовка звуковых файлов для использования в Internet
Глава 10 Подготовка звуковых файлов для использования в Internet Для воспроизведения звуковых публикаций в Internet ваше программное обеспечение должно поддерживать два различных формата файлов, которые специально оптимизированы для потокового воспроизведения через