Differenze tra le versioni di "Estrarre i dati Midi dal file audio AIFF con le sole funzioni di Gambas"
Da Gambas-it.org - Wikipedia.
Riga 4: | Riga 4: | ||
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. | 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'': | Mostriamo di seguito un possibile codice per estrarre i dati Midi contenuti nel ''MIDI Data Chunk'': | ||
Riga 14: | Riga 13: | ||
Dim i, q As Integer | Dim i, q As Integer | ||
− | + | aiff = "<FONT Color=gray>''/percorso/del/file.aiff''</font>" | |
− | + | Print "File audio AIFF: ", Null, aiff | |
− | + | s = File.Load(aiff) | |
− | + | i = InStr(s, "MIDI") | |
− | + | If i == 0 Then Error.Raise("Il file non contiene un blocco di dati Midi !") | |
− | + | bb = New Byte[4] | |
− | + | fl = Open aiff For Read | |
<FONT Color=gray>' ''Legge la dimensione dei dati Midi contenuti nel "MIDI Data Chunk":''</font> | <FONT Color=gray>' ''Legge la dimensione dei dati Midi contenuti nel "MIDI Data Chunk":''</font> | ||
− | + | Seek #fl, i + 3 | |
− | + | bb.Read(fl, 0, 4) | |
− | + | q = bb[3] | |
− | + | q += bb[2] * 256 <FONT Color=gray>' ''&0100''</font> | |
− | + | q += bb[1] * 65536 <FONT Color=gray>' ''&010000''</font> | |
− | + | q += bb[0] * 16777216 <FONT Color=gray>' ''&01000000''</font> | |
− | + | bb.Clear | |
− | + | Print "Quantità dati Blocco Midi: ", Null; q; " byte" | |
<FONT Color=gray>' ''Legge i dati Midi contenuti nel "MIDI Data Chunk":''</font> | <FONT Color=gray>' ''Legge i dati Midi contenuti nel "MIDI Data Chunk":''</font> | ||
− | + | Seek #fl, i + 7 | |
− | + | bb = New Byte[q] | |
− | + | bb.Read(fl, 0, q) | |
− | |||
− | + | fl.Close | |
<FONT Color=gray>' ''I dati midi letti dal "MIDI Data Chunk" possono essere salvati in un file:''</font> | <FONT Color=gray>' ''I dati midi letti dal "MIDI Data Chunk" possono essere salvati in un file:''</font> | ||
− | + | File.Save("<FONT Color=gray>''/percorso/del/file/contenente i/dati_Midi''</font>", bb.ToString(0, bb.Count)) | |
− | + | ||
'''End''' | '''End''' | ||
− | |||
Versione delle 09:42, 22 set 2022
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 in un apposito blocco (MIDI Data Chunk). 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" Print "File audio AIFF: ", Null, aiff s = File.Load(aiff) i = InStr(s, "MIDI") If i == 0 Then Error.Raise("Il file non contiene un blocco di dati Midi !") 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: ", Null; 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
- http://it.wikipedia.org/wiki/AIFF
- http://muratnkonar.com/aiff/index.html
- http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html
- http://paulbourke.net/dataformats/audio/
- http://multimedia.cx/mirror/AudioIFF1_2_1.htm
- http://web.archive.org/web/20071219035740/http://www.cnpbagwell.com/aiff-c.txt
- http://sox.sourceforge.net/AudioFormats-11.html#ss11.1