Differenze tra le versioni di "Fondere insieme due file WAV"

Da Gambas-it.org - Wikipedia.
Riga 2: Riga 2:
  
 
* i due file da unire devono avere uguale frequenza e risoluzione di campionamento ed uguale numero di canali;
 
* i due file da unire devono avere uguale frequenza e risoluzione di campionamento ed uguale numero di canali;
* eliminare l'intero primo blocco, ossia l'header, al secondo file che sarà unito alla fine del primo file wav;
+
* 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 primo file.
 
* 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 primo file.
  

Versione delle 20:24, 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 unire 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 primo file.


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