Справочник Жаркова по проектированию и программированию искусственного интеллекта. Том 4: Программирование на Visual Basic искусственного интеллекта. Валерий Алексеевич Жарков. Читать онлайн. Newlib. NEWLIB.NET

Автор: Валерий Алексеевич Жарков
Издательство: Автор
Серия:
Жанр произведения:
Год издания: 2022
isbn:
Скачать книгу
длину звукового файла 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

      Метод readStream выполняет фактическую загрузку звука. Операционная система управляет звуком. Класс Sound использует платформу Platform Invoke (P/Invoke), чтобы при помощи этого метода вызвать и управлять звуком, как показано в следующем коде:

      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

      Private Declare Function PlaySound _

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

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

      В этом коде ряд флажков (Flags) непосредственно управляет генерацией звука. Класс Sound содержит статический член, который в настоящее время имеет ссылку на непрерывный циклический звук (или любой другой). Если звук был выключен и затем снова включён, циклический звук возобновляется. Класс Sound содержит методы Play и PlayLoop для одиночного и циклического воспроизведения звукового файла, как показано в следующем коде:

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

      Public Sub Play()

      loopSound = Nothing

      If (Sound.Enabled) Then

      PlaySound(soundBytes, IntPtr.Zero, _

      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

      Метод StopSound в классе Sound останавливает проигрывающийся звук, задавая массиву soundBytes нулевое значение (Zero) следующим образом:

      Public Sub StopSound()

      If (Not loopSound Is Nothing) Then

      PlaySound(Nothing, IntPtr.Zero, _

      0)

      End If

      End Sub

      Метод 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

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

      А именно, для воспроизведения звуковых файлов, которые добавлены в проект по описанной ранее схеме, при помощи универсального (для многих приложений и игр) файла