Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41

    Generatore di frequenze in vb6

    salve.

    Con la seguente routine, impostata su un textbox ed 1 commbutt
    riesco a produrre delle frequenze sonore.

    codice:
    Option Explicit
    Private Declare Function BeepAPI Lib "kernel32" Alias "Beep" (ByVal dwFrequency As Long, ByVal dwMilliseconds As Long) As Long
    
    Private Sub Command1_Click()
    Dim freq As Long
    
      freq = Val(Text1.Text)
      BeepAPI freq, 200     '200 = durata in millesecondi
    
    End Sub

    Cioé inserisco nella textbox una frequenza, per es. 10000, ed ottengo
    un suono di quella frequenza, della durata in millesecondi,
    nell'esempio di 200 millesecondi.
    Quello che non riesco a realizzare é
    1 - la durata del suono non dovrebbe essere di x millesecondi, ma
    continuo, fino a che io non lo arresto con un secondo commbutt

    2 - Quale codice scrivere sotto il secondo button per arrestare il tutto?

    3 -l suono adesso non esce (a mio parere) dai box ma dall'altoparlantino
    del pc. Come fare per farlo uscire dai box?
    C'é qualcuno che ha una idea, soluzione ai tre problemi?

    grazie.
    pazienza

  2. #2
    È difficile ottenere un beep continuo... si sentono necessariamente i "salti" tra una chiamata e l'altra di BeepAPI. In ogni caso ecco una parziale soluzione:
    codice:
    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
    
    Private Sub txtFreq_Validate(Cancel As Boolean)
        On Error Resume Next
        Dim tlng As Long
        Err.Clear
        tlng = CLng(txtFreq.Text)
        If Err.Number Then MsgBox "Inserire un numero intero.", vbCritical, "Errore": Cancel = True
    End Sub
    (dove Timer1 è un Timer con la proprietà Interval impostata a 10, cmdStart è il pulsante di avvio, cmdStop è il pulsante di stop e txtFreq è la casella di testo in cui inserire la frequenza).
    Circa la domanda 3, devi ricorrere ad altre API per interfacciarti con la scheda audio per ottenere il risultato che desideri.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41
    MItaly,

    ho immediatamente testato il tuo adattamento...
    Funziona perfettamente !

    Grazie infinite.

    Certo, resta ancora il fatto di indirizzare il suono
    ai box, ma i primi due problemi sono risolti.
    grazie ancora.

    pazienza

  4. #4
    Originariamente inviato da pazienza
    MItaly,

    ho immediatamente testato il tuo adattamento...
    Funziona perfettamente !

    Grazie infinite.
    Non c'è di che.
    Certo, resta ancora il fatto di indirizzare il suono
    ai box, ma i primi due problemi sono risolti.
    Come già detto per ottenere questo effetto devi riscrivere tutto daccapo... le API da usare sono completamente differenti.
    Ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    41
    Io non ho idea alcuna di quali API usare.
    Altrimenti lo avrei fatto già in partenza.

    Se non é troppo lavoro, oserei chiedere
    un altro aiutino.
    Sempre se possibile, ovviamente.

    pazienza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.