Convertire un file audio AIFF in WAV con le sole risorse 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). Pertanto, essi non sono compressi. Questa circostanza ci permette di creare un file WAV mediante i dati audio del file di formato AIFF di origine.


Mostriamo un esempio, nel quale si presumerà che il file AIFF di origine abbia le seguenti caratteristiche: frequenza di campionamento hz 44100, risoluzione campionamento 16 bit, numero canali di uscita audio 2. |1|

Public Sub Main()

 Dim fl As File
 Dim s As Short
 Dim i, iniz As Integer
 Dim bb As Byte[]
 Dim bh As Byte[] = [&52, &49, &46, &46, &00, &00, &00, &00, &57, &41, &56, &45, &66, &6D, &74, &20, &10, &00, &00, &00, &01, &00, &02, &00,
                    &44, &AC, &00, &00, &10, &B1, &02, &00, &04, &00, &10, &00, &64, &61, &74, &61]
 
  fl = Open "/percorso/del/file.aiff" For Read


' Legge dal file AIFF
 
' Individua con precisione i byte relativi alla dimensione del blocco dei dati audio (Sound Data Chunk):
  With bb = New Byte[1000]
    .Read(fl, 0, 1000)
    s = InStr(.ToString(0, 1000), "SSND")
  End With
  bb.Clear
 
' Legge la dimensione del blocco dei dati audio (Sound Data Chunk):
  bb = New Byte[4]
  Seek #fl, s + 3
  bb.Read(fl, 0, 4)
  i = bb[3]
  i += bb[2] * 256      ' &0100
  i += bb[1] * 65536    ' &010000
  i += bb[0] * 16777216 ' &01000000
  bb.Clear

' Legge tutti i dati audio grezzi presenti nel blocco dei dati audio (Sound Data Chunk):
  Seek #fl, 47
  With bb = New Byte[i]
    .Read(fl, 0, i)
  End With
 
  fl.Close
   

' Creazione del file WAV

' Scrive i byte di indice 4, 5, 6, 7 del blocco comune di intestazione del file wav:
  iniz = i + 36
  bh[4] = iniz And &FF  
  bh[5] = Shr(iniz And &FF00&, 8)
  bh[6] = Shr(iniz And &FF0000&, 16)
  bh[7] = Shr(iniz And &FF000000&, 24)
  
' Scrive i byte di indice 40, 41, 42, 43 del blocco comune di intestazione del file wav:
  bh.Add(i And &FF)
  bh.Add(Shr(i And &FF00&, 8))
  bh.Add(Shr(i And &FF0000&, 16))
  bh.Add(Shr(i And &FF000000&, 24))
 

  File.save("/percorso/ove/verrà/salvato/il/file.wav", bh.ToString(0, bh.Count) & bb.ToString(0, bb.Count))
 
End



Note

[1] Ad ogni modo è possibile estrarre le caratteristiche principali audio di un file di formato AIFF, come mostrato nella seguente pagina.


Riferimenti