banner banner banner
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта
Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта
Оценить:
Рейтинг: 0

Полная версия:

Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта

скачать книгу бесплатно


6.5. Методика приостановки и возобновления звуков на основе встроенного ресурса

Для приостановки и возобновления воспроизведения звуковых файлов во время выполнения приложения можно разработать много вариантов кода, например, воспользоваться каким-либо элементом управления или компонентом.

Так как далее для задания режимов почти всех игр мы будем применять выпадающее меню типа MenuStrip, то для решения поставленной здесь задачи применим это меню. С панели инструментов Toolbox переносим на форму элемент управления MenuStrip и щёлкаем по нему (ниже формы в режиме проектирования). На форме Form1 появляются окна с надписью Type Here (Печатайте здесь), в которые записываем команды на русском языке (по второму варианту, можно записывать в панели Properties в свойстве Text), для примера, для управления двумя звуковыми файлами: Звуки, Звук 1, Звук 2, рис. 6.8. Теперь в панели Properties в свойстве Name изменяем эти русские команды на соответствующие английские: Sounds, Sound1, Sound2. Рассмотрим первую команду Звук 1.

Рис. 6.8. Команды MenuStrip.

Щёлкаем по этой команде “Звук 1” и в панели Properties (для этой команды) значение свойства Checked задаём как True, чтобы на форме слева от этой команды появился флажок. А чтобы этот флажок можно было удалить и снова установить (после щелчка по команде мышью), в панели Properties для этой команды значение свойства CheckOnClick также задаём как True.

Дважды щёлкаем по этой команде “Звук 1” (в режиме проектирования). Появляется файл Form1.vb с автоматически сгенерированным шаблоном метода, выше которого объявляем булеву переменную, а в шаблон записываем код, как показано на следующем листинге.

Листинг 6.11. Код для приостановки и возобновления звука.

'Объявляем логическую переменную 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

winSound.StopSound()

Else

winSound.PlayLoop()

End If

End Sub

Теперь в режиме выполнения (Build, Build Selection; Debug, Start Without Debugging), поочерёдно удаляя или устанавливая мышью флажок напротив этой команды “Звук 1”, мы будем выключать методом StopSound и включать методом PlayLoop циклическое (Loop) непрерывное воспроизведение звукового файла, который мы добавили в проект.

Если после каждой установки флажка нам нужно воспроизводить звуковой файл только один раз, то вместо строки:

winSound.PlayLoop()

записываем (как уже было показано выше):

winSound.Play()

Аналогично можно использовать команду “Звук 2” для управления вторым звуковым файлом. Аналогично по этой методике мы можем добавить в проект много звуковых файлов, а в меню MenuStrip – много команд для приостановки и возобновления звукового сопровождения разнообразных игр (в режиме выполнения).

6.6. Вариант воспроизведения звуковых файлов на основе встроенного ресурса

Учитывая важность методики воспроизведения звуковых файлов на основе встроенного ресурса, которую можно применять в приложениях и для настольного компьютера, и для мобильного устройства, приведём второй вариант этой методики.

Основное отличие данного варианта от предыдущего заключается в том, что вместо объявления объектов класса Sound для каждого звукового файла (по первому варианту):

Dim moveSound As Sound

Dim winSound As Sound

мы объявляем динамические массивы (array) типа Byte для каждого звукового файла (по второму варианту):

Dim array_btSoundBounce() As Byte

Dim array_btSoundExplode() As Byte

Остальные пояснения будут понятны из нового проекта.

Для создания проекта в VS щёлкаем кнопку New Project (или File, New, Project). В панели New Project в окне Project Types выбираем тип проекта Visual Basic, Windows, в окне Templates выделяем шаблон Windows Forms Application, в окне Name записываем любое имя проекта, например, Sounds6 и щёлкаем OK. Создаётся проект, появляется форма Form1 (рис. 6.9) в режиме проектирования.

Рис. 6.9. Форма Form1 в режиме выполнения.

Проектируем (или оставляем по умолчанию) эту форму, как описано в параграфе “Методика проектирования формы”.

Для добавления звукового файла bounce.wav (типа удара) в проект, в меню Project выбираем Add Existing Item, в панели Add Existing Item в окне Files of type устанавливаем All Files, в окне "Look in" находим (например, в папке с загруженным из Интернета файлом) файл и щёлкаем кнопку Add (или дважды щёлкаем по имени файла). Этот файл мы увидим в панели Solution Explorer.

В панели Solution Explorer выделяем имя этого файла, а в панели Properties (для данного файла) в свойстве Build Action (Действие при построении) вместо заданного по умолчанию выбираем значение Embedded Resource (Встроенный ресурс).

Аналогично добавляем и встраиваем в проект второй файл explode.wav типа взрыва. Аналогично можно добавить и встроить в проект ещё много звуковых файлов, которые мы желаем послушать во время выполнения приложения или игры.

Открываем файл Form1.vb (например, так: File, Open, File) и вверху записываем директиву для подключения требуемого пространства имен:

Imports System.Reflection 'Для класса Assembly.

Напомним, что эту строку можно и не записывать, но тогда нам придётся перед каждым классом записывать эти пространства имён System.Reflection.

Теперь в панели Properties (для формы Form1) на вкладке Events дважды щёлкаем по имени события Load (Загрузка).

Появляется файл Form1.vb с шаблоном метода Form1_Load, который после записи нашего кода принимает следующий вид.

Листинг 6.12. Метод для загрузки и воспроизведения звуковых файлов.

'Объявляем динамические массивы array типа Byte

'для каждого звукового файла:

Dim array_btSoundBounce() As Byte

Dim array_btSoundExplode() As Byte

'Загружаем в проект файлы изображений и звуков по такой схеме:

'Создаём объект myAssembly класса Assembly и присваиваем ему

'ссылку на исполняемую сборку нашего приложения:

Dim myAssembly As Assembly = Assembly.GetExecutingAssembly()

'Создаём объект myAssemblyName

'класса System.Reflection.AssemblyName и присваиваем ему

'имя сборки, которое состоит из имени проекта,

'Version, Culture, PublicKeyToken:

Dim myAssemblyName As AssemblyName = myAssembly.GetName()

'Из имени сборки при помощи свойства Name

'выделяем имя проекта типа string:

Dim myName_of_project As String = myAssemblyName.Name

Private Sub Form1_Load(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles MyBase.Load

'Загружаем звуковые файлы в массивы:

array_btSoundBounce = Sound.ReadBytesFromStream( _

myAssembly.GetManifestResourceStream( _

myName_of_project + "." + "bounce.wav"))

array_btSoundExplode = Sound.ReadBytesFromStream( _

myAssembly.GetManifestResourceStream( _

myName_of_project + "." + "explode.wav"))

'Воспроизводим звук удара объекта о границы формы:

Sound.Play(array_btSoundBounce)

'Воспроизводим звук взрыва объекта:

'Sound.Play(array_btSoundExplode)

End Sub

В панели Solution Explorer выполняем правый щелчок по имени проекта и в контекстном меню выбираем Add, New Item (или Project, Add New Item). В панели Add New Item выделяем шаблон Code File, в окне Name записываем имя Sound.vb и щёлкаем кнопку Add.

В проект (и в панель Solution Explorer) добавляется этот файл, открывается пустое окно редактирования кода, в которое записываем следующий код.

Листинг 6.13. Файл Sound.vb.

Imports System.IO 'Для класса Stream.

Public Class Sound

'Константы для управления воспроизведением звукового файла:

Const SND_SYNC = &H0

Const SND_ASYNC = &H1

Const SND_NODEFAULT = &H2

Const SND_MEMORY = &H4

Const SND_LOOP = &H8

Const SND_NOSTOP = &H10

'Из пространства имён System.Runtime.InteropServices

'импортируем библиотеку winmm.dll и

'объявляем функцию PlaySoundBytes этой библиотеки:

Private Declare Function PlaySoundBytes _

Lib "winmm.dll" Alias "PlaySound" (ByVal szSound() As Byte, _

ByVal hModule As IntPtr, ByVal dwFlags As Integer) As Integer

'Метод для считывания звукового файла:

Public Shared Function ReadBytesFromStream( _

ByRef strBytes As Stream) As Byte()

Dim btRetVal() As Byte