скачать книгу бесплатно
Fix(Flags.SND_ASYNC Or _
Flags.SND_MEMORY))
End If
End Sub
'Метод для циклического воспроизведения звукового файла:
Public Sub PlayLoop()
loopSound = soundBytes
If (Sound.Enabled) Then
PlaySound(soundBytes, IntPtr.Zero, _
Fix(Flags.SND_ASYNC Or _
Flags.SND_MEMORY Or _
Flags.SND_LOOP))
End If
End Sub
'Метод остановки воспроизведения звукового файла:
Public Sub StopSound()
If (Not loopSound Is Nothing) Then
PlaySound(Nothing, IntPtr.Zero, _
0)
End If
End Sub
'Метод для восстановления воспроизведения звукового файла:
Public Sub ResumeSound()
If (Not Sound.Enabled) Then
Return
End If
If (Not loopSound Is Nothing) Then
PlaySound( _
loopSound, _
IntPtr.Zero, _
Flags.SND_ASYNC Or Flags.SND_MEMORY Or _
Flags.SND_LOOP)
End If
End Sub
End Class
Этот файл Sound.vb можно использовать во многих приложениях и играх для воспроизведения звуковых файлов, добавляя его в проект по стандартной схеме Project, Add Existing Item, как мы сейчас покажем на конкретном примере нового проекта.
Для создания проекта в VS щёлкаем кнопку New Project (или File, New, Project). В панели New Project в окне Project Types выбираем тип проекта Visual Basic, Windows, в окне Templates выделяем шаблон Windows Forms Application, в окне Name записываем любое имя проекта, например, Sounds4 и щёлкаем OK. Создаётся проект, появляется форма Form1 (рис. 6.6) в режиме проектирования.
Рис. 6.6. Форма Form1 в режиме выполнения.
Проектируем (или оставляем по умолчанию) эту форму, как описано в параграфе “Методика проектирования формы”.
Для добавления звукового файла move.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 (Встроенный ресурс).
Аналогично добавляем и встраиваем в проект второй файл win.wav типа мажорной мелодии.
Аналогично можно добавить и встроить в проект ещё много звуковых файлов, которые мы желаем послушать во время выполнения приложения или игры.
Открываем файл Form1.vb (например, так: File, Open, File) и вверху записываем директиву для подключения требуемого пространства имен:
Imports System.Reflection 'Для класса Assembly.
Напомним, что эту строку можно и не записывать, но тогда нам придётся перед каждым классом записывать эти пространства имён System.Reflection.
Теперь в панели Properties (для формы Form1) на вкладке Events дважды щёлкаем по имени события Load (Загрузка).
Появляется файл Form1.vb с шаблоном метода Form1_Load, который после записи нашего кода принимает следующий вид.
Листинг 6.10. Метод для загрузки и воспроизведения звуковых файлов.
'Объявляем объекты класса Sound для каждого звукового файла:
Dim moveSound As Sound
Dim winSound As Sound
'Создаём объект myAssembly класса System.Reflection.Assembly
'и присваиваем ему ссылку на исполняемую сборку приложения:
Dim myAssembly As Assembly = Assembly.GetExecutingAssembly()
'Создаём объект myAssemblyName
'класса System.Reflection.AssemblyName и присваиваем ему
'имя сборки, которое состоит из имени проекта,
'Version, Culture, PublicKeyToken:
Dim myAssemblyName As AssemblyName = myAssembly.GetName()
'Из имени сборки при помощи свойства Name
'выделяем имя проекта myName_of_project типа 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
'Загружаем звуковые файлы:
'Вариант 1:
'moveSound = _
' New Sound(myAssembly.GetManifestResourceStream( _
' myName_of_project + "." + "move.wav"))
winSound = _
New Sound(myAssembly.GetManifestResourceStream( _
myName_of_project + "." + "win.wav"))
'Загружаем звуковые файлы:
'Вариант 2:
'moveSound = New Sound(myName_of_project + "." + "move.wav")
'winSound = New Sound(myName_of_project + "." + "win.wav")
'Воспроизведение звукового файла:
'moveSound.Play()
'Воспроизведение звукового файла:
winSound.Play()
End Sub
В режиме выполнения (Build, Build Selection; Debug, Start Without Debugging) мы услышим соответствующее (одноразовое) воспроизведение звукового файла, который мы добавили непосредственно в проект (а не в дополнительную папку Sounds проекта).
Теперь строки типа:
moveSound.Play()
winSound.Play()
мы можем записывать в тех местах любой программы, где необходимо воспроизводить соответствующий звуковой файл.
Для циклического (Loop) непрерывного воспроизведения звукового файла вместо строки:
winSound.Play()
следует записать:
winSound.PlayLoop()
Далее можно экспериментировать, как описано выше в первой методике.
Важно отметить, если в игре применяются несколько звуковых файлов, то их целесообразно разместить в одной папке с именем, например, Sounds. Для добавления в проект этой папки, в панели Solution Explorer (рис. 6.7) выполняем правый щелчок по имени проекта, в контекстном меню выбираем Add, New Folder, в поле появившегося значка папки записываем имя папки и нажимаем клавишу Enter.
Добавляем в эту папку (например, из Интернета) первый звуковой файл по стандартной схеме, а именно: выполняем правый щелчок по имени этой папки, в контекстном меню выбираем Add, Existing Item, в панели Add Existing Item в окне “Files of type” выбираем “All Files”, в центральном окне находим и выделяем имя файла и щёлкаем кнопку Add (или дважды щёлкаем по имени файла). В панели Solution Explorer мы увидим этот файл.
Рис. 6.7. Папка Sounds в панели Solution Explorer.
В панели Solution Explorer выделяем имя этого файла, а в панели Properties (для данного файла) в свойстве Build Action (Действие при построении) вместо заданного по умолчанию выбираем значение Embedded Resource (Встроенный ресурс).
Аналогично добавляем в нашу новую папку Sounds данного проекта и встраиваем в виде ресурса остальные звуковые файлы.
Один и тот же звуковой файл мы не можем добавить как непосредственно в проект, так и в папку Sounds (надо выбрать что-то одно, иначе будет ошибка). Вследствие этого весь предыдущий код для воспроизведения звуковых файлов остаётся тем же независимо от того, звуковой файл добавлен непосредственно в проект, или добавлен в наше новую папку Sounds.
Таким образом, по этой методике, добавляя в проект большое количество звуковых файлов, добавляя на форму большое количество кнопок Button (или других элементов управления) и записывая в методы-обработчики щелчков по этим кнопкам различные варианты кода для воспроизведения этих звуковых файлов в различной последовательности и с различным наложением звуков, в режиме выполнения приложения, щёлкая по кнопкам, мы будем получать множество самых разнообразных мелодий.
Отметим, что для управления воспроизведением звуковых файлов в дополнение или вместо кнопок Button (чтобы не загромождать форму Form1) можно использовать и клавиши клавиатуры, и компоненты с панели инструментов Toolbox по описанной ранее методике.