PDA

View Full Version : HELP: devo leggere la lunghezza di files audio WAV con un programmino in C.


Matrixbob
22-05-2007, 21:01
Ne stiamo parlando qui:

[C] File audio WAV: devo leggerne l'Header x saperne la lunghezza in tempo?! (http://www.hwupgrade.it/forum/showthread.php?t=1473617)
, ma non ne è uscito 1 gran che per ora. :(

cicciociccio
23-05-2007, 10:40
Ciao.
Cosa intendi per lunghezza? i secondi che dura il file? ma lo vuoi preciso o orientativo :D
Dimmi che formato è, peso, frequenza di campionamento KHz e bit, e se è stereo o mono.

Matrixbob
23-05-2007, 10:49
Cosa intendi per lunghezza? i secondi che dura il file? ma lo vuoi preciso o orientativo :D
Dimmi che formato è, peso, frequenza di campionamento KHz e bit, e se è stereo o mono.

Si, in secondi va bene. E' l'unità di misura corretta del tempo nel SI.
CMQ io devo saperne la lunghezza "esatta" perchè devo sincronizzarlo con delle immagini. :(

CMQ avvaliti di quest'altro 3D, perchè siamo nella soglia tra programmazione e sowtware audio. :)

La mia deve essere una routine scritta in C, quindi devo comprendere 1 algoritmo per ricavare il tempo dai file.wav. :(

[C] File audio WAV: devo leggerne l'Header x saperne la lunghezza in tempo?! (http://www.hwupgrade.it/forum/showthread.php?t=1473617)

cicciociccio
23-05-2007, 11:00
Ok, capito, io ti dico come trovarla poi la applichi tu!
Allora ti spiego come si trova il peso poi con una formula inversa ricavi il tempo.
Prendiamo per esempio un file Wav campionato a 16bit,44.100Hz,stereo(sono 2 canali).
16(bit) x 44.100 (freq.) x 2(canali) x Y (secondi) = peso in bite.
chiaramente se hai un campione con freq. e bit canali diversi basta che li cambi,
es. 8(bit) x 48Khz (freq.) x 1(canale) x Y (secondi) = peso in bite

cicciociccio
23-05-2007, 11:54
http://www.lcnet.it/priv/erioforo/mhlpmp3.html qui c'è una buona spiegazione ;)

Matrixbob
30-05-2007, 15:01
OK grazie, ci sto ancora lavorando sopra.
Ho problemi a costruire il mio parser per la struttura wav. :(

Matrixbob
30-05-2007, 18:42
Ok, capito, io ti dico come trovarla poi la applichi tu!
Allora ti spiego come si trova il peso poi con una formula inversa ricavi il tempo.
Prendiamo per esempio un file Wav campionato a 16bit,44.100Hz,stereo(sono 2 canali).
16(bit) x 44.100 (freq.) x 2(canali) x Y (secondi) = peso in bite.
chiaramente se hai un campione con freq. e bit canali diversi basta che li cambi,
es. 8(bit) x 48Khz (freq.) x 1(canale) x Y (secondi) = peso in bite

Quello che chiami "bite" lo intendi bytes o bits?!

Perchè avevo scritto questa formula allora:
POST (http://www.hwupgrade.it/forum/showpost.php?p=17333201&postcount=34)

Solo che mi ritrovavo la discrepanza bit/byte o byte/bit.
Quindi ti chiedevo gentilmente 1 parere. :)

Perchè c'è chi avanza questo algoritmo pragmatico:

Secondi di file.wav = Lunghezzafile/Frequenza dicampionamento; // khz es: 44100

// controllo bit
if (BitsPerSample == 16) // è 8 o 16 bit
Secondi di file.wav = Secondi di file.wav/2;

// numero canali 1 o 2 ovvero mono o stereo
Secondi di file.wav = Secondi di file.wav/Canali;

printf Secondi di file.wav

cicciociccio
01-06-2007, 12:32
Premetto che non ci capisco un'H di programmazione, io ti posso dire come trovare solo la grandezza di un file, poi da questa ti ricavi i secondi.

dimensione del file = durata in secondi x numero di canali x frequenza di campionamento x risoluzione / 8.
Per fare un esempio pratico, un minuto di un file audio stereo della qualità di un CD(44.1Khz-16bit-stereo) occupa: 60 (sec) x 2 (stereo N#canali) x 44,1(KHz) x 16 (bit) /8 (byte, Bit non ricordo) = 10,6 MB.