Fondere insieme due file WAV: differenze tra le versioni
Vai alla navigazione
Vai alla ricerca
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
| Riga 3: | Riga 3: | ||
* i due file da fondere devono avere uguale frequenza e risoluzione di campionamento ed uguale numero di canali; | * 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; | * 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 | * 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. | ||
Versione delle 20:25, 18 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:
Public Sub Main()
Dim bb, bb1, bb2 As Byte[]
Dim dati_finali As New Byte[]
Dim i, k 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 Step 8 ' se si pone 4, si dividono stereofonicamente i due audio
If i < bb1.Max - 4 Then ' se si pone 2, si dividono stereofonicamente i due audio
For k = 0 To 3
dati_finali.Add(bb1[i + k])
Next
Endif
If i < bb2.Max - 4 Then ' se si pone 2, si dividono stereofonicamente i due audio
For k = 0 To 3
dati_finali.Add(bb2[i + k])
Next
Else
For k = 0 To 3
dati_finali.Add(0)
Next
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