Visualizzare la forma d'onda di un file WAV
Vai alla navigazione
Vai alla ricerca
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 !")
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.