Fondere insieme due file WAV
Vai alla navigazione
Vai alla ricerca
Per fondere (mischiare) due file audio di formato WAV con le sole funzioni di Gambas, bisognerà prestare cura ad almeno i seguenti aspetti:
- i due file da fondere devono avere uguale frequenza e risoluzione di campionamento ed uguale numero di canali;
- eliminare l'intero primo blocco di intestazione al file avente dimensione inferiore;
- azzerare oppure impostare i nuovi corretti valori che indicano le dimensioni del file wav, presenti nei byte n. 4, 5, 6, 7 e nei byte n. 40, 41, 42, 43 dell'header del file wav finale.
Di seguito un possibile semplice codice supponendo che i due file wav siano a 2 canali e a 16bit:
Public Sub Main()
Dim bb, bb1, bb2 As Byte[]
Dim dati_finali As New Byte[]
Dim k As Byte
Dim i As Integer
Dim caput, file_grande, file_piccolo As String
file_grande = "/percorso/del/file.wav/più/grande/fra/i/due"
file_piccolo = "/percorso/del/file.wav/più/piccolo/fra/i/due"
bb = Byte[].FromString(File.Load(file_grande))
For i = 4 To 7
bb[i] = 0
Next
For i = 40 To 43
bb[i] = 0
Next
bb.Extract(44, bb.Count - 44)
' Creiamo il blocco di intestazione del futuro file wav:
caput = bb.ToString(0, bb.Count)
' Prendiamo i soli dati audio grezzi del file wav di dimensione più grande fra i due:
bb1 = Byte[].FromString(Right(File.Load(file_grande), Len(File.Load(file_grande)) - 44))
' Prendiamo i soli dati audio grezzi del file wav di dimensione inferiore fra i due:
bb2 = Byte[].FromString(Right(File.Load(file_piccolo), Len(File.Load(file_piccolo)) - 44))
For i = 0 To bb1.Max
If i < bb1.Max Then
If i <= bb2.Max Then
dati_finali.Add(bb1[i] + bb2[i])
Else
dati_finali.Add(bb1[i])
Endif
Endif
Next
' Crea il nuovo file wav con i due file originari fusi insieme:
File.Save("/tmp/nuovo.wav", caput & dati_finali.ToString(0, dati_finali.Count))
' Va in chiusura:
bb.Clear
bb1.Clear
bb2.Clear
dati_finali.Clear
End