|
|
(9 versioni intermedie di uno stesso utente non sono mostrate) |
Riga 1: |
Riga 1: |
− | 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.
| + | #REDIRECT [[Creare il blocco d'intestazione di un file WAV avendo dati audio grezzi]] |
− | | |
− | 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.
| |
− | <BR>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 avente le seguenti caratteristiche: 44100 hertz, 16 bit, 2 canali. Si creerà un completo nuovo file WAV unendo il corretto blocco d'intestazione (''header'') a tali dati grezzi.
| |
− | <BR>Il procedimento del codice mostra l'inserimento passo-passo di ciascun elemento previsto dal blocco header del file wav. Gli elementi non fondamentali verranno per lo più ricavati dai valori degli elementi fondamenti prima sopra elencati.
| |
− | '''Private''' Procedure CreaHeaderWav(<FONT Color=#B22222>dati_grezzi</font> As String)
| |
− |
| |
− | Dim fl As File
| |
− | Dim ini As String
| |
− | Dim bh, bb As New Byte[]
| |
− | Dim canali, risoluzione, blal as Byte
| |
− | Dim i, i2, frequenza, brps As Integer
| |
− |
| |
− | <FONT color=gray>' ''Vengono definiti gli elementi fondamentali del blocco d'intestazione del file wav:'' </font>
| |
− | canali = 2
| |
− | frequenza = 44100
| |
− | risoluzione = 16
| |
− |
| |
− | fl = Open "''/percorso/di/destinazione/del/nuovo/file.wav''" For Create
| |
− |
| |
− | ini = "RIFF"
| |
− |
| |
− | bb = Byte[].FromString(ini)
| |
− |
| |
− | i = Len(<FONT Color=#B22222>dati_grezzi</font>)
| |
− |
| |
− | i2 = i + 36
| |
− |
| |
− | <FONT color=gray>' ''Imposta il valore dimensionale di 4 byte a partire dal 5° byte del futuro file:'' </font>
| |
− | 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))
| |
− |
| |
− | <FONT color=gray>' ''Vengono aggiunti: il tipo di formato di file e l'identificativo del formato del blocco dei dati audio:'' </font>
| |
− | bb = bb.Insert(bh.FromString("WAVEfmt "))
| |
− | bh.Clear
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il valore della lunghezza dei dati del formato (in questo caso il PCM):'' </font>
| |
− | bh = [&10, &00, &00, &00]
| |
− | bb = bb.Insert(bh)
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il valore del formato audio (1 = PCM):''</font>
| |
− | bb = bb.Insert(bh.FromString(Chr(&01) & Chr(&00)))
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il numero dei canali di uscita:''</font>
| |
− | bb = bb.Insert(bh.FromString(Chr(canali) & Chr(&00)))
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il valore della frequenza di campionamento:''</font>
| |
− | bb.Add(frequenza And &FF)
| |
− | bb.Add(Shr(frequenza And &FF00&, 8))
| |
− | bb.Add(Shr(frequenza And &FF0000&, 16))
| |
− | bb.Add(Shr(frequenza And &FF000000&, 24))
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il valore del "Byte rate per secondo":''</font>
| |
− | brps = frequenza * canali * (risoluzione / 8)
| |
− | bb.Add(brps And &FF)
| |
− | bb.Add(Shr(brps And &FF00&, 8))
| |
− | bb.Add(Shr(brps And &FF0000&, 16))
| |
− | bb.Add(Shr(brps And &FF000000&, 24))
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il valore del "Block Align":''</font>
| |
− | blal = canali * risoluzione / 8
| |
− | bb = bb.Insert(bh.FromString(Chr(blal) & Chr(&00)))
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto il valore della risoluzione di campionamento:''</font>
| |
− | bb = bb.Insert(bh.FromString(Chr(risoluzione) & Chr(&00)))
| |
− |
| |
− | <FONT color=gray>' ''Viene aggiunto l'identificativo del Blocco dei dati audio grezzi:''</font>
| |
− | bb = bb.Insert(bh.FromString("data"))
| |
− |
| |
− | <FONT color=gray>' ''Imposta il valore dimensionale di 4 byte a partire dal 41° byte del futuro file''
| |
− | ' ''e relativo alla dimensione dei dati audio grezzi:'' </font>
| |
− | 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))
| |
− |
| |
− | <FONT color=gray>' ''Crea il nuovo file wav:'' </font>
| |
− | bb.Write(fl, 0, bb.Count)
| |
− |
| |
− | fl.Close
| |
− |
| |
− | '''End'''
| |
− | | |
− | | |
− | | |
− | | |
− | =Riferimenti=
| |
− | * http://www.topherlee.com/software/pcm-tut-wavformat.html
| |
− | * http://unusedino.de/ec64/technical/formats/wav.html
| |