Differenze tra le versioni di "Unire due file WAV"

Da Gambas-it.org - Wikipedia.
Riga 8: Riga 8:
 
  '''Public''' Sub Main()
 
  '''Public''' Sub Main()
 
   
 
   
   Dim s1, s2, nuovoHeader As String
+
   Dim fileWAV_1, fileWAV_2, s1, s2, fileWAV_finale As String
 +
  Dim fl As File
 +
  Dim d1, d2 As Short
 +
  Dim q1 As Integer
 
    
 
    
   s1 = File.Load("''/percorso/del/primo/file.wav''")
+
   fileWAV_1 = "''/percorso/del/primo/file.wav''"
 +
  fileWAV_2 = "''/percorso/del/secondo/file.wav''"
 +
  fileWAV_finale = "/tmp/finale.wav"
 
   
 
   
   s2 = File.Load("''/percorso/del/secondo/file.wav''")
+
 +
  s1 = File.Load(fileWAV_1)
 +
   s2 = File.Load(fileWAV_2)
 +
 
 +
  d1 = InStr(s1, "data")
 +
  d2 = InStr(s2, "data")
 +
 
 
    
 
    
  <FONT color=gray>' ''Semplicemente azzeriamo i valori dei byte n. 4, 5, 6 e 7 del primo file wav''</font>
+
  <FONT color=gray>' ''Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav:''</font>
   nuovoHeader = Left(s1, 4)
+
  q1 = (Stat(fileWAV_1).Size - (d1 + 7)) + (Stat(fileWAV_2).Size - (d2 + 7))
  nuovoHeader &= String$(4, Chr(0))
+
 +
<FONT color=gray>' ''Salviamo il nuovo file WAV unendo al primo file wav il secondo file wav privato del suo header:''</font>
 +
   File.Save(fileWAV_finale, s1 & Right(s2, Len(s2) - 44))
 
    
 
    
  <FONT color=gray>' ''Semplicemente inseriamo nel primo file wav i valori uguali a zero nei byte n. 40, 41, 42, 43 al posto dei precedenti:''</font>
+
  <FONT color=gray>' ''Aggiorniamo i valori dei byte nn. 4, 5, 6, 7 e 40, 41, 42, 43''
   nuovoHeader &= Mid(s1, 9, 32) 
+
' ''del primo file wav con la nuova dimensione del nuovo blocco dati audio grezzi:''</font>
  nuovoHeader &= String$(4, Chr(0))
+
   fl = Open fileWAV_finale For Write
 
    
 
    
 +
  Seek #fl, 4
 +
  Write #fl, (q1 + d1 + 7) - 8 As Integer
 +
  Seek #fl, (d1 + 3)
 +
  Write #fl, q1 As Integer
 
    
 
    
<FONT color=gray>' ''Salviamo il nuovo file WAV unendo al primo file wav, come modificato, il secondo file wav privato del suo ''header'':''</font>
+
   fl.Close
   File.Save("/tmp/nuovo.wav", nuovoHeader & Right(s1, Len(s1) - 44) & Right(s2, Len(s2) - 44))
 
 
   
 
   
 
  '''End'''
 
  '''End'''

Versione delle 06:42, 28 gen 2014

Per unire - l'uno dopo l'altro - 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 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;
  • 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 fileWAV_1, fileWAV_2, s1, s2, fileWAV_finale As String
 Dim fl As File
 Dim d1, d2 As Short
 Dim q1 As Integer
 
  fileWAV_1 = "/percorso/del/primo/file.wav"
  fileWAV_2 = "/percorso/del/secondo/file.wav"
  fileWAV_finale = "/tmp/finale.wav"


  s1 = File.Load(fileWAV_1)
  s2 = File.Load(fileWAV_2)
 
  d1 = InStr(s1, "data")
  d2 = InStr(s2, "data")
  
  
' Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav:
  q1 = (Stat(fileWAV_1).Size - (d1 + 7)) + (Stat(fileWAV_2).Size - (d2 + 7))

' Salviamo il nuovo file WAV unendo al primo file wav il secondo file wav privato del suo header:
  File.Save(fileWAV_finale, s1 & Right(s2, Len(s2) - 44))
 
' Aggiorniamo i valori dei byte nn. 4, 5, 6, 7 e 40, 41, 42, 43
' del primo file wav con la nuova dimensione del nuovo blocco dati audio grezzi:
  fl = Open fileWAV_finale For Write
 
  Seek #fl, 4
  Write #fl, (q1 + d1 + 7) - 8 As Integer
  Seek #fl, (d1 + 3)
  Write #fl, q1 As Integer
 
  fl.Close

End