Een geluid continu te laten weergeven

Status
Niet open voor verdere reacties.

satriano17

Gebruiker
Lid geworden
30 sep 2012
Berichten
331
(VB6)
dag
Met deze code generer ik bepaalde geluids (door een bepaalde waarde in txtFreq te plaatsen)

Code:
Option Explicit
Private Declare Function BeepAPI Lib "kernel32" Alias "Beep" (ByVal dwFrequency As Long, ByVal dwMilliseconds As Long) As Long

Private Sub cmdStart_Click()
    Timer1.Enabled = True
End Sub

Private Sub cmdStop_Click()
    Timer1.Enabled = False
End Sub


Private Sub Timer1_Timer()
Dim freq As Long
    freq = CLng(txtFreq.Text)
    BeepAPI freq, Timer1.Interval
End Sub
Het enige probleem is dat het geluid in een soort van getik
door de timer interval word weergegeven.
Zou mogelijk zijn om het geluid continu te laten horen? Ik bedoel zoals een langegrekt geluid
Hoe moet ik dan dan de timer (of iets anders) aanpassen?
dank u
satriano
 
Laatst bewerkt:
Een loop erin zetten? Heb het voor VBA nooit gedaan, zoek daar eens op of wacht tot iemand wel een code heeft.
 
Dat verandert mijn antwoord niet.
 
Ik denk niet dat er een eenvoudige manier omheen is met VB6. Wat mogelijk werkt, is een externe module toevoegen aan je project dat de geluidsgeneratie voor je afhandelt. Het uitbesteden aan andere software dus (eventueel misschien met de directsound API van windows).

Puur binnen VB6 heb je weinig opties, omdat de software binnen een enkele thread draait.
 
Volkomen gelijk Wampier. Daarom ben ik bezig met component DX7 DirectSound te proberen
Ik hoop dat het mij lukt.
 
Heb geen verstand van VB6 wel een beetje van VBA, maar ik vind toch iets. Het heeft ook wel iets weg van het vba voorbeeld dat ik simpel kon googlen.
Kijk nog eens verder anders met deze zoekstrategie.

VB6
https://www.experts-exchange.com/questions/10111204/VB6-Loop-sound-files.html
Although the "MCISendstring" are one of the solution. But I think the following code are more suitable for Wave player.

Code:
Const SND_ASYNC = &H1         '  play asynchronously
Const SND_LOOP = &H8
Const SND_NOSTOP = &H10
Const SND_SYNC = &H0         '  play synchronously (default)

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Private Sub Command4_Click()
    sndPlaySound "c:\temp\mci\0.wav", SND_ASYNC
End Sub

VBA
http://www.cpearson.com/excel/PlaySound.aspx
Code:
Sub PlayTheSound(ByVal WhatSound As String, Optional Flags As Long = 0)
    If Dir(WhatSound, vbNormal) = "" Then
        ' WhatSound is not a file. Get the file named by
        ' WhatSound from the Windows\Media directory.
        WhatSound = Environ("SystemRoot") & "\Media\" & WhatSound
        If InStr(1, WhatSound, ".") = 0 Then
            ' if WhatSound does not have a .wav extension,
            ' add one.
            WhatSound = WhatSound & ".wav"
        End If
        If Dir(WhatSound, vbNormal) = vbNullString Then
            ' Can't find the file. Do a simple Beep.
            Beep
            Exit Sub
        End If
    Else
        ' WhatSound is a file. Use it.
    End If
    ' Finally, play the sound.
    sndPlaySound32 WhatSound, Flags
End Sub
 
Laatst bewerkt:
Eigenlijk is dat onder water dezelfde oplossing :p het geluid laten afspelen door een andere applicatie (deze functie komt uit winmm - windows multi media). Wel trouwens typisch voor microsoft dat deze functionaliteit wel ondersteund wordt voor het afspelen voor een file, maar niet voor intern gegenereerde geluidsdefinities (terwijl uiteindelijk beide geluid uit een buffer spelen).

Als het geluid via een externe file mag heb je ineens veel meer mogelijkheden. Wil je het intern genereren heb je die niet
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan