Валерий Алексеевич Жарков

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


Скачать книгу

= 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, _

      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