Differenze tra le versioni di "Calcolare la durata di un file audio WAV"

Da Gambas-it.org - Wikipedia.
 
(13 versioni intermedie di uno stesso utente non sono mostrate)
Riga 3: Riga 3:
 
(per motivi tecnici i CD vengono campionati con fc = 44000Hz = 44KHz).
 
(per motivi tecnici i CD vengono campionati con fc = 44000Hz = 44KHz).
  
Se ad ogni campione associamo ''n'' <FONT color=#B22222>bit</font>, allora abbiamo il "''<FONT color=#B22222>bit</font>-rate''" ("[http://it.wikipedia.org/wiki/Velocit%C3%A0_di_trasmissione Velocità di trasmissione]"), che è dato dal prodotto della frequenza di campionamento per la risoluzione del campionamento per il numero dei canali di uscita:
+
Se ad ogni campione associamo ''n'' <FONT color=#B22222>bit</font>, allora abbiamo il "''<FONT color=#B22222>bit</font>-rate'' " ("[http://it.wikipedia.org/wiki/Velocit%C3%A0_di_trasmissione Velocità di trasmissione]"), che è dato dal prodotto della frequenza di campionamento per la risoluzione del campionamento per il numero dei canali di uscita:
  Br = fc * nbit * canali
+
  bit-rate = fc * bit * canali
(nei CD: 16 bit =>  Br = 44000 * 16<FONT color=#B22222>bit</font>/secondo * canali)
+
(nei CD: 16 bit =>  bit-rate = 44000 * 16<FONT color=#B22222>bit</font>/secondo * canali)
  
Quindi se il brano è, ad esempio, mono a 16 bit campionato con frequenza ''fc'' e dura ''T'' secondi, significa che un lettore CD legge nell'unità di tempo un numero di <FONT color=#B22222>bit</font> pari a:
+
Se si vuole esprimere il valore in '''Byte'''-rate, allora si dovrà effettuare la seguente divisione:
  numero di <FONT color=#B22222>bit</font> del brano = T * Br
+
Byte-rate = bit-rate / 8
 +
 
 +
Quindi se il brano è, ad esempio, campionato con frequenza 44100, con risoluzione a 16-bit e 2 canali (stereo), avremo il bit-rate:
 +
bit-rate = 44100 * 16 * 2
 +
e se il brano dura ''T'' secondi, allora significa che è stato letto nell'unità di tempo un numero di <FONT color=#B22222>bit</font> pari a:
 +
  numero di <FONT color=#B22222>bit</font> del brano = bit-rate * T
  
  
 
===Conoscere la durata in secondi di un brano audio===
 
===Conoscere la durata in secondi di un brano audio===
 
Se conosciamo la dimensione in <FONT color=#B22222>bit</font> del brano (''<FONT color=#B22222>bit</font>_letti''), e vogliamo conoscere la durata in <SPAN style="text-decoration:underline">secondi</span> del brano, si usa la formula inversa:
 
Se conosciamo la dimensione in <FONT color=#B22222>bit</font> del brano (''<FONT color=#B22222>bit</font>_letti''), e vogliamo conoscere la durata in <SPAN style="text-decoration:underline">secondi</span> del brano, si usa la formula inversa:
  sia se ''mono'' che ''stereo'':  Tsec = <FONT color=#B22222>bit</font>_letti / Br
+
  sia se ''mono'' che ''stereo'':  Tsec = <FONT color=#B22222>bit</font>_letti / bit-rate
e non resta che calcolare Br in base ai dati disponibili del brano (mono o stereo, frequenza di campionamento, risoluzione di campionamento).
+
e non resta che calcolare il ''bit-rate'' in base ai dati disponibili del brano (mono o stereo, frequenza di campionamento, risoluzione di campionamento).
  
 
Il calcolo, dunque, è:
 
Il calcolo, dunque, è:
  Tsec = (dimensione_del_file_in_<FONT color=blue>byte</font> * 8) / Br
+
  Tsec = (dimensione_del_file_in_<FONT color=blue>byte</font> * 8) / bit-rate
 
La dimensione (ad esempio di un file audio) espressa in <FONT color=blue>byte</font> va moltiplicata per <FONT color=#B22222>8</font>, perché - come già detto sopra - si fa riferimento ai <B><FONT color=#B22222>bit</font></b> .
 
La dimensione (ad esempio di un file audio) espressa in <FONT color=blue>byte</font> va moltiplicata per <FONT color=#B22222>8</font>, perché - come già detto sopra - si fa riferimento ai <B><FONT color=#B22222>bit</font></b> .
  
  
===Conoscere in particolare la durata di un file WAV===
+
=Conoscere in particolare la durata di un file WAV=
 
In particolare, volendo conoscere la durata di un file WAV, è possibile adottare almeno le modalità che qui seguono.
 
In particolare, volendo conoscere la durata di un file WAV, è possibile adottare almeno le modalità che qui seguono.
  
 
+
===1<SUP>a</sup> modalità===
====1<SUP>a</sup> modalità====
+
  durata = (dimensione_dei_dati_grezzi_in_byte * 8) / (frequenza * bit * canali)
  durata = (dimensione_dei_dati_grezzi_in_byte * 8) / (frequenza * nbit * canali)
 
 
laddove la variabile ''frequenza'' rappresenta la frequenza di campionamento dell'onda audio.
 
laddove la variabile ''frequenza'' rappresenta la frequenza di campionamento dell'onda audio.
 
<BR>Questa modalità molto precisa prevede, dunque, che per calcolare la durata di un file wav sono necessari:
 
<BR>Questa modalità molto precisa prevede, dunque, che per calcolare la durata di un file wav sono necessari:
<BR>- quantità dei dati audio grezzi;
+
<BR> - quantità dei dati audio grezzi;
 
<BR> - frequenza di campionamento;
 
<BR> - frequenza di campionamento;
 
<BR> - risoluzione di campionamento in bit;
 
<BR> - risoluzione di campionamento in bit;
<BR> - numero dei canali di uscita.
+
<BR> - numero dei canali.
  
  
====2<SUP>a</sup> modalità====
+
===2<SUP>a</sup> modalità===
  durata = (dimensione_dei_dati_grezzi_in_byte / ((nbit * canali) / 8)) / frequenza
+
  durata = (dimensione_dei_dati_grezzi_in_byte / ((bit * canali) / 8)) / frequenza
  
  
====3<SUP>a</sup> modalità====
+
===3<SUP>a</sup> modalità===
 
  durata = (dimensione_dei_dati_grezzi_in_byte / block_align) / frequenza
 
  durata = (dimensione_dei_dati_grezzi_in_byte / block_align) / frequenza
laddove la variabile ''block_align'' è data dal valore, espresso in ''little-endian'', del 33° e 34° byte (byte n. 32 e n. 33) del blocco di intestazione del file WAV.
+
laddove la variabile ''block_align'' è data dal valore, espresso in ''little-endian'', del 33° e 34° byte (indice byte n. 32 e n. 33) del blocco di intestazione del file WAV.
  
  
====4<SUP>a</sup> modalità====
+
===4<SUP>a</sup> modalità===
 
  durata = dimensione_dei_dati_grezzi_in_byte / Byte_rate_per_secondo
 
  durata = dimensione_dei_dati_grezzi_in_byte / Byte_rate_per_secondo
laddove la variabile ''Byte_rate_per_secondo'' è data dal valore, espresso in ''little-endian'', del 29°, 30°, 31° e 32° byte (byte dal n. 28 e n. 31) del blocco di intestazione del file WAV.
+
laddove la variabile ''Byte_rate_per_secondo'' è data dal valore, espresso in ''little-endian'', del 29°, 30°, 31° e 32° byte (indice byte dal n. 28 e n. 31) del blocco di intestazione del file WAV.
 
<BR>Il "''Byte_rate_per_secondo''" è la quantità di byte processati (ed eseguiti) ogni secondo.
 
<BR>Il "''Byte_rate_per_secondo''" è la quantità di byte processati (ed eseguiti) ogni secondo.
  
  
====Modalità usando i frames audio scritti ad ogni ciclo====
+
===5<SUP>a</sup> modalità===
Se dalla funzione, che invia una certa quantità di dati audio al sistema audio, viene ritornato il numero di frames scritti per volta (come avviene per esempio con la funzione ''snd_pcm_writei()'' di ALSA), allora è possibile ottenere il tempo trascorso sino a quel momento dall'inizio della esecuzione, così:
+
Questa modalità usa i ''frames'' audio.
  somma_frames_finora_scritti += frames_attualmente_scritti_dalla_funzione
+
<BR>La quantità complesssiva dei ''frames'' contenuta da un file WAV, si ottiene con la seguente formula:
  tempo_trascorso = somma_frames_finora_scritti / frequenza_di_campionamento
+
  frames = (dimensione_dei_dati_grezzi_in_byte) \ ((bit \ 8) * canali)
 +
Infine per conoscere la durata del file WAV:
 +
  durata = frames / frequenza

Versione attuale delle 18:15, 22 set 2022

Un segnale per poter essere ricostruito a partire dai suoi campioni, deve essere campionato con una "frequenza di campionamento" fc pari al doppio della banda del segnale, ossia più precisamente della frequenza più alta contenuta nello spettro del segnale di partenza (Teorema di Nyquist-Shannon). Nel caso di segnali audio avremo:

fc = 2 * 20000 = 40000Hz

(per motivi tecnici i CD vengono campionati con fc = 44000Hz = 44KHz).

Se ad ogni campione associamo n bit, allora abbiamo il "bit-rate " ("Velocità di trasmissione"), che è dato dal prodotto della frequenza di campionamento per la risoluzione del campionamento per il numero dei canali di uscita:

bit-rate = fc * bit * canali

(nei CD: 16 bit => bit-rate = 44000 * 16bit/secondo * canali)

Se si vuole esprimere il valore in Byte-rate, allora si dovrà effettuare la seguente divisione:

Byte-rate = bit-rate / 8 

Quindi se il brano è, ad esempio, campionato con frequenza 44100, con risoluzione a 16-bit e 2 canali (stereo), avremo il bit-rate:

bit-rate = 44100 * 16 * 2

e se il brano dura T secondi, allora significa che è stato letto nell'unità di tempo un numero di bit pari a:

numero di bit del brano = bit-rate * T


Conoscere la durata in secondi di un brano audio

Se conosciamo la dimensione in bit del brano (bit_letti), e vogliamo conoscere la durata in secondi del brano, si usa la formula inversa:

sia se mono che stereo:  Tsec = bit_letti / bit-rate

e non resta che calcolare il bit-rate in base ai dati disponibili del brano (mono o stereo, frequenza di campionamento, risoluzione di campionamento).

Il calcolo, dunque, è:

Tsec = (dimensione_del_file_in_byte * 8) / bit-rate

La dimensione (ad esempio di un file audio) espressa in byte va moltiplicata per 8, perché - come già detto sopra - si fa riferimento ai bit .


Conoscere in particolare la durata di un file WAV

In particolare, volendo conoscere la durata di un file WAV, è possibile adottare almeno le modalità che qui seguono.

1a modalità

durata = (dimensione_dei_dati_grezzi_in_byte * 8) / (frequenza * bit * canali)

laddove la variabile frequenza rappresenta la frequenza di campionamento dell'onda audio.
Questa modalità molto precisa prevede, dunque, che per calcolare la durata di un file wav sono necessari:
- quantità dei dati audio grezzi;
- frequenza di campionamento;
- risoluzione di campionamento in bit;
- numero dei canali.


2a modalità

durata = (dimensione_dei_dati_grezzi_in_byte / ((bit * canali) / 8)) / frequenza


3a modalità

durata = (dimensione_dei_dati_grezzi_in_byte / block_align) / frequenza

laddove la variabile block_align è data dal valore, espresso in little-endian, del 33° e 34° byte (indice byte n. 32 e n. 33) del blocco di intestazione del file WAV.


4a modalità

durata = dimensione_dei_dati_grezzi_in_byte / Byte_rate_per_secondo

laddove la variabile Byte_rate_per_secondo è data dal valore, espresso in little-endian, del 29°, 30°, 31° e 32° byte (indice byte dal n. 28 e n. 31) del blocco di intestazione del file WAV.
Il "Byte_rate_per_secondo" è la quantità di byte processati (ed eseguiti) ogni secondo.


5a modalità

Questa modalità usa i frames audio.
La quantità complesssiva dei frames contenuta da un file WAV, si ottiene con la seguente formula:

frames = (dimensione_dei_dati_grezzi_in_byte) \ ((bit \ 8) * canali)

Infine per conoscere la durata del file WAV:

durata = frames / frequenza