Ciao
Mentre in VBScript lo faccio ad occhi chiusi, mi trovo in grosse difficoltà con VB nell'eseguire un semplice suono da programma (wave o midi)
Come si fa?
Ci vuole per forza un lettore?
Grazie rudyF
Ciao
Mentre in VBScript lo faccio ad occhi chiusi, mi trovo in grosse difficoltà con VB nell'eseguire un semplice suono da programma (wave o midi)
Come si fa?
Ci vuole per forza un lettore?
Grazie rudyF
Ciao..basta usare la funzione API SndPlaySound:
Se poi hai problemi scrivi pure..ciaocodice:Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Ciao
grazie per la risposta.
Sono un po' arrugginito col VB, saresti così gentile da farmi un esempio dettagliato?
I suoni vengono avviati da programma e si trovano in "audio/suonoA.wav" "audio/suonoB.mid"
rudyF
codice:Public Const SND_ASYNC = &H1 Public Const SND_LOOP = &H8 Public Const SND_MEMORY = &H4 Public Const SND_NODEFAULT = &H2 Public Const SND_SYNC = &H0 Public Const SND_NOSTOP = &H10 '· lpszSound = percorso del suono da eseguire '· fuSound = tipologia di riproduzione: ecco le seguenti opzioni ' SND_ASYNC = esecuzione asincrona, la funzione ritorna subito dopo l'avvio del suono e per fermarlo 'occorre chiamare la funzione con lpszsound = NULL ' SND_LOOP = esecuzione continua finchè non viene chiamata nuovamente la funzione con lpszsound = NULL ' SND_MEMORY = riguarda l'immagine nella memoria, non ti interessa per il tuo scopo ' SND_NODEFAULT = se non viene trovato il suono non viene eseguito ' SND_NOSTOP = se il suono è già in esecuzione la funzione ritorna falso, e non viene eseguito il suono ' SND_SYNC = esecuzione sincrona, la funzione non ritorna finchè non finisce il suono Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Sub main() Dim PercorsoFile As String If Dir(PercorsoFile) <> "" Then sndPlaySound PercorsoFile, SND_ASYNC end if End Sub
Scusa se rompo
Riducendo il codice all'osso mi risulta così:
code:--------------------------------------------------------------
Const SND_ASYNCSND_ASYNC = &H1
Public Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Sub main()
sndPlaySound (App.Path & "audio/w.wav"), SND_ASYNC
End Sub
--------------------------------------------------------------------
Però mi da errore di compilazione:
Costanti, stringhe di lunghezza fissa, matrici, tipi definiti dall'utente e istruzioni Declare non ammessi come membri Public di moduli di oggetto
Dove sbaglio?
rudyF
Ciao, se la chiamata della api non è in un modulo, la dichiarazione deve essere private e non public.
Controlla anche la costante..non è la stessa che hai dichiarato..
![]()
Jupy
Grazie.
Ho corretto, ma non sento nulla.
Const SND_ASYNCSND = &H1
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Sub window_onLoad()
sndPlaySound (App.Path & "audio/w.wav"), SND_ASYNC
End Sub
La dichiarazione della costante ha un nome diverso da quella che usi nella funzione!
Questo funziona... provacodice:Const SND_ASYNC = &H1 Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long Private Sub Command1_Click() sndPlaySound ("e:\ringin.wav"), SND_ASYNC End Sub
![]()
Jupy
Funziona!
Grazie mille
rudyF