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 1: | Riga 1: | ||
− | Il formato AIFF (''Audio Interchange File Format'') è utilizzato per immagazzinare dati audio secondo il metodo di rappresentazione digitale Pulse- | + | 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. | + | Tale formato, oltre ai predetti file audio ''PCM'', consente di immagazzinare dati [https://it.wikipedia.org/wiki/Musical_Instrument_Digital_Interface MIDI] in un apposito blocco (''MIDI Data Chunk''). Tale blocco di dati è <SPAN Style="text-decoration:underline">opzionale</span>, 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. | 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. | ||
Riga 14: | Riga 14: | ||
aiff = "<FONT Color=gray>''/percorso/del/file.aiff''</font>" | aiff = "<FONT Color=gray>''/percorso/del/file.aiff''</font>" | ||
− | Print "File audio AIFF: " | + | Print "File audio AIFF: "; aiff |
− | + | ||
s = File.Load(aiff) | s = File.Load(aiff) | ||
− | + | ||
+ | <FONT Color=gray>' ''<SPAN Style="text-decoration:underline">Verifica se il file AIFF caricato contiene dati Midi nel "MIDI Data Chunk"</span>:''</font> | ||
i = InStr(s, "MIDI") | i = InStr(s, "MIDI") | ||
If i == 0 Then Error.Raise("Il file non contiene un blocco di dati Midi !") | If i == 0 Then Error.Raise("Il file non contiene un blocco di dati Midi !") |
Versione delle 09:59, 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 dati MIDI 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: "; aiff
s = File.Load(aiff)
' Verifica se il file AIFF caricato contiene dati Midi nel "MIDI Data Chunk":
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