Differenze tra le versioni di "Creare il blocco d'intestazione di un file WAV"

Da Gambas-it.org - Wikipedia.
Riga 9: Riga 9:
  
  
Nell'esempio che segue, supporremo che i dati audio grezzi, passati alla ''Procedura'' mediante una variabile di tipo ''Stringa'' come argomento, siano stati acquisiti in precedenza, e che si dovrà creare un completo nuovo file WAV unendo il corretto blocco d'intestazione (''header'') a tali dati grezzi.
+
Nell'esempio che segue, supporremo che i dati audio grezzi, passati alla ''Procedura'' mediante una variabile di tipo ''Stringa'' come argomento, siano stati acquisiti in precedenza da un file con le seguenti caratteristiche: 44100 hertz, 16 bit, 2 canali, e che si dovrà creare un completo nuovo file WAV unendo il corretto blocco d'intestazione (''header'') a tali dati grezzi.
  '''Public''' Procedure CreaHeaderWav(dati_grezzi As String)
+
  '''Private''' Procedure CreaHeaderWav(dati_grezzi As String)
 
   
 
   
 
   Dim fl As File
 
   Dim fl As File
   Dim ini As String = "RIFF"
+
   Dim ini As String
 
   Dim bh As Byte[] = [&57, &41, &56, &45, &66, &6D, &74, &20, &10, &00, &00, &00, &01, &00, &02, &00,
 
   Dim bh As Byte[] = [&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]
 
                       &44, &AC, &00, &00, &10, &B1, &02, &00, &04, &00, &10, &00, &64, &61, &74, &61]
Riga 21: Riga 21:
 
   
 
   
 
   fl = Open "''/percorso/di/destinazione/del/nuovo/file.wav''" For Create
 
   fl = Open "''/percorso/di/destinazione/del/nuovo/file.wav''" For Create
 +
 +
  ini = "RIFF"
 
   
 
   
 
   bb = Byte[].FromString(ini)
 
   bb = Byte[].FromString(ini)

Versione delle 10:06, 19 mag 2015

Il blocco di intestazione (header) di un file WAV è posto all'inizio del file, solitamente formato da 44 byte, e contiene le informazioni generali sui dati audio e sul file medesimo.

Per poter creare un blocco d'inteztazione di un file wav, è necessario tenere conto dei suoi elementi fondamentali:

  • quantità dei dati audio grezzi (in byte);
  • frequenza di campionamento (in hertz);
  • risoluzione di campionamento (in bit);
  • numero dei canali di uscita.


Da questi elementi principali è possibile individuare e quindi porre nel blocco di intestazione del file wav anche gli altri valori che lo compongono.


Nell'esempio che segue, supporremo che i dati audio grezzi, passati alla Procedura mediante una variabile di tipo Stringa come argomento, siano stati acquisiti in precedenza da un file con le seguenti caratteristiche: 44100 hertz, 16 bit, 2 canali, e che si dovrà creare un completo nuovo file WAV unendo il corretto blocco d'intestazione (header) a tali dati grezzi.

Private Procedure CreaHeaderWav(dati_grezzi As String)

 Dim fl As File
 Dim ini As String
 Dim bh As Byte[] = [&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]
 Dim bb As New Byte[]
 Dim i, i2 As Integer


  fl = Open "/percorso/di/destinazione/del/nuovo/file.wav" For Create

  ini = "RIFF"

  bb = Byte[].FromString(ini)

  i = Len(dati_grezzi)

  i2 = i + 36

' Imposta il valore dimensionale di 4 byte a partire dal 5° byte del futuro file: 
  bb.Add(i2 And &FF)
  bb.Add(Shr(i2 And &FF00&, 8))
  bb.Add(Shr(i2 And &FF0000&, 16))
  bb.Add(Shr(i2 And &FF000000&, 24))


  bb = bb.Insert(bh)

' Imposta il valore dimensionale di 4 byte a partire dal 41° byte del futuro file
' e relativo alla dimensione dei dati audio grezzi: 
  bb.Add(i And &FF)
  bb.Add(Shr(i And &FF00&, 8))
  bb.Add(Shr(i And &FF0000&, 16))
  bb.Add(Shr(i And &FF000000&, 24))
   
  bb = bb.Insert(Byte[].FromString(dati_grezzi))
   
' Crea il nuovo file wav: 
  bb.Write(fl, 0, bb.Count)

  fl.Close

End