Fondere insieme due file WAV
Da Gambas-it.org - Wikipedia.
Versione del 22 gen 2014 alle 13:58 di Vuott (Discussione | contributi)
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 - 4 Then If i <= bb2.Max - 4 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