Звук продолжался

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ВуД
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 59
Зарегистрирован: 23.02.2006 (Чт) 17:40
Откуда: Иркутск (Сибирь)

Звук продолжался

Сообщение ВуД » 11.03.2006 (Сб) 8:13

Я прописоваю для возведения звука:
Код: Выделить всё
'------------------------------------------------------------
' Работа со звуком
'------------------------------------------------------------

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
Dim wavFinal1 As String
Dim wavFinal2 As String
Private Sub Command1_Click()
' Определение и загрузка звука
  wavFinal1 = NoiseGet(App.Path & "\" & "goofy.wav")
'Проигрывание звука
  NoisePlay wavFinal1, SND_ASYNC
End Sub

Как мне сделать чтобы звук продолжал игра пока я не выключу форму
Помоги если знаешь!!!
мой сайт: mike-pro2006.narod.ru

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.03.2006 (Сб) 8:39

Потрясающе.
Шедеврально.

Автор скопировал код для воспроизведения звука, и не то чтобы не попытался понять его смысл, а даже не прочитал комментарии на русском, между прочим, языке. В которых - о чудо! - содержится ответ на вопрос автора!

Не знаю даже что сказать.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 11.03.2006 (Сб) 13:40

>>' Для прекращения воспроизведения необходимо вызвать >>sndPlaySound() _
>>c NULL в качестве аргумента-имени файла


Ну так в чём проблема в вызове этой функции в событии Unload() формы?????
У каждой сложной задачи есть множество простых для понимания, но неправильных решений.

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 11.03.2006 (Сб) 14:12

ВуД
Ты не поверишь флаги можно комбинировать.
А то что ты просил это
твой скопипастченный код писал(а):' Воспроизведение звука повторяется до тех пор, пока не будет _
вызвана функция sndPlaySound() c NULL в качестве
Global Const SND_LOOP = &H8
:)
Если всё делать своими ручками, они скоро отвалятся !


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 58

    TopList