Работа со звуком в 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
Хочу обратить ваше внимание на
константы. Этот модуль
я нашел в исходных текстах какой-то программы, взятой на одной из
страничек в Интернете, немножко его подкорректировал и написал все
комментарии. |