Fondere insieme due file WAV: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 40: | Riga 40: | ||
For i = 0 To bb1.Max | For i = 0 To bb1.Max | ||
If i < bb1.Max - 4 Then | 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 | Next | ||
Versione delle 13:58, 22 gen 2014
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