Differenze tra le versioni di "Visualizzare la forma d'onda di un file WAV"
Da Gambas-it.org - Wikipedia.
Riga 10: | Riga 10: | ||
'''Public''' Sub Form_Open() | '''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''' | '''End''' | ||
Riga 34: | Riga 37: | ||
Dim i, ii, r, v As Integer | Dim i, ii, r, v As Integer | ||
− | + | d = InStr(File.Load(fileWAV), "data") | |
− | + | If ini And 1 Then ini += 1 | |
<FONT color=gray>' ''Ci si sposta al byte impostato dei dati audio grezzi:''</font> | <FONT color=gray>' ''Ci si sposta al byte impostato dei dati audio grezzi:''</font> | ||
− | + | 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''' | '''End''' |
Versione delle 17:38, 27 ago 2020
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.