Unire due file WAV: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 1: | Riga 1: | ||
Per unire - l'uno dopo l'altro - due file audio di formato WAV con le sole funzioni di Gambas, bisognerà prestare cura ad almeno i seguenti aspetti: | Per unire - l'uno dopo l'altro - due file audio di formato WAV con le sole funzioni di Gambas, bisognerà prestare cura ad almeno i seguenti aspetti: | ||
* i due file da unire devono avere uguale frequenza di campionamento | * i due file da unire devono avere uguale frequenza e risoluzione di campionamento e uguale numero di canali; | ||
* eliminare l'intero primo blocco | * eliminare l'intero primo blocco d'intestazione (''header'' ), al secondo file che sarà unito alla fine del primo file wav; | ||
* | * impostare i nuovi esatti valori che indicano le dimensioni del nuovo file wav unitario, presenti nei byte n. 4, 5, 6, 7 e nei byte n. 40, 41, 42, 43 del blocco d'intestazione del primo file. | ||
Di seguito un possibile semplice codice: | Di seguito un possibile semplice codice: | ||
| Riga 12: | Riga 11: | ||
Dim d1, d2 As Short | Dim d1, d2 As Short | ||
Dim q1 As Integer | Dim q1 As Integer | ||
fileWAV_1 = "<FONT color=gray>''/percorso/del/primo/file.wav''</font>" | |||
fileWAV_2 = "<FONT color=gray>''/percorso/del/secondo/file.wav''</font>" | |||
fileWAV_finale = "/tmp/finale.wav" | |||
s1 = File.Load(fileWAV_1) | |||
s2 = File.Load(fileWAV_2) | |||
d1 = InStr(s1, "data") | |||
d2 = InStr(s2, "data") | |||
<FONT color=gray>' ''Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav:''</font> | <FONT color=gray>' ''Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav:''</font> | ||
q1 = (Stat(fileWAV_1).Size - (d1 + 7)) + (Stat(fileWAV_2).Size - (d2 + 7)) | |||
<FONT color=gray>' ''Salva il nuovo file WAV unendo al primo file wav il secondo file wav privato del suo header:''</font> | <FONT color=gray>' ''Salva il nuovo file WAV unendo al primo file wav il secondo file wav privato del suo header:''</font> | ||
File.Save(fileWAV_finale, s1 & Right(s2, Len(s2) - (d2 + 7))) | |||
<FONT color=gray>' ''Aggiorna i valori dei byte nn. 4, 5, 6, 7 e 40, 41, 42, 43 del primo file wav con la nuova dimensione del nuovo blocco dati audio grezzi:''</font> | <FONT color=gray>' ''Aggiorna i valori dei byte nn. 4, 5, 6, 7 e 40, 41, 42, 43 del primo file wav con la nuova dimensione del nuovo blocco dati audio grezzi:''</font> | ||
fl = Open fileWAV_finale For Write | |||
Seek #fl, 4 | |||
Write #fl, (q1 + d1 + 7) - 8 As Integer | |||
Seek #fl, (d1 + 3) | |||
Write #fl, q1 As Integer | |||
fl.Close | |||
'''End''' | '''End''' | ||
Versione delle 16:02, 19 set 2022
Per unire - l'uno dopo l'altro - due file audio di formato WAV con le sole funzioni di Gambas, bisognerà prestare cura ad almeno i seguenti aspetti:
- i due file da unire devono avere uguale frequenza e risoluzione di campionamento e uguale numero di canali;
- eliminare l'intero primo blocco d'intestazione (header ), al secondo file che sarà unito alla fine del primo file wav;
- impostare i nuovi esatti valori che indicano le dimensioni del nuovo file wav unitario, presenti nei byte n. 4, 5, 6, 7 e nei byte n. 40, 41, 42, 43 del blocco d'intestazione del primo file.
Di seguito un possibile semplice codice:
Public Sub Main() Dim fileWAV_1, fileWAV_2, s1, s2, fileWAV_finale As String Dim fl As File Dim d1, d2 As Short Dim q1 As Integer fileWAV_1 = "/percorso/del/primo/file.wav" fileWAV_2 = "/percorso/del/secondo/file.wav" fileWAV_finale = "/tmp/finale.wav" s1 = File.Load(fileWAV_1) s2 = File.Load(fileWAV_2) d1 = InStr(s1, "data") d2 = InStr(s2, "data") ' Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav: q1 = (Stat(fileWAV_1).Size - (d1 + 7)) + (Stat(fileWAV_2).Size - (d2 + 7)) ' Salva il nuovo file WAV unendo al primo file wav il secondo file wav privato del suo header: File.Save(fileWAV_finale, s1 & Right(s2, Len(s2) - (d2 + 7))) ' Aggiorna i valori dei byte nn. 4, 5, 6, 7 e 40, 41, 42, 43 del primo file wav con la nuova dimensione del nuovo blocco dati audio grezzi: fl = Open fileWAV_finale For Write Seek #fl, 4 Write #fl, (q1 + d1 + 7) - 8 As Integer Seek #fl, (d1 + 3) Write #fl, q1 As Integer fl.Close End