Differenze tra le versioni di "Unire due file WAV"

Da Gambas-it.org - Wikipedia.
 
(5 versioni intermedie di uno stesso utente non sono mostrate)
Riga 1: Riga 1:
 
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:
 
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;
+
* i due file da unire devono avere uguale frequenza e risoluzione di campionamento e uguale numero di canali;
* eliminare l'intero primo blocco, ossia l'<I>header</i>, al secondo file che sarà unito alla fine del primo file wav;
+
* eliminare l'intero blocco d'intestazione (''header'' ) del secondo file, ossia del file wav che sarà unito dopo (alla fine) del primo file wav;
* azzerare oppure, più correttamente, impostare i nuovi esatti 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'<I>header</i> del primo file.
+
* impostare i nuovi esatti valori che indicano le dimensioni del nuovo file wav unitario, presenti nei byte n. 4, 5, 6, 7 e nei byte n. 40, 41, 42, 43 del blocco d'intestazione del primo file.
 
 
  
 
Di seguito un possibile semplice codice:
 
Di seguito un possibile semplice codice:
  '''Public''' Sub Main()
+
  Public Sub Main()
 
   
 
   
 
   Dim fileWAV_1, fileWAV_2, s1, s2, fileWAV_finale As String
 
   Dim fileWAV_1, fileWAV_2, s1, s2, fileWAV_finale As String
Riga 12: Riga 11:
 
   Dim d1, d2 As Short
 
   Dim d1, d2 As Short
 
   Dim q1 As Integer
 
   Dim q1 As Integer
 +
 +
  fileWAV_1 = "<FONT color=darkgreen>''/percorso/del/'''primo'''/file.wav''</font>"
 +
  fileWAV_2 = "<FONT color=darkgreen>''/percorso/del/'''secondo'''/file.wav''</font>"
 +
  fileWAV_finale = "/tmp/finale.wav"
 
    
 
    
  fileWAV_1 = "''/percorso/del/primo/file.wav''"
+
  s1 = File.Load(fileWAV_1)
  fileWAV_2 = "''/percorso/del/secondo/file.wav''"
+
  s2 = File.Load(fileWAV_2)
  fileWAV_finale = "/tmp/finale.wav"
+
 +
  d1 = InStr(s1, "data")
 +
  d2 = InStr(s2, "data")
 +
   
 +
<FONT color=gray>' ''Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav:''</font>
 +
  q1 = (Stat(fileWAV_1).Size - (d1 + 7)) + (Stat(fileWAV_2).Size - (d2 + 7))
 +
 +
<FONT color=gray>' ''Salva 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) - (d2 + 7)))
 
   
 
   
 +
<FONT color=gray>' ''Aggiorna 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:''</font>
 +
  fl = Open fileWAV_finale For Write
 
   
 
   
  s1 = File.Load(fileWAV_1)
+
  Seek #fl, 4
  s2 = File.Load(fileWAV_2)
+
   Write #fl, (q1 + d1 + 7) - 8 As Integer
    
+
  Seek #fl, (d1 + 3)
  d1 = InStr(s1, "data")
+
  Write #fl, q1 As Integer
  d2 = InStr(s2, "data")
 
 
 
 
 
<FONT color=gray>' ''Individua e somma le dimensioni dei dati grezzi audio di ciascun file wav:''</font>
 
  q1 = (Stat(fileWAV_1).Size - (d1 + 7)) + (Stat(fileWAV_2).Size - (d2 + 7))
 
 
   
 
   
<FONT color=gray>' ''Salviamo il nuovo file WAV unendo al primo file wav il secondo file wav privato del suo header:''</font>
+
   fl.Close
  File.Save(fileWAV_finale, s1 & Right(s2, Len(s2) - (d2 + 7)))
 
    
 
<FONT color=gray>' ''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:''</font>
 
  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'''
+
  End

Versione attuale delle 13:55, 18 giu 2024

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 e risoluzione di campionamento e uguale numero di canali;
  • eliminare l'intero blocco d'intestazione (header ) del secondo file, ossia del file wav che sarà unito dopo (alla fine) del primo file wav;
  • impostare i nuovi esatti valori che indicano le dimensioni del nuovo file wav unitario, presenti nei byte n. 4, 5, 6, 7 e nei byte n. 40, 41, 42, 43 del blocco d'intestazione 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))

' Salva 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) - (d2 + 7)))

' Aggiorna 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