скачать книгу бесплатно
btRetVal = New Byte(strBytes.Length) {}
strBytes.Read(btRetVal, 0, Fix(strBytes.Length))
Return btRetVal
End Function
'Метод для разового воспроизведения звукового файла:
Public Shared Sub Play(ByRef btBytes() As Byte)
PlaySoundBytes(btBytes, IntPtr.Zero, _
SND_ASYNC Or SND_MEMORY)
End Sub
End Class
Этот файл Sound.vb можно использовать во многих приложениях и играх для воспроизведения звуковых файлов, добавляя его в проект по стандартной схеме Project, Add Existing Item.
В режиме выполнения (Build, Build Selection; Debug, Start Without Debugging) мы услышим соответствующее (одноразовое) воспроизведение звукового файла, который мы добавили или непосредственно в проект, или в нашу дополнительную папку Sounds проекта.
6.7. Методика воспроизведения звуковых файлов на основе DirectX
Теперь для воспроизведения звуков в приложениях и играх только для настольных компьютеров опишем методику на основе технологии DirectX, точнее, её компонента DirectSound в виде одноименного пространства имён Microsoft.DirectX.DirectSound. Сейчас, применительно к начальным главам по двухмерным играм, эту очень мощную методику мы опишем кратко, а более подробно эта методика будет описана в конце книги для трёхмерных игр.
Приступим к программной реализации воспроизведения звуковых файлов, для общности, в новом проекте.
Для создания проекта в VS щёлкаем кнопку New Project (или File, New, Project). В панели New Project в окне Project Types выбираем тип проекта Visual Basic, Windows, в окне Templates выделяем шаблон Windows Forms Application, в окне Name записываем любое имя проекта и щёлкаем OK. Создаётся проект, появляется форма Form1 (рис. 6.10) в режиме проектирования.
Рис. 6.10. Форма Form1 в режиме выполнения.
Проектируем (или оставляем по умолчанию) эту форму, как описано в параграфе “Методика проектирования формы”. Например, в панели Properties в свойстве Font оставляем по умолчанию или устанавливаем новый шрифт и его размер (Size). Чтобы изменить заголовок формы, в панели Properties в свойстве Text записываем (или вставляем из буфера обмена: правый щелчок, Paste) текст.
На форме размещаем (с панели Toolbox), для примера, две кнопки Button (Sound 1 и Sound 2). В панели Properties в свойстве Text записываем название каждой кнопки Sound &1 и Sound &2 с оператором &, который подчёркивает следующий за ним символ текста, что позволяет нам задействовать кнопку не только мышью, но и, удерживая нажатой клавишу Alt, нажатием клавиши с подчёркнутой буквой английского алфавита или цифрой (например, Alt+1).
На форме в режиме выполнения по умолчанию выделена первая кнопка. Но если мы желаем, чтобы в режиме выполнения на форме была выделена другая кнопка (чтобы нажимать её не только мышью, но и клавишей Enter), то в панели Properties (для Form1) в свойстве AcceptButton выбираем имя этой кнопки.
По варианту 1, для добавления звукового файла drumpad-crash.wav в проект, в меню Project выбираем Add Existing Item, в панели Add Existing Item в окне Files of type устанавливаем All Files, в окне "Look in" находим (в системной папке компьютера C, WINDOWS, Media или, например, в папке с загруженным из Интернета файлом) файл и щёлкаем кнопку Add (или дважды щёлкаем по имени файла). Этот файл мы увидим в панели Solution Explorer. Если мы дважды щёлкнем по этому файлу drumpad-crash.wav, то откроется проигрыватель Windows Media Player, и мы услышим в течение нескольких секунд звучание типа шуршания оркестровых металлических тарелок при воздействии на них металлической метелки.
Аналогично добавляем в проект второй файл drumpad-bass_drum.wav типа удара барабана.
Аналогично можно добавить в проект ещё много звуковых файлов, которые мы желаем послушать во время выполнения приложения или игры.
По второму, закомментированному далее в программе, варианту эти файлы мы не добавляем в проект, а копируем во внешнюю папку с именем, например, Sounds, запоминая путь к этой папке, начиная от локального диска, например, D.
В проекте создаём ссылку на тот компонент DirectX, который потребуется для приложения. Для этого в меню Project выбираем Add Reference, а в панели Add Reference на вкладке (.NET) – компонент Microsoft.DirectX.DirectSound и щёлкаем OK. Если в панели Add Reference пользователь не увидит компонента Microsoft.DirectX.DirectSound, то ему следует с сайта корпорации Microsoft бесплатно загрузить последнюю версию DirectX SDK и стандартно установить на свой компьютер.
Открываем файл Form1.vb (например, так: File, Open, File) и вверху записываем директиву для подключения этого же пространства имён (которое мы добавили в виде ссылки):
Imports Microsoft.DirectX.DirectSound
Напомним, что эту строку можно и не записывать, но тогда нам придётся перед каждым классом записывать эти пространства имён Microsoft.DirectX.DirectSound.
Теперь в любом месте класса Form1 записываем следующий универсальный (для всех последующих приложений и игр) код для инициализации DirectX.
Листинг 6.14. Универсальный код.
'Параметр устр-ва в виде панели визуализации renderWindow
'класса Control из пространства имён System.Windows.Forms:
Dim renderWindow As Control
'Добавляем переменные для воспроизведения звуков:
'Устройство DeviceOfSound класса Device из DirectSound:
Dim DeviceOfSound As Microsoft.DirectX.DirectSound.Device
'Класс вторичного буфера SecondaryBuffer
'для нескольких звуковых объектов-файлов:
Dim mySound1 As SecondaryBuffer ' = Nothing по умолчанию.
Dim mySound2 As SecondaryBuffer ' = Nothing по умолчанию.
'Инициализируем и устанавливаем параметры DirectX:
Public Function InitializeDirectX() As Boolean
Try
'renderWindow связываем с this формой (или эл-м):
renderWindow = Me
'Создаём и инициализируем переменные для звука:
'Устройство DeviceOfSound класса Device из DirectSound:
DeviceOfSound = _
New Microsoft.DirectX.DirectSound.Device()
'Уровень доступа к устройству – многозадачный Normal:
DeviceOfSound.SetCooperativeLevel(renderWindow, _
CooperativeLevel.Normal)
'Инициализация DirectX прошла успешно:
Return True
Catch
'Перехвачена ошибка инициализации DirectX:
Return False
End Try
End Function 'Конец метода InitializeDirectX.
Напомним, что именно этот универсальный код можно будет копировать и записывать в наши последующие приложения и игры (после нашего напоминания).
Теперь в панели Properties (для формы Form1)) на вкладке Events дважды щёлкаем по имени события Load (Загрузка).
Появляется файл Form1.vb с шаблоном метода Form1_Load, который после записи нашего кода принимает следующий вид.