Estrarre i dati Midi dal file audio AIFF con le sole funzioni di Gambas

Da Gambas-it.org - Wikipedia.

Il formato AIFF (Audio Interchange File Format) è utilizzato per immagazzinare dati audio secondo il metodo di rappresentazione digitale Pulse-Code Modulation (PCM).

Tale formato, oltre ai predetti file audio PCM, consente di immagazzinare dati MIDI in un apposito blocco (MIDI Data Chunk), indivduato all'interno del file con il tag "MIDI". Tale blocco di dati è opzionale, e pertanto non è necessariamente presente all'interno del file aiff.

Lo scopo principale del MIDI Data Chunk è quello di memorizzare i messaggi Midi System Exclusive; però possono essere memorizzati in questo Blocco anche altri tipi di dati Midi.

Mostriamo di seguito un possibile codice per estrarre i dati Midi contenuti nel MIDI Data Chunk:

Public Sub Main()

 Dim aiff, s As String
 Dim bb As Byte[]
 Dim fl As File
 Dim i, q As Integer

 aiff = "/percorso/del/file.aiff"

 s = File.Load(aiff)
 If s[8, 4] <> "AIFF" Then Error.Raise("Il file caricato non è un file formato AIFF !")
 Print "File audio AIFF: "; aiff
 Print "Dimensione:      "; s.Len; " byte"

' Verifica se il file AIFF caricato contiene il blocco dati "MIDI Data Chunk":
 i = InStr(s, "MIDI")
 If i == 0 Then Error.Raise("Il file non contiene il blocco dati «MIDI Data Chunk» !")
 Print "\nBlocco Midi in offset:     "; i

 bb = New Byte[4]

 fl = Open aiff For Read

' Legge la dimensione dei dati Midi contenuti nel "MIDI Data Chunk":
 Seek #fl, i + 3
 bb.Read(fl, 0, 4)
 q = bb[3]
 q += bb[2] * 256       '     &0100
 q += bb[1] * 65536     '   &010000
 q += bb[0] * 16777216  ' &01000000
 bb.Clear
 Print "Quantità dati Blocco Midi: "; q; " byte"

' Legge i dati Midi contenuti nel "MIDI Data Chunk":
 Seek #fl, i + 7
 bb = New Byte[q]
 bb.Read(fl, 0, q)

 fl.Close

' I dati midi letti dal "MIDI Data Chunk" possono essere salvati in un file:
 File.Save("/percorso/del/file/contenente i/dati_Midi", bb.ToString(0, bb.Count))

End


Riferimenti