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

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

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

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


Метод ResumeSound возобновляет звук только тогда, если до этого воспроизводился циклический звук, как показано в следующем коде:

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

Теперь от описания приступим к конкретной реализации.

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

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

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

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

Public Class Sound

'Переменная включает и выключает звук:

Public Shared Enabled As Boolean = True

'Свойство для приостановки и возобновления звука:

Public Property EnabledProperty() As Boolean

Get

Return Enabled

End Get

Set(ByVal value As Boolean)

Enabled = value

If (value) Then

ResumeSound()

Else

StopSound()

End If

End Set

End Property

'Массив для циклического звучания:

Private loopSound() As Byte = Nothing

'Массив для одноразового воспроизведения звука:

Private soundBytes() As Byte

'Флажки (константы) для управления методами

'операционной системы Windows CE, а именно,

'методом PlaySound из библиотеки CoreDll.dll

'при воспроизведении звукового файла:

Public Enum Flags

SND_ALIAS = &H10000

SND_ALIAS_ID = &H110000

SND_FILENAME = &H20000

SND_RESOURCE = &H40004

SND_SYNC = &H0

SND_ASYNC = &H1

SND_NODEFAULT = &H2

SND_MEMORY = &H4

SND_LOOP = &H8

SND_NOSTOP = &H10

SND_NOWAIT = &H2000

SND_VALIDFLAGS = &H17201F

SND_RESERVED = &HFF000000

SND_TYPE_MASK = &H170007

End Enum

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

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

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

Private Declare Function PlaySound _

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

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

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

Private Sub readStream(ByVal soundStream As Stream)

'Создаём массив soundBytes с элементами типа Byte

'и инициализируем размерность этого массива

'как длину звукового файла soundStream.Length:

soundBytes = New Byte(soundStream.Length) {}

'Из потока soundStream считываем звуковой файл

'в массив soundBytes:

soundStream.Read(soundBytes, 0, soundStream.Length)

End Sub

'Объявляем метод-конструктор класса Sound

'с параметром в виде потока soundStream класса Stream:

Public Sub New(ByVal soundStream As Stream)

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

readStream(soundStream)

End Sub

'Объявляем метод-конструктор класса Sound

'с параметром в виде пути filename к звуковому файлу:

Public Sub New(ByVal filename As String)

Dim execAssem As System.Reflection.Assembly = _

System.Reflection.Assembly.GetExecutingAssembly()

Dim soundStream As Stream = _

execAssem.GetManifestResourceStream(filename)

If (soundStream Is Nothing) Then

System.Windows.Forms.MessageBox.Show( _

"Missing file : " + filename, "Audio Load")

Return

End If

readStream(soundStream)

End Sub

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

Public Sub Play()

loopSound = Nothing

If (Sound.Enabled) Then

PlaySound(soundBytes, IntPtr.Zero, _