'Свойство для приостановки и возобновления звука:
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