Visualizzare la forma d'onda di un file WAV

Da Gambas-it.org - Wikipedia.

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. Porremo inoltre sul Form una DrawingArea:

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 è inestinte !")
 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 9999
   
   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, 400)
     .RelLineTo(0, ii * 0.5)
     .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.