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 53: Riga 53:
  
 
=Riferimenti=
 
=Riferimenti=
* http://it.wikipedia.org/wiki/AIFF
+
* http://it.wikipedia.org/wiki/AIFF
 
* http://muratnkonar.com/aiff/index.html
 
* http://muratnkonar.com/aiff/index.html
 +
* http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html
 
* http://paulbourke.net/dataformats/audio/
 
* 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

Versione delle 08:28, 6 set 2020

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
  With bb = New Byte[q]
    .Read(fl, 0, q)
  End With
   
  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