Работа со
звуком в VB
В
этой статье я нашёл очень много
полезного и интересного!!!
Надеюсь и остальным читателям
она покажется не менее
интересной! А теперь статья
(всё, что ниже, написано
автором):
Итак, код модуля
для проигрывания звука:
'------------------------------------------------------------
'
Работа со звуком
'------------------------------------------------------------
Option Explicit
' Функции и
константы для проигрывания
звуков. Декларации.
Declare
Function sndPlaySound Lib
"winmm.dll" Alias "sndPlaySoundA"
_
(ByVal
lpszSoundName As String, ByVal
uFlags As Long) As
Long
Declare
Function sndStopSound Lib
"winmm.dll" Alias "sndPlaySoundA"
_
(ByVal
lpszNull As Long, ByVal
uFlags As
Long) As Long
' Звук
воспроизводится синхронно, и
функция не возвращает _
управления
до окончания его проигрывания.
Global
Const SND_SYNC = &H0
' Звук
воспроизводится асинхронно,
функция возвращает управление
_
сразу
после начала воспроизведения.
Global
Const SND_ASYNC = &H1
' Для
прекращения воспроизведения
необходимо вызвать sndPlaySound() _
c
NULL в качестве аргумента-имени
файла
' Если указанный
файл отсутствует, функция
неделает ничего.
Global
Const SND_NODEFAULT = &H2
' Параметр SoundName
указывает на звук, образ
которого уже _
находится
в оперативной памяти.
Global
Const SND_MEMORY = &H4
'
Воспроизведение звука
повторяется до тех пор, пока не
будет _
вызвана
функция sndPlaySound() c NULL в
качестве
Global
Const SND_LOOP = &H8
' параметра
IpszSoundName. Для работы этого флага
необходимо _
установить
также флаг SND_ASYNC.
' Если звук уже
воспроизводится, функция не
прерывает его _
воспроизведение,
а немедленно возвращает FALSE.
Global
Const SND_NOSTOP = &H10
Function
NoiseGet(ByVal FileName) As String
'------------------------------------------------------------
'
Загрузка звука в строковую
переменную.
'------------------------------------------------------------
Dim
buffer As String
Dim
f As Integer
Dim
SoundBuffer As
String
On
Error GoTo NoiseGet_Error
buffer = Space$(1024)
SoundBuffer = ""
f = FreeFile
Open
FileName For Binary
As f
Do
While Not EOF(f)
Get #f,
, buffer ' Load in 1K chunks
SoundBuffer = SoundBuffer & buffer
Loop
Close f
NoiseGet = Trim$(SoundBuffer)
Exit
Function
NoiseGet_Error:
SoundBuffer = ""
Exit Function
End
Function
Sub
NoisePlay(SoundBuffer As String,
ByVal PlayMode As
Integer)
'------------------------------------------------------------
'
Проигрывание звука
загруженного в память с
помощью функции
'
NoiseGet().
'------------------------------------------------------------
Dim
retcode As Integer
If
SoundBuffer = "" Then Exit Sub
'
Stop any sound that may currently be playing.
retcode = sndStopSound(0, SND_ASYNC) '
код для прекращения звука
'
PlayMode should be SND_SYNC or SND_ASYNC
'
проигрывание звука
retcode = sndPlaySound(ByVal
SoundBuffer, PlayMode Or SND_MEMORY)
End
Sub
'------------------------------------------------------------
'
Примеры применения
'------------------------------------------------------------
'
' Определение и загрузка звука
'
wavFinal = NoiseGet(App.Path & "" &
"finalrealty.wav")
'
'
код для прекращения звука (Мало
ли, играл раньше)
'
NoisePlay 0, SND_ASYNC
'
Проигрывание звука
'
NoisePlay wavFinal, SND_ASYNC
Хочу обратить
ваше внимание на константы.
Этот
модуль я нашел в исходных
текстах какой-то программы,
взятой на одной из страничек в
Интернете, немножко его
подкорректировал и написал все
комментарии.
|