скачать книгу бесплатно
Рис. 6.2. Подсказка с методом Play.
В режиме выполнения (Build, Build Selection; Debug, Start Without Debugging) мы услышим соответствующее (одноразовое) воспроизведение звукового файла, который мы добавили непосредственно в проект (а не в дополнительную папку Sounds проекта).
Если в приведённый выше шаблон метода Form1_Load мы загрузим подряд два файла, как показано ниже:
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.Audio.Play("..\..\drumpad-crash.wav")
My.Computer.Audio.Play("..\..\drumpad-bass_drum.wav")
End Sub
то в режиме выполнения мы услышим только второй звуковой файл.
Чтобы мы услышали сначала полностью первый звуковой файл, а затем второй звуковой файл, мы должны в методе Play в качестве второго параметра использовать константу WaitToComplete из перечисления режимов AudioPlayMode, как показано в следующем коде.
Листинг 6.2. Метод для загрузки и воспроизведения звуковых файлов.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.Audio.Play("..\..\drumpad-crash.wav", _
AudioPlayMode.WaitToComplete)
My.Computer.Audio.Play("..\..\drumpad-bass_drum.wav")
End Sub
Подчеркнём следующее. Чтобы все игровые действия прекратились на время исполнения мелодии, мы должны в методе Play в качестве второго параметра использовать уже применённую выше константу WaitToComplete из перечисления режимов AudioPlayMode, как показано в следующем коде.
Листинг 6.3. Метод для загрузки и воспроизведения звуковых файлов.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.Audio.Play("..\..\drumpad-crash.wav", _
AudioPlayMode.WaitToComplete)
End Sub
Чтобы мы услышали непрерывное циклическое (Loop) воспроизведение звукового файла, мы должны в методе Play в качестве второго параметра использовать константу BackgroundLoop из перечисления режимов AudioPlayMode, как показано в следующем коде.
Листинг 6.4. Метод для загрузки и воспроизведения звуковых файлов.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.Audio.Play("..\..\drumpad-crash.wav", _
AudioPlayMode.BackgroundLoop)
End Sub
Чтобы остановить (Stop) воспроизведение звука, необходимо в каком либо методе, например, в обработчике щелчка кнопки записать строку:
My.Computer.Audio.Stop()
Теперь после щелчка кнопки звучание прекратится.
Если в игре применяются несколько звуковых файлов, то их целесообразно разместить в одной папке с именем, например, Sounds. Для добавления в проект этой папки, в панели Solution Explorer (рис. 6.3) выполняем правый щелчок по имени проекта, в контекстном меню выбираем Add, New Folder, в поле появившегося значка папки записываем имя папки и нажимаем клавишу Enter.
Рис. 6.3. Папка Sounds в панели Solution Explorer.
Добавляем в эту папку (например, из Интернета) первый звуковой файл по стандартной схеме, а именно: выполняем правый щелчок по имени этой папки, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим и выделяем имя файла и щёлкаем кнопку Add (или дважды щёлкаем по имени файла). В панели Solution Explorer мы увидим этот файл.
Аналогично добавляем в папку Sounds нашего проекта остальные звуковые файлы.
Напомним, что добавлять в проект все файлы можно как по одному, так и все сразу (после их выделения или только одной мышью, или мышью с нажатой клавишей Shift – для выделения всех соседних файлов, или мышью с нажатой клавишей Ctrl – для выделения всех файлов в различных местах).
Теперь, чтобы мы услышали воспроизведение звукового файла из папки Sound нашего проекта, необходимо применить следующий код.
Листинг 6.5. Метод для загрузки и воспроизведения звуковых файлов.
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
My.Computer.Audio.Play("..\..\Sounds\drumpad-crash.wav", _
AudioPlayMode.WaitToComplete)
End Sub
Однако чаще требуется записывать строку типа:
My.Computer.Audio.Play("..\..\drumpad-crash.wav")
не в методе Form1_Load, а в других методах, которые управляют игровыми объектами.
Для примера, покажем, как управлять звуками при помощи двух кнопок Button, которые мы разместили на форме. В режиме проектирования дважды щёлкаем первую кнопку (или в панели Properties для этой выделенной щелчком кнопки на вкладке Events дважды щёлкаем по имени события Click). Появляется файл Form1.vb с шаблоном (обработчика щелчка по этой кнопке), который после записи нашего кода принимает вид следующего метода.
Листинг 6.6. Метод для кнопки.
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
'Загружаем звуковые файлы формата (.wav)
'по 1-му варианту непосредственно из проекта:
My.Computer.Audio.Play("..\..\drumpad-crash.wav", _
AudioPlayMode.BackgroundLoop)
'Загружаем звуковые файлы формата (.wav)
'по 2-му варианту из внешней папки:
'My.Computer.Audio.Play( _
'"D:\MyDocs\Sounds\drumpad-bass_drum.wav")
End Sub
В режиме проектирования дважды щёлкаем вторую кнопку (или в панели Properties для этой выделенной щелчком кнопки на вкладке Events дважды щёлкаем по имени события Click). Появляется файл Form1.vb с шаблоном (обработчика щелчка по этой кнопке), который после записи нашего кода принимает вид следующего метода.
Листинг 6.7. Метод для кнопки.
Private Sub Button2_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click
'Загружаем звуковые файлы формата (.wav)
'по 1-му варианту непосредственно из проекта:
My.Computer.Audio.Play("..\..\drumpad-bass_drum.wav")
'Загружаем звуковые файлы формата (.wav)
'по 2-му варианту из внешней папки:
'My.Computer.Audio.Play( _
'"D:\MyDocs\Sounds\drumpad-crash.wav")
End Sub
В режиме выполнения (Build, Build Selection; Debug, Start Without Debugging), нажимая кнопки, мы услышим соответствующее (одноразовое или циклическое) воспроизведение звуковых файлов, которые мы добавили в проект. А именно, после щелчка первой кнопки и выполнения кода:
My.Computer.Audio.Play("..\..\drumpad-crash.wav", _
AudioPlayMode.BackgroundLoop)
мы услышим непрерывное циклическое (Loop) воспроизведение звукового файла drumpad-crash.wav типа шуршания оркестровых металлических тарелок после воздействия на них металлической метелкой. А после каждого нашего щелчка второй кнопки и выполнения кода:
My.Computer.Audio.Play("..\..\drumpad-bass_drum.wav")
мы будем слышать одиночное воспроизведение звукового файла drumpad-bass_drum.wav типа удара по барабану. Нажимая вторую кнопку с различной частотой, мы будем импровизировать и создавать различную мелодию из добавленных в проект двух звуковых файлов.
Аналогично по этой методике, добавляя в проект большое количество звуковых файлов, добавляя на форму большое количество кнопок Button (или других элементов управления) и записывая в методы-обработчики щелчков по этим кнопкам различные варианты кода для воспроизведения этих звуковых файлов в различной последовательности и с различным наложением звуков, в режиме выполнения приложения, щёлкая по кнопкам, мы будем получать множество самых разнообразных мелодий.
Отметим, что для управления воспроизведением звуковых файлов в дополнение или вместо кнопок Button (чтобы не загромождать форму Form1) можно использовать и клавиши клавиатуры, и компоненты с панели инструментов Toolbox по описанной далее методике.
6.3. Методика приостановки и возобновления звуков на основе пространства имён My
Для приостановки и возобновления воспроизведения звуковых файлов во время выполнения приложения можно разработать много вариантов кода, например, воспользоваться каким-либо элементом управления или компонентом. Так как далее для задания режимов почти всех игр мы будем применять выпадающее меню типа MenuStrip, то для решения поставленной здесь задачи применим это меню. С панели инструментов Toolbox переносим на форму элемент управления MenuStrip и щёлкаем по нему (ниже формы в режиме проектирования). На форме Form1 появляются окна с надписью Type Here (Печатайте здесь), в которые записываем команды на русском языке (по второму варианту, можно записывать в панели Properties в свойстве Text), для примера, для управления двумя звуковыми файлами: Звуки, Звук 1, Звук 2, рис. 6.4. Теперь в панели Properties в свойстве Name изменяем эти русские команды на соответствующие английские: Sounds, Sound1, Sound2. Рассмотрим первую команду Звук 1.
Щёлкаем по этой команде “Звук 1” и в панели Properties (для этой команды) значение свойства Checked задаём как True (рис. 6.5), чтобы на форме слева от этой команды появился флажок. А чтобы этот флажок можно было удалить и снова установить (после щелчка по команде мышью), в панели Properties для этой команды значение свойства CheckOnClick также задаём как True.
Дважды щёлкаем по этой команде “Звук 1” (в режиме проектирования). Появляется файл Form1.vb с автоматически сгенерированным шаблоном метода, выше которого объявляем булеву переменную, а в шаблон записываем код, как показано на следующем листинге.
Листинг 6.8. Код для приостановки и возобновления звука.
'Объявляем логическую переменную OffOn и задаём ей True:
Dim OffOn As Boolean = True
Private Sub Sound1ToolStripMenuItem_Click( _
ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Sound1ToolStripMenuItem.Click
'Изменяем значение на противоположное:
OffOn = Not OffOn
'Выключаем Stop и включаем Play звук 1:
If (OffOn = False) Then
My.Computer.Audio.Stop()
Else
My.Computer.Audio.Play("..\..\drumpad-crash.wav", _
AudioPlayMode.BackgroundLoop)