Fondere insieme due file WAV
Da Gambas-it.org - Wikipedia.
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;
- il blocco d'intestazione del nuovo file wav ottenuto deve essere corrispondente a quello del file wav avente la maggiore quantità di dati audio fra i due file da fondere.
Di seguito un possibile semplice codice supponendo che i due file wav siano di formato con risoluzione di campionamento a 16bit con segno:
Public Sub Main() Dim fileWAV_1, fileWAV_2, wav1, wav2 As String Dim fl As File Dim ss1, ss2 As Short[] Dim i As Integer fileWav_1 = "/percorso/del/primo/file.wav" fileWAV_2 = "/percorso/del/secondo/file.wav" wav1 = fileWAV_1 wav2 = fileWAV_2 ' Individua la dimensione maggiore tra i due file wav: If Stat(fileWAV_2).Size > Stat(fileWAV_1).Size Then wav1 = fileWAV_2 wav2 = fileWAV_1 Endif ' Assegna a entrambi i vettori di tipo "Short[]" la medesima dimensione di elementi pari a quella maggiore individuata tra i due file wav. ' Apre il 1° file wav e lo carica nel 1° vettore. ' Il vettore "ss1" è sempre quello contenente i dati del file wav di dimensione maggiore fra i due file. fl = Open wav1 For Read ss1 = New Short[Lof(fl) / SizeOf(gb.Short)] ss1.Read(fl, 0, ss1.Count) fl.Close ' Apre il 2° file wav e lo carica nel 2° vettore: fl = Open wav2 For Read ss2 = New Short[ss1.count] ss2.Read(fl, 0, Lof(fl) / SizeOf(gb.Short)) fl.Close For i = 0 To (44 / SizeOf(gb.Short)) To ss1.Max ' Somma le due onde e carica ciascun dato a cominciare dal byte d'indice 44, individuandolo tenuto conto della risoluzione a 16-bit del file wav: ss1[i] = CShort((CInt(ss1[i]) + CInt(ss2[i])) / 2) Next fl = Open "/tmp/nuovo.wav" For Create ' Crea il nuovo file wav: ss1.Write(fl, 0, ss1.Count) fl.Close End