Chargement...
 
Skip to main content

4 - Toutes les autres applications, les émulateurs...


afficher la durée de fichiers wave

Articles: 14
Bonjour

Je suis nouveau sur le site, donc je cherche encore mes marques.

J'ai posé la question via le mégaphone sans être sûr que ce soit le bon endroit. Je la pose à nouveau dans ce forum sans être davantage sûr que ce soit le bon endroit...

Ma question, pour toute bête qu'elle soit, ne trouve pas d'écho sur google (ou la posé-je mal...) :

Je voudrais afficher la durée de fichiers wave dans la console (càd en mode texte).

J'enregistre avec arecord, écoute avec aplay, mais ni l'un ni l'autre n'affiche la durée. Je cherche donc un équivalent à ogginfo mais pour les .wav, ou une méthode de calcul genre : taille fichier en Mo / nb2bits à l'enregistrement... que sais-je?

Merci
Articles: 14
Bon j'ai trouvé grace à LinuxMAO, un article de WikiPédia qui traite des formats audio, et dans lequel se trouve la formule magique.
A savoir :
Pour le calcul du poids :
de fichiers wave
44100 * 2(2octets=16bits) * 2(stéréo) * 60(secondes) + en-têtes = 11 300 kilooctets / minute


Mais déjà au courant !

Donc étant doné un fichier de 20928044 octet, enregistré à 48000Hz, en 16 bits et en stéréo
je calcul :
echo "scale=2; 68255788 / 48000 * 2 * 2 / 1024" | bc
retourne 5,55, et ça marche comme ça.

Articles: 606
Bon j'ai trouvé grace à LinuxMAO, un article de WikiPédia qui traite des formats audio, et dans lequel se trouve la formule magique.

...et où l'on rappelle, à juste titre, que le wav n'est qu'un conteneur. Ta formule n'est donc valable que pour les wav stéréos contenant du PCM 😉

T.
Articles: 14
Je reviens sur le précédent calcul pour indiquer que j'obtiens des valeurs étranges aux secondes, genres : n min. et 99 secondes, des chiffres supérieurs à 59.
Donc si le calcul est bon pour obtenir une approximation en minutes, pour ce qui est des secondes c'est pas ça!

Quelqu'un aurait-il une idée pour avoir des secondes correctes ?
Articles: 14
Bon, je n'enregistre plus en .wav, mais en .raw (ainsi fi des conteneurs) : pas d'en-tête, pas d'emballage, c'est presque bio!


De "mes" beaux calculs sur des fichiers .raw :

Vous prenez un fichier de belle taille en octet (FTo)
Vous le divisez par le taux d'échantillonnage (TE) multiplié par le format en octets ( NB = 16 bits => 2 octets) et par le nombre de canaux ( stéréo => NC = 2)
Vous obtenez un resultat R, qu'il faut diviser par 60 pour obtenir des minutes (Rm) (et seulement des minutes)
Pour obtenir les secondes (Rs) il faut faire le modulo de R par 60
Vous finissez par concaténer Rm et Rs avec le séparateur de votre choix.

Donc : ( FTo / ( TE * NB * NC ) ) / 60 ":" ( FTo / ( TE * NB * NC ) ) % 60

Ce n'est pas encore parfait, puisque si le modulo est inférieur à 10, il n'y a pas de zéro pour le signifier...

Donc : à suivre...

Sources : http://www.cut-the-knot.org/recurrence/conversion.shtml, voir : "Recursive implementation".



Et pour ceux qui seraient tentés de dire qu'ils en ont rien à battre, mais qui seraient quand même arrivés jusque là : ,.|..
Articles: 14
Mais oui, je sais que ça vous passionne ! Alors voilà les nouvelles :

D'abord, le rappel des faits :

Puisque les fichiers wav possèdent un en-tête que je ne sais pas encore mesurer (est-ce que ça se mesure...), j'ai décidé de convertir le nombre d'octets de fichiers raw en minutes secondes

Repraw=~/mes_raw# admettons

wc -c $Repraw/$i |\
awk '{ mn=$1/48000/4/60; sc=$1/48000%60; printf substr($2,25) "\t\t%10.0f", mn; printf ",%02.0f mn \n", sc }'

Bon, j'ai été un peu aidé

C'est pas encore parfait : à la finale, je devrais ne plus me servir de 'wc', donc du 100% pur Awk; et le formatage laisse encore à désirer...

à bientôt...
Articles: 14
edit :

Repraw=~/mes_raw# admettons

for i in $(ls $Repraw); do
wc -c $i |\
awk '{ mn=$1/48000/4/60; sc=$1/48000/4%60; printf substr($2,25) "\t\t%10.0f", mn; printf ",%02.0f mn \n", sc }'
done


Bien sûr, vous aviez corrigé de vous-même...


Allez, encore un peu de mise en forme (affichage sur trois colonnes impeccablement alignées) et ce sera parfait...ement inutile ^^
Articles: 14
Je viens de m'apercevoir que le calcul (donné en awk dans le message précédent) arrondit les valeurs des minutes et des secondes à l'entier supérieur; ce qui n'est pas gênant pour les secondes (avoir une seconde de trop dans une approximation, cest pas la cata...), par contre avoir une minute de plus que la durée réelle n'est pas anodin...

Il faut donc remplacer %10.0f par %10.0d

Vous auriez quand même pu me le dire (
_
)