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>"
+
  aiff = "<FONT Color=gray>''/percorso/del/file.aiff''</font>"
  Print "File audio AIFF: ", Null, aiff
+
  Print "File audio AIFF: ", Null, aiff
 
      
 
      
  s = File.Load(aiff)
+
  s = File.Load(aiff)
 
      
 
      
  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 !")
 
      
 
      
  bb = New Byte[4]
+
  bb = New Byte[4]
 
   
 
   
  fl = Open aiff For Read
+
  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
+
  Seek #fl, i + 3
  bb.Read(fl, 0, 4)
+
  bb.Read(fl, 0, 4)
  q = bb[3]
+
  q = bb[3]
  q += bb[2] * 256      <FONT Color=gray>' ''&0100''</font>
+
  q += bb[2] * 256      <FONT Color=gray>'     ''&0100''</font>
  q += bb[1] * 65536    <FONT Color=gray>' ''&010000''</font>
+
  q += bb[1] * 65536    <FONT Color=gray>'   ''&010000''</font>
  q += bb[0] * 16777216  <FONT Color=gray>' ''&01000000''</font>
+
  q += bb[0] * 16777216  <FONT Color=gray>' ''&01000000''</font>
  bb.Clear
+
  bb.Clear
  Print "Quantità dati Blocco Midi: ", Null; q; " byte"
+
  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
+
  Seek #fl, i + 7
  With bb = New Byte[q]
+
  bb = New Byte[q]
    .Read(fl, 0, q)
+
  bb.Read(fl, 0, q)
  End With
 
 
      
 
      
  fl.Close
+
  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))
+
  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