Visualizzare la forma d'onda di un file WAV
Da Gambas-it.org - Wikipedia.
Versione del 28 ago 2020 alle 00:34 di Vuott (Discussione | contributi)
E' possibile visualizzare, seppur in modo approssimativo, con le sole funzioni di Gambas la forma d'onda di un file audio WAV.
Nell'esempio che segue si supporrà che il file sia a due canali e a 16bit, ma sarà mostrata l'onda di un solo canale.
Porremo inoltre sul Form una DrawingArea.
Private Const ZOOM As Short = 256 ' Imposta lo zoom visivo dell'onda disegnata Private fl As File Private fileWAV As String Private ini As Integer Public Sub Form_Open() With Me .W = Desktop.W .H = Desktop.H End With With DrawingArea1 .W = Desktop.W .H = Desktop.H End With fileWAV = "/percorso/del/file.wav" If InStr(fileWAV, "RIFF") == 0 Then Message.Error("Il file caricato non è un file 'WAV' o è inesistente !") Me.Close Endif fl = Open fileWAV For Read ini = Val(InputBox("Inserire il byte iniziale:")) End Public Sub DrawingArea1_Draw() Dim d, sh As Short Dim i, ii, r, v As Integer d = InStr(File.Load(fileWAV), "data") If ini And 1 Then ini += 1 ' Ci si sposta al byte impostato dei dati audio grezzi: Seek #fl, ini + (d + 7) For i = 0 To 99999 Seek #fl, Seek(fl) + SizeOf(gb.Short) Read #fl, sh If sh = 0 Then ii = 1 If sh < 0 Then ii = sh / 10 If sh > 0 Then ii = sh / 10 If sh > 0 Then v = ii r = 1 Else v = 1 r = ii Endif With Paint .Begin(DrawingArea1) .Brush = Paint.Color(Color.RGB(r, v, 0)) .MoveTo(i / ZOOM, DrawingArea1.H / 2) .RelLineTo(0, ii * 0.3) .Stroke .End End With Next Print "\nLetti in totale "; Seek(fl); " byte" End
Invece, per ottenere un risultato più preciso e soddisfcente, gli iscritti al forum www.gambas-it.org possono scaricare in questa discussione il sorgente di un programma molto più complesso che fa uso delle risorse esterne della libreria di sndfile e di Cairo.