VBWaveComp : Le comparateur de spectre audio en VB .Net

Vers un "benchmark" de la compression audio

 

https://codes-sources.commentcamarche.net/source/5319

Documentation : VBWaveComp.html

Code source : VBWaveComp.vbproj.html

Par Patrice Dargenton : patrice.dargenton@free.fr

http://patrice.dargenton.free.fr/CodesSources/index.html

 

Version 1.31 du 11/11/2007

 

Table des matières

Description. 1

Mode d'emploi 3

Décompresser les fichiers audio en .wav. 3

Explication des options. 3

Explication du rapport généré. 4

Limitations. 4

Calcul du niveau de décibels. 4

Méthodologie de test 5

Choix du matériel de restitution. 5

Pourquoi changer de codec de compression ?. 6

Vérification de base du logiciel 6

Choix de la précision de calcul 6

Comparaison des spectres. 7

Autres tests. 7

Les algorithmes de compression audio. 7

Windows Media Audio (WMA2) 7

Windows Media 9 (en version Release Candidate) 7

Windows Media 11. 9

Ogg Vorbis. 9

MP3Pro. 9

Projets. 9

Interface. 9

Divers. 10

Critères de qualité. 10

Calcul des décibels pondérés : db(A) 10

Un audiogramme pour calibrer le spectre auditif personnel 11

Versions. 11

Version 1.31 du 11/11/2007. 11

Version 1.30 du 21/08/2007. 11

Version 1.2 du 24/10/2004. 11

Version 1.1 du 19/12/2002. 12

Version 1.0 du 14/12/2002. 12

Liens. 12

Lecture et écriture de fichiers wave. 12

TFR.. 12

Divers. 12

Désactiver l'AutoRun lors de l'insertion d'un CD ou d'une clé USB (anti rootkit) 13

Autres codes sources utilitaires. 13

Tags audio. 13

 

 

Description

 

Comment déterminer le bon taux de compression de vos CD Audio ? réponse : il faut choisir le débit minimum à partir duquel tous vos morceaux compressés resteront parfaits à l'écoute, mais cela dépend de la sensibilité auditive de chacun. Dans la pratique, les tests sont assez fastidieux, car vous pouvez trouver un morceau en particulier qui présente un défaut à un débit où vos précédents essais étaient estimés satisfaisants auparavant (pour ma part, une compression WMA2 à 96 Kbps ne présente pas de défaut facilement perceptible). Il serait encore plus fastidieux d'estimer le taux de compression pour chaque CD, comme cela se fait pourtant en vidéo pour que ça loge sur un CD ! Il existe cependant la compression à débit variable (VBR) à qualité constante, mais il reste le choix du niveau de qualité à fixer (50, 75, 90 ou 100).

Pour faciliter ces essais et tester rapidement de nouveaux algorithmes de compression, VBWaveComp peut vous aider : son principe d'utilisation est de comparer les fichiers audio .wav avant et après une compression (en décodant en .wav le fichier compressé). L'objectif est d'obtenir un indice de qualité proportionnel à la conservation des fréquences, qui regroupe les comparaisons effectuées sur chaque plage de fréquence du spectre, un commencement vers un indice de type benchmark de la compression audio, en quelque sorte. L'indice le plus représentatif consiste à indiquer une série d'atténuations moyennes en décibels (dB), en particulier autour de la fréquence de coupure du compresseur (c'est-à-dire la fréquence maximale qui est bien conservée, alors que les fréquences supérieures sont sacrifiées).

 

Voici une capture d'écran de VBWaveComp qui présente un exemple de comparaison de spectre entre un fichier .wav issu d'un CD audio et sa compression avec le codec WMA9 en VBR MQA 50 (Medium Quality Audio). Il s'agit du titre "When I Grow Up" (3' 34") sur l'album "Short Sharp Shocked" (1988) de Michelle Shocked. Le débit final obtenu est de 101 Kbps. Les fréquences supérieures à 13 KHz sont fortement atténuées, mais elles sont pratiquement inaudibles (le signal issu du CD va pourtant jusqu'à 21 Khz) :

 

 

Et voici le rapport correspondant généré par VBWaveComp :

CompMichelleShockedCDMichelleShockedWMA9_50_101.txt

A titre de comparaison, voici le rapport avec cette fois un fichier WMA2 CBR (Constant BitRate) à 96 Kbps :

CompMichelleShockedCDMichelleShockedWMA2_96.txt

Pour ce fichier là, les résultats sont comparables, et le WMA9 n'apporte rien de plus. Cependant, sur un album entier, les débits finaux vont de 64 à 101 Kbps, et la taille globale des fichiers est alors de près de 25% plus petite, pour une qualité plus que correcte : les défauts ne sont pas facilement perceptibles, même avec un casque hi-fi.

 

 

Mode d'emploi

 

Comme tout logiciel .Net, VBWaveComp.Net requiert l'installation de la plate-forme .Net.

 

Le mode d'emploi est le suivant : comparez le spectre audio avant et après une compression :

1°) Choisissez un extrait représentatif d'un fichier audio, d'une trentaine de secondes par exemple ;

2°) Compressez ce fichier avec les paramètres que vous voulez tester ;

3°) Décompressez ce dernier fichier en .wav avec un logiciel inverse : un décodeur ;

4°) Lancez VBWaveComp et sélectionnez le fichier d'origine, puis faites un double-clic dessus pour lancer le calcul de son spectre ;

5°) Recommencez cette fois avec le fichier .wav ayant subit la compression ;

6°) Vérifiez quelle est la fréquence de coupure du compresseur, c'est-à-dire la fréquence jusqu'à laquelle le spectre est très bien conservé, et à partir de laquelle, une perte sensible de signal est occasionnée par la compression audio. Cette fréquence de coupure doit être située à plus de 12 KHz, si possible vers 14 KHz.

 

Décompresser les fichiers audio en .wav

Voici un utilitaire pour décoder en .wav les fichiers Windows Media Audio (WMA) ainsi que beaucoup d'autres formats de compression :

http://cdexos.sourceforge.net/?q=download

Mais ce logiciel ne peut décompresser le WMA sans perte, pour cela il faut graver un CD-Audio depuis Windows Media Player puis re-ripper (extraction des données) le CD-Audio via CDex.

 

Si vous n'avez pas de décodeur .wav pour un format de fichier audio donné, vous pouvez toujours capturer la sortie audio de votre carte son en cours de lecture (pas besoin de câble, il suffit de configurer l'enregistrement, mais cette fonctionnalité est parfois bridée sur les pilotes Microsoft, pour éviter le piratage de CD, dans ce cas prendre le pilote du fabriquant de la carte audio du PC). Il faut cependant faire attention à toute perte de signal (ajout de bruit) lors de chaque étape, Voir la rubrique Méthodologie.

 

Explication des options

Ces options figurent dans le fichier Exe\VBWaveComp.ini ou bien dans l'onglet Options de l'interface :

iNbBitsTFR : nombre de bits de la Transformée de Fourier Rapide (TFR ou FFT en anglais). Plus il est grand, plus l'analyse spectrale est précise, et plus la fréquence minimum détectable est petite, la fréquence maximale détectable étant toujours de 22.05 KHz ; iNbBitsTFR doit être fixé entre 5 et 23 bits, soit entre 16 et 4194304 fréquences : iNbFreqTFR = 2 ^ iNbBitsTFR divisé par 2 pour le théorème de Shannon. L'idéal est de fixer iNbBitsTFR à 19 bits si votre machine est assez puissante, voire 23 bits. Sinon 18 bits pour allez plus vite, mais moins de défauts pourront être détectés dans le spectre ;

iNbPlagesFrequence : nombre de plages de fréquence. Ces plages permettent de présenter les résultats sous forme synthétique, et ce quelque soit le nombre de fréquences du spectre ;

iTypePonderationMoy : Pondération des moyennes des plages de fréquence :

            Aucune : on fait la moyenne simple des plages de fréquence (option par défaut) ;

            Par les hautes fréquences : pondération proportionnelle à la fréquence (poids important pour les fréquences élevées), car les basses fréquences sont toujours bien conservées, elles ne sont donc pas bien discriminantes pour mesurer la qualité de la conservation du signal ;

            Par l'énergie de chaque plage de fréquence : pondération par l'énergie locale normalisée, c'est-à-dire par l'énergie contenue dans chaque la plage de fréquence : si une moyenne est mauvaise mais que la plage ne représente qu'une très faible énergie, elle sera sans conséquence sur la qualité perceptible du signal compressé ;

bNormaliserSpectre : booléen pour la normalisation du signal en fonction de l'amplitude max. du signal :

            * 0 permet de comparer l'amplitude de deux signaux ;

            * 1 permet de comparer le spectre de deux signaux quelque soit leur amplitude (option par défaut) ;

bRelatif : booléen pour relativiser le spectre par rapport à l'énergie totale du signal, c'est-à-dire pour relativiser la différence d'énergie de chaque plage de fréquence par rapport à l'énergie totale ; ce paramètre est valable pour la comparaison en % lorsque le signal n'est pas normalisé : il permet d'éviter de comparer du bruit lorsque par exemple un des canaux est à zéro (le spectre du bruit blanc pouvant alors représenter 60% du spectre du signal, à cause des formules en Log, au lieu de 0% logiquement) ; option désactivée par défaut.

 

Explication du rapport généré

Il y a plusieurs types de calcul reportés dans le rapport : en Log, décibels (Log dB), en rapport d'énergie directe, avec ou sans pondération, ...

 

L'énergie directe permet d'évaluer précisément le volume ou niveau sonore globale du signal. En revanche, il ne permet pas de comparer les fréquences du spectre, car les résultats sont alors trop instables et plutôt aléatoires, d'ou l'utilisation des formules en Log. Cependant, dès que l'on souhaite faire des opérations avec les Log, par exemple pour cumuler les voies de gauche et de droite, ou bien pour cumuler les amplitudes des fréquences sur une plage, je pense que seul le calcul en décibels a du sens. En tout cas, graphiquement, les dB ne modifient pas énormément l'allure du spectre par rapport au simple Log.

 

Si on compare une amplitude, on calcule un % en faisant amplitude du signal 2 / amplitude du signal 1 : si on obtient 100%, c'est que les signaux sont de même amplitude, ce qui signifie probablement qu'il s'agit du même signal. En revanche, si on compare des volumes sonores en décibels, on mesure finalement une atténuation en dB : si les 2 signaux sont identiques, on a Niv2 (dB) = Niv1 (dB), on calcule donc une simple différence. Voir le détail du calcul des décibels.

 

Pour les comparaisons de plages, on fait en sorte que les voies Gauche et Droite ne se compensent pas : Moy(90% + 110%) = 90% et non 100%, de même Moy(-5 dB + 5 dB) = 5 dB et non 0 dB. Par ailleurs, le nombre de spectres calculés est la somme G+D dans le rapport.

 

 

Limitations

 

La comparaison spectrale ne préjuge pas de la qualité du son, il s'agit seulement de mesurer la perte de signal en fonction de la fréquence ; on ne peut pas savoir si l'algorithme de compression remplace du signal par du bruit de même fréquence et énergie, qui pourrait ne pas être distinguer du signal original par une TFR. Mais cela est heureusement peu probable dans la mesure où, lorsque l'on fait suffisamment d'essais, la différence de qualité mesurée est assez bien proportionnelle à la qualité effectivement utilisée pour la compression (dans les fréquences audibles en tout cas).

 

La limitation principale du logiciel est que les résultats sont encore trop sensibles sur certains fichiers, ils varient trop lorsque l'on change le nombre de bits de la TFR, ou bien le nombre de plages de fréquence. Le calcul du niveau de décibels permet de réduire cette sensibilité (et en théorie l'atténuation en dB entre deux signaux ne devrait être lié qu'à leur différence, et donc ne pas dépendre des paramètres de calcul de VBWaveComp). Cependant lorsque le nombre de bits de la TFR devient assez élevé, les résultats deviennent de plus en plus stables, quoique le temps de calcul s'allonge d'autant, voir la rubrique Méthodologie.

 

Calcul du niveau de décibels

Je ne suis pas encore tout à fait sûr que c'est bien des décibels qu'on obtient à la fin, mais en tout cas, j'ai fait de mon mieux, en suivant notamment les conseils de Sphax pour les calculs ; voici les détails tels qui sont indiqués dans la fonction rCalculerNEC : Niveau Equivalent Cumulable :

 

' Etapes de calcul du spectre en décibels (dB)

' --------------------------------------------

' On appelle intensité, l'énergie d'une onde acoustique :

'  L'énergie est proportionnelle au carré de l'amplitude

'  de l'onde acoustique, soit P².

' 1°) rSpectre2 est proportionnel à P²,

'     car il est calculé suivant iSpectreCarre (voir TFR) :

'     RealOut(i) = RealOut(i) * RealOut(i) + ImagOut(i) * ImagOut(i)

' 2°) Niveau Equivalent en dB : NE = 10*Log(P²/P0²)

' 3°) Niveau Equivalent Global en dB pour plusieurs fréquences

'     NEG = 10*Log( 10^(NE1/10) + 10^(NE2/10) + ...)

' 4°) Niveau Equivalent Global en dB pour Gauche+Dr. : même principe

'     NEGGD = 10*Log( 10^(NEGG/10) + 10^(NEGD/10) )

' 5°) Niveau Equivalent Cumulable : NEC = 10 ^ (NE / 10)

'     NEC = 10^(       NE       /10) soit :

'     NEC = 10^( 10*Log(P²/P0²) /10) soit :

'     NEC = 10^(    Log(P²/P0²)    ) : Formule finale de la fonction

'     et donc on calculera ensuite :

'     NEG   = 10*Log(     NEC1      +     NEC2      + ... )

'     NEGGD = 10*Log( NECG1 + NECD1 + NECG2 + NECD2 + ... )

' 6°) SommeNECG = NECG1 + NECG2 + ...

'     SommeNECD = NECD1 + NECD2 + ...

' 7°) SpectreLogG  dB = 10*Log(SommeNECG)

'     SpectreLogD  dB = 10*Log(SommeNECD)

'     SpectreLogGD dB = 10*Log(SommeNECG + SommeNECD)

If rSpectre2 = 0 Then rCalculerNEC = 0 : Exit Function

rCalculerNEC = 10 ^ Math.Log(rSpectre2 / rPressionP0Pascal2)

 

Remarques :

0 dB indique que toute l'énergie est conservée dans la bande spectrale (en fait je ne suis pas certain que 0 soit défini pour les décibels, de même que les dB négatifs) ;

9 dB correspond à une atténuation de 50% de l'intensité acoustique ;

96 dB correspond au maximum de la dynamique d'un signal échantillonné sur 16 bits (CD audio), c'est-à-dire l'amplitude en dB entre la valeur minimum et maximum d'un entier 16 bits. Je pense que les valeurs au-delà de 96 dB (calculés sur le spectre cette fois et non pas sur le signal d'entrée) n'ont donc pas de signification.

 

 

Méthodologie de test

L'objectif de ce logiciel est d'établir un "benchmark" (banc d'essai) de la compression audio, afin de choisir une fois pour toute le meilleur codec de compression/décompression avec le débit optimal pour votre collection de CD. Procédons par étapes :

 

Choix du matériel de restitution

Tout dépend si vous souhaitez écouter votre musique uniquement sur votre ordinateur, ou bien alors sur plusieurs types de matériel : baladeur MP3 et autoradio par exemple.

Si vous êtes sûr de n'écouter votre musique que sur votre ordinateur, alors vous pouvez choisir tout simplement le meilleur codec existant à ce jour.

Sinon, il faut choisir le meilleur codec supporté par l'ensemble de vos matériels de lecture, ce qui est déjà plus restrictif, et plus compliqué aussi, car certains baladeurs ne supportent pas les DRM (selon le format, on peut parfois désactiver les DRM, alors que certains format impose un matériel spécifique, par exemple l'iPod, mais même dans ce cas le format mp3 libre est toujours supporté).

 

Pourquoi changer de codec de compression ?

Prenons un exemple concret : mon baladeur lit les fichiers WMA, faut-il prendre le dernier codec WMA ou bien le premier ? Winamp a toujours très bien fonctionné, autant pour la compression WMA2 que pour la restitution, pourquoi alors changer de méthode de compression ? (j'utilise une vieille version 2.78 de Winamp qui ne compresse que le WMA2, car c'est la dernière version légère qui fonctionne bien avec l'explorateur Windows)

Une première raison valable est la gestion des enregistrements "Live" : Winamp ne sait pas compresser sans coupure entre ces morceaux, alors que CDex si, à condition de relire dans WMP (Windows Media Player).

De plus le nouveau WMA sait stocker et synchroniser les paroles des musiques : mon baladeur ne sait pas les lire, mais ce sont bien les deux seules fonctionnalités intéressantes ajoutées depuis une décennie qui pourrait justifier l'achat de musique en ligne et du même coup l'achat d'un nouveau baladeur (surtout lorsque les paroles seront disponibles pour un grand nombre de morceaux et si possible traduites en option) mais en dehors de ces deux fonctionnalités, rien ne vaut encore la formidable richesse que constitue l'achat de CD d'occasion sur PriceMinister.

Le problème du nouveau WMA est la présence de clics parasites : au début je croyais que c'était du aux DRM mal supporté par mon baladeur, mais d'une part, on peut désactiver les DRM dans CDex, et d'autre part, si on décoche l'option d'extraction/compression à la volée, on n'obtient plus de clics parasites (comme cela est expliqué dans l'aide en ligne de CDex).

Le second problème du nouveau WMA est qu'on se retrouve avec des tags qui empêchent de lire les noms des fichiers dans le baladeur : même si on décoche les tags dans CDex, les WMA en contiennent quand même, et WMP ne sait pas les enlever (en tout cas cela ne marche quasiment pas du tout, une vrai galère). Heureusement, MP3Tag le fait en 1 clic. (ce qui prouve bien que l'ergonomie est toujours possible : ne vous emmerdez jamais avec un logiciel si un autre peut faire la même chose facilement ; il existe des informaticiens mauvais même payés par l'homme le plus riche du monde).

Une fois tous ces problèmes réglés, nous allons pouvoir comparer la différence de qualité entre les 2 versions WMA, mais comment s'assurer d'abord de la fiabilité des résultats de VBWaveComp ?

 

Vérification de base du logiciel

La première vérification à faire est de comparer un fichier wav avec lui-même : on n'obtient bien aucune différence (on peut tester aussi les canaux droite et gauche indépendamment, voir la rubrique Autres tests). Ensuite, il est important de vérifier toute la chaîne d'encodage/décodage des wav, et pour cela l'idéal est de tester un codec sans perte : le WMA sans perte proposé par Windows Média Player dans les options d'extraction numérique et de compression.

Le problème c'est que seul WMP peut lire ces fichiers et les décoder (CDex ne le permet pas). Dans ce cas, il faut graver un CD-Audio à partir de ces fichiers WMA depuis Windows Media Player, puis re-ripper le CD-Audio via CDex. Résultat : on n'obtient plus 0 db, et la différence dépend de la précision de calcul (nombre de bits de la TFR).

 

Choix de la précision de calcul

Les essais que j'ai fait montrent qu'il faut prendre le maximum de précision en fonction de la RAM disponible sur votre ordinateur : si vous avez 1 Go de RAM, prenez 23 bits pour la TFR, car plus la fenêtre de la TFR est large, meilleure est la précision (en tout cas jusqu'à 23 bits).

Si vous avez encore plus de RAM disponible, les calculs seront de plus en plus long (et la lenteur d'affichage du logiciel commencera a être un peu pénible), mais vous pourrez mesurer avec de plus en plus de précision les fichiers wav de plus en plus long. Cependant, une fois atteint la dynamique maximale contenue dans les CD audio classiques, qui est de 96 décibels, les résultats devraient être parfaitement stables. En tout cas, si le morceau de musique est suffisamment court pour loger dans un seul spectre, il n'est plus nécessaire alors d'augmenter la taille du spectre (nb. bits TFR) : les différences en db ne bougent plus du tout (on observe seulement une variation sur les arrondis en ce qui concerne le % d'énergie de chaque plage de fréquence).

 

Comparaison des spectres

Voici donc le résultat de la comparaison de qualité entre les 2 versions WMA : Conclusion : WMA11 à 128 Kbps est équivalent à un WMA à 160 Kbps jusqu'à 15.9 Khz, mais au détriment des fréquences supérieures. Microsoft est parvenu à réutiliser le débit occupé par les fréquences inaudibles pour les plus basses fréquences, ce qui est assez intéressant. Est-ce que la qualité des hautes fréquences audibles est diminuée ? je ne l'ai pas constaté. Par contre, en comparant la différence de qualité (via VBWaveComp) sur des plus bas débit (< 128 Kbps), le WMA11 est parfois meilleur, et parfois moins bon que le WMA2, il n'y a donc pas d'intérêt flagrant d'utiliser le WMA11 en dessous de 128 Kbps.

 

Autres tests

Il y a plusieurs tests intéressants à faire en comparant un fichier .wav avec une version modifiée de ce fichier :

- Baisser le volume (sur une des voies ou bien les 2), tester avec une voie à 0% : si on ne normalise pas, le mode Log % ou bien énergie directe (mais pas dB) retrouve bien la perte de volume occasionnée ;

- Utiliser un filtre fréquentiel (VBWaveComp doit logiquement mettre en évidence le filtre utilisé grâce à la superposition des 2 spectres) ;

- Tester différents taux de compression, sur plusieurs fichiers de références, voir WMA versus MP3 et Les algorithmes de compression audio ;

- Ajout d'un décalage dans le temps : on obtient bien le même spectre, pour peu que la fenêtre de la TFR soit assez large (augmenter le nombre de bits de la TFR) ;

- Faire un .wav avec toutes les fréquences (partir d'un spectre plat et faire une TFR inverse ?), puis tester les fonctions de transfert des encodeurs audio ;

- Test normalisation : comparer un spectre normalisé avec un non normalisé afin de vérifier si la normalisation a déformé les échantillons ;

- Faire un petit scratch ou bien une petite perte local de signal, et comparer ;

- Tester la fréquence avec des sinus parfaits : on retrouve bien la fréquence dans le spectre, voir NCH Tone Generator ;

- Tester la perte de qualité occasionnée par la numérisation d'une K7 audio. Personnellement, j'obtiens au final une perte de 18.11 dB (G: 24.96 dB, D: 11.25 dB) sur ma platine K7 : j'ai un problème sur le canal de gauche ! (il y a peut être un câble de mauvaise qualité, ou bien un déréglage interne), tandis que sur le canal de droite, je n'ai que 2.40 dB jusqu'à 17.6 KHz, ce qui est très bien ;

- ...

 

 

Les algorithmes de compression audio

Prochainement, je vais tester différents codec audio du moment ; si vous avez vous-même des résultats à communiquer, n'hésitez pas.

 

Windows Media Audio (WMA2)

Les WMA2 (version interne du codec : 4.02) encodés à 96 Kbps commencent à décrocher à partir de 14 KHz. Voici le rapport de comparaison entre un fichier issu d'un CD avec un fichier WMA2 CBR à 96 Kbps :

CompMichelleShockedCDMichelleShockedWMA2_96.txt

 

Windows Media 9 (en version Release Candidate)

Voici un exemple de comparaison de spectre entre un fichier wav issu d'un CD audio et sa compression avec le codec WMA9 en VBR MQA 50 (Medium Quality Audio). Le débit final obtenu est de 101 Kbps. Les fréquences supérieures à 13 KHz sont fortement atténuées, mais elles sont pratiquement inaudibles :

CompMichelleShockedCDMichelleShockedWMA9_50_101.txt

 

Si vous voulez convertir l'intégralité de votre CD-thèque déjà numérisée sous un autre format, téléchargez le SDK de Windows Media 9, il contient un script vbs pour le traitement par lot (batch), voici la commande qui permet de tout convertir (récursivement sur les répertoires) en une seule ligne de commande (au départ j'avais trouvé ce script intéressant, mais au final, il n'est pas raisonnable d'utiliser ce script à partir de morceaux déjà compressés à un trop faible débit, comme 96 Kbps ; les faibles débits ne sont intéressants que pour le streaming, la diffusion en directe) :

 

cscript.exe wmcmd.vbs -a_mode 2 -a_setting Q50_44_2 -input C:\WMA2 -output C:\WMA9

 

-a_mode 2 : encodage avec un débit variable basé sur la qualité escomptée du signal compressé (VBR encoding : Variable BitRate, encoding mode: quality-based)

Pour afficher tous les codecs disponibles : cscript.exe wmcmd.vbs -a_codecs

Pour afficher tous les formats disponibles : cscript.exe wmcmd.vbs -a_formats

 

Q50_44_2 correspond à Medium Quality Audio (à 44 KHz en stéréo), cela signifie un débit à partir de 64 Kbps, jusqu'à 100 Kbps si nécessaire selon la nature du signal (ou entre 50 et 80 en partant de fichier WMA2 à 96 Kbps). Voici le rapport sur la seconde perte de qualité occasionnée par le WMA9 (on obtient 78 Kbps), il y a quand même une perte de 9 dB dès 11 KHz :

CompMichelleShockedWMA2_96MichelleShockedWMA2WMA9.txt

Et maintenant la différence par rapport au fichier d'origine, qui confirme bien la perte déjà visible dans le rapport précédent :

CompMichelleShockedCDMichelleShockedWMA2WMA9.txt

 

Si vous partez directement des fichiers wav issus d'un CD, la taille des fichiers sera plus grande car la qualité du signal d'origine sera plus élevée ; vous pouvez aussi utiliser Q75_44_2 (à partir de 100 et jusqu'à 160 Kbps si nécessaire) : le débit final est de 157 Kbps en l'occurrence :

CompMichelleShockedCDMichelleShockedWMA9_75_157.txt

 

Conclusion WMA9 : on ne dépasse jamais 5 dB (respectivement 3 dB) pour les canaux Gauche et Droite jusqu'à 12 et 13 KHz en moyenne pour les WMA9 MQA 50 (resp. 75), ce qui est bien si on considère que la taille des fichiers peut descendre jusqu'à un débit de 37 Kbps (resp. 56 Kbps). Cela permet de réduire l'encombrement, notamment pour le streaming, car les faibles débits sont optimisés, tandis que les hautes fréquences sont supprimées (les 4 premières atténuations concernent les fréquences de 12 à 15 KHz et l'atténuation finale moyenne est indiquée à la fin) :

en dB

Michelle Shocked

Lisa Gerrard (LG)

WMA2 96

GD : 1.81 1.86 1.83 1.94 : 004.01

G  : 1.37 1.35 1.26 1.53 : 005.26

D  : 2.26 2.37 2.40 2.36 : 002.76

GD : 1.38 1.84 2.38 3.55 : 010.46

G  : 0.48 0.62 1.75 3.81 : 013.98

D  : 2.28 3.06 3.01 3.29 : 006.94

WMA2 160

GD : 0.57 0.63 0.77 0.86 : 003.45

G  : 0.55 0.52 0.57 0.60 : 003.78

D  : 0.60 0.75 0.97 1.13 : 003.13

GD : 0.63 0.92 1.33 1.95 : 006.82

G  : 0.29 0.33 0.48 1.13 : 006.88

D  : 0.97 1.52 2.18 2.77 : 006.77

WMA9 50

101 Kbps

GD : 0.85 0.91 6.48 21.57 : 059.56

G  : 0.92 0.91 6.80 22.26 : 063.40

D  : 0.78 0.91 6.16 20.89 : 055.72

55 Kbps

GD : 1.37 3.90  8.85 11.90 : 020.05

G  : 1.38 4.82 10.83 14.93 : 025.68

D  : 1.36 2.98  6.86  8.87 : 014.41

WMA9 75

157 Kbps

GD : 1.34 1.38 1.49 1.63 : 038.94

G  : 0.29 0.29 0.33 0.37 : 041.84

D  : 2.38 2.48 2.66 2.88 : 036.05

93 Kbps

GD : 0.96 0.98 2.23 4.30 : 014.63

G  : 0.73 0.82 2.38 4.85 : 019.12

D  : 1.20 1.14 2.08 3.74 : 010.13

MP3BE256

GD : 0.62 0.61 0.62 0.63 : 001.22

G  : 0.59 0.63 0.69 0.74 : 000.92

D  : 0.64 0.59 0.55 0.52 : 001.53

GD : 0.44 0.60 0.82 1.24 : 006.29

G  : 0.48 0.52 0.69 0.90 : 008.46

D  : 0.40 0.68 0.95 1.57 : 004.13

MP3BE320

GD : 0.47 0.48 0.51 0.54 : 000.86

G  : 0.55 0.58 0.62 0.67 : 001.00

D  : 0.40 0.38 0.39 0.41 : 000.71

GD : 0.34 0.41 0.61 1.04 : 003.60

G  : 0.35 0.34 0.47 0.70 : 003.73

D  : 0.34 0.47 0.75 1.39 : 003.46

 

en dB

Simple Minds (SM)

Gainsbourg (Gsb)

WMA2 96

GD : 1.03 1.07 1.16 1.40 : 004.86

G  : 1.20 1.31 1.32 1.44 : 005.34

D  : 0.85 0.82 0.99 1.36 : 004.38

GD : 0.62 0.69 0.75 0.88 : 012.09

G  : 0.54 0.60 0.66 0.78 : 012.02

D  : 0.70 0.77 0.85 0.99 : 012.15

WMA2 160

GD : 1.10 1.10 1.14 1.34 : 003.88

G  : 0.83 0.87 1.05 1.43 : 004.60

D  : 1.38 1.33 1.23 1.26 : 003.15

GD : 0.10 0.10 0.11 0.14 : 007.52

G  : 0.09 0.09 0.09 0.09 : 007.47

D  : 0.11 0.12 0.14 0.18 : 007.57

WMA9 50

99 Kbps

GD : 1.03 1.24 9.40 23.67 : 060.16

G  : 0.96 1.11 9.06 22.73 : 058.62

D  : 1.09 1.36 9.75 24.61 : 061.70

37 Kbps

GD : 1.55 1.44 7.50 24.83 : 060.86

G  : 1.50 1.39 7.47 24.82 : 060.91

D  : 1.61 1.49 7.53 24.84 : 060.81

WMA9 75

150 Kbps

GD : 1.19 1.11 1.08 1.12 : 039.90

G  : 1.73 1.60 1.51 1.61 : 042.71

D  : 0.65 0.63 0.66 0.62 : 037.09

56 Kbps

GD : 1.06 1.17 1.21 1.26 : 039.56

G  : 1.00 1.10 1.13 1.17 : 039.55

D  : 1.13 1.24 1.29 1.36 : 039.57

MP3BE256

GD : 0.88 0.90 0.93 0.95 : 002.19

G  : 0.76 0.78 0.81 0.78 : 001.67

D  : 1.00 1.03 1.05 1.12 : 002.71

GD : 0.41 0.47 0.53 0.56 : 005.42

G  : 0.36 0.41 0.46 0.50 : 005.33

D  : 0.47 0.53 0.60 0.62 : 005.51

MP3BE320

GD : 1.26 1.31 1.37 1.42 : 002.16

G  : 1.40 1.44 1.50 1.54 : 002.06

D  : 1.13 1.18 1.24 1.29 : 002.27

GD : 0.43 0.49 0.52 0.57 : 002.93

G  : 0.45 0.50 0.53 0.58 : 002.93

D  : 0.42 0.47 0.52 0.56 : 002.93

 

en dB

Cure

WMA2 96

GD : 0.85 0.83 0.86 1.05 : 004.80

G  : 0.79 0.76 0.71 0.88 : 001.81

D  : 0.92 0.91 1.01 1.23 : 007.78

WMA2 160

GD : 0.55 0.61 0.66 0.71 : 003.06

G  : 0.26 0.30 0.34 0.49 : 001.85

D  : 0.85 0.93 0.98 0.92 : 004.26

WMA9 50

87 Kbps

GD : 2.31 2.63 11.36 25.25 : 057.19

G  : 1.44 1.72 11.24 24.55 : 053.81

D  : 3.18 3.54 11.48 25.94 : 060.58

WMA9 75

142 Kbps

GD : 1.82 1.82 1.90 1.82 : 034.43

G  : 0.83 0.79 1.01 0.98 : 031.99

D  : 2.80 2.85 2.79 2.67 : 036.87

MP3BE256

GD : 0.97 0.98 1.06 1.18 : 004.66

G  : 0.96 0.96 1.01 1.25 : 004.01

D  : 0.98 1.01 1.11 1.11 : 005.31

MP3BE320

GD : 0.45 0.54 0.61 0.69 : 002.10

G  : 0.59 0.66 0.81 0.91 : 002.43

D  : 0.32 0.42 0.42 0.46 : 001.76

 

Windows Media 11

Dernière version patchée de WMPlayer 11 (Juillet 2007) : WMFSDKVersion 11.0.5721.5145

 

Ogg Vorbis

Ogg Vorbis est le seul système de compression audio streamable vraiment libre (open source) et gratuit. Prochainement : tests avec Ogg Vorbis.

 

MP3Pro

Avec BladeEnc, un des meilleurs encodeurs MP3 gratuits (pour les hauts débits seulement), les mp3 encodés à 256 Kbps ont une fréquence de coupure à 17.3 KHz :

CompMichelleShockedCDMichelleShockedMP3BE256.txt

CompMichelleShockedCDMichelleShockedMP3BE320.txt

Prochainement : tests avec MP3 Pro.

 

 

Projets

 

Interface

- Conserver les tracés dans une image (buffering) pour accélérer le réaffichage ;

- Faire un zoom sur les échantillons (pour le moment le signal complet est tracé sur tout l'écran) ;

- Interface pour modifier les options restantes dans le fichier .ini de configuration ;

- Sauver l'état des cases à cocher en quittant ;

- Bouton annuler pour interrompre la TFR sur les gros fichiers.

 

Divers

- Lire les fichiers 8 bits, ils ne sont plus supportés pour le moment, mais c'est faisable ;

- Autres infos à produire dans le fichier rapport : stéréo, 8/16 bits, taille en octets, module spectrale, ...

- Niveau sonore moyen, min. et max. de chaque spectre en dB ;

- Normalisation : elle est seulement en entrée de la TFR pour le moment. Faire la normalisation du spectre au lieu du signal d'entrée, afin de comparer avec et sans + rapidement (comme j'ai eu un peu de mal à mettre au point ce logiciel, j'ai fini par normaliser en entrée, histoire de progresser par étapes :-)

- Utilitaire pratique : normaliser le .wav en fonction de l'équilibre énergétique G-D et sauver le .wav : c'est mieux que le simple max de chaque voie, ce qui est parfois arbitraire ;

- Faire chevaucher les fenêtres temporelles sur lesquelles sont calculées les spectres afin compenser les effets de bord de la fenêtre (dans la TFR, les défauts occasionnés par le fait de limiter la fenêtre de calcul sont occultés par la discrétisation seulement pour les signaux de période entière : utiliser d'autres types de fenêtre dans le cas général, comme dans le logiciel CoolEdit ?) ;

- Comparer le spectre par exemple toutes les 5 secondes au lieu de comparer tout le morceau, cela pourrait être plus précis localement ;

- Réécrire le code source en POO : il est trop complexe tel quel pour pouvoir améliorer le logiciel.

 

Critères de qualité

- Calculer l'écart type de l'atténuation en dB sur l'ensemble des fréquences pour chaque plage ; c'est une information utile, car si l'écart type est faible, cela renforce l'information sur la qualité de conservation moyenne du signal dans cette plage ;

- Calculer le nombre de dB de chaque plage tel que la somme des contributions des plages = volume sonore globale du signal (possible ?) ;

- Définir un estimateur de dispersion asymptotique (en trompette) de part et d'autre du 100 % (ou 0 dB d'atténuation) pour les canaux D et G = coef. de dispersion = % final de qualité (tenir compte de l'énergie aussi) ;

- Estimation de la fréquence de coupure de l'algorithme de compression audio : cela pourrait être un seuil de fréquence tel que la moyenne de conservation reste supérieure à 99% par exemple, et après laquelle la moyenne diminue en dessous de ces 99% . Pour les WMA2 encodés à 96 Kbps, cette fréquence de coupure est situé vers 14 KHz, voir Les algorithmes de compression audio.

- Utiliser une pondération en dB(A) pour tenir compte de la sensibilité de l'audition humaine :

 

Calcul des décibels pondérés : db(A)

En théorie, un niveau sonore pondéré (A) représente la pression acoustique perçu par l'oreille humaine, c'est une image de l'énergie. Elle se calcule en soustrayant simplement une valeur à chaque bande de fréquence. Voici un tableau représentant cette pondération en fonction des octaves et des tiers d'octaves :

 

Fréquences

Centrales

Pondération A en dB

Bande de tiers d'octave

Bande d'octave

50

-30

 

-25

63

-26

80

-22.5

100

-19

 

-16

125

-16

160

-13.5

200

-11

 

-8.5

250

-8.5

315

-6.5

400

-5

 

-3

 

500

-3

625

-2

800

-1

 

0

1000

0

1250

0.5

1600

1

 

1

2000

1

2500

1.5

3150

1

 

1

4000

1

5000

1.5

6300

0

 

-1

8000

-1

10000

-2.5

 

Un audiogramme pour calibrer le spectre auditif personnel

Au début, je voulais faire un logiciel qui tienne compte des capacités auditives de chacun : si un mélomane a une oreille exceptionnelle, il voudra probablement numériser sa CD-thèque à un niveau de qualité supérieur à ce que les autres considèrent comme suffisamment bon. Je voulais donc inclure un mini test d'audiogramme dans le logiciel, mais DirectSound me semble encore un peu trop compliqué pour faire une chose aussi triviale qu'un beep à une fréquence donnée ! Le beep qui est donc implémenté dans VBWaveComp est celui du HP de la carte mère, il fonctionne avec le PC-Speaker qui est limité entre 40 Hz et 12 KHz, ce qui est insuffisant pour un bon audiogramme, c'est-à-dire entre 25Hz-13KHz.

Cependant, l'idée de l'audiogramme pose quand même un problème : les basses fréquences ne sont pas très discriminantes, car les algorithmes de compression se distinguent surtout à partir de 12 KHz, donc tenir compte de l'audiogramme devrait favoriser les algorithmes moins bon sur les hautes fréquences. Il faudrait peut être alors tenir compte de certains phénomènes harmoniques éventuellement audibles alors que les fréquences incriminées sont inaudibles, sinon pourquoi est-ce que les CD sont échantillonnés à 22 KHz au lieu de 14 KHz ? il y a des documents très pointus à ce sujet sur le web.

 

Voici ce que pourrait donner le mode d'emploi de VBWaveComp en tenant compte de l'audiogramme :

 

1. Calibrez VBWaveComp grâce au mini-test proposé pour estimer votre capacité auditive (ce calibrage tient compte aussi de la chaîne de restitution : il faut choisir les meilleurs conditions d'écoute) ;

2. Calculez le spectre d'un morceau original ;

3. Calculez le spectre de ce morceau compressé (puis décompressé en .wav) ;

4. Calculez fréquence par fréquence (ou plutôt par plage de fréquences) la perte de signal occasionné par la compression ;

5. Relativisez cette perte par rapport à votre capacité auditive : VBWaveComp vous donnera alors au final un % de perte audible, un % de perte global, ainsi qu'un % de perte par plage de fréquences.

 

 

Versions

 

Version 1.31 du 11/11/2007

- Correction du bug : iNbFreqTFR >= iNbEchSignal wav dans le calcul de iNbLectures.

 

Version 1.30 du 21/08/2007

- Comparaison Mono avec Stéreo : bug corrigé (log(0) évité) ;

- Limite = 23 bits TFR au lieu de 20 avant (cela fonctionne avec 1 Go de RAM, mais si on met plus de 23 bits, on obtient un Out of memory) ;

- Passage en DotNet2, compilation en mode Strict.

 

Version 1.2 du 24/10/2004

- Suppression des controles VB6 FileListBox et DirListBox ;

- Suppression des fonctions VB.xxx ;

- Application redimensionnable.

 

Version 1.1 du 19/12/2002

- J'ai enlevé les références qui sont maintenant devenues inutiles, sans que je sache pourquoi ! J'utilise toujours Microsoft.VisualBasic.Compatibility (et stdole.dll), mais plus les 13 DLL Interop.XXX.dll et AxInterop.XXX.dll, lesquelles étaient systématiquement recopiées dans le répertoire de l'exécutable au moment de la compilation. Je ne comprend pas pourquoi maintenant l'exécutable n'a plus besoin de ces Dll, mystère !

- J'ai ajouté un projet d'installation de VBWaveComp, vous pouvez maintenant re-packager le logiciel, quel luxe !

 

Version 1.0 du 14/12/2002

 

 

Liens

 

VBWaveComp a été créé à partir des contributions en VB6 :

- Afficher le waveform d'un wav, de nicolas.vp@skynet.be :

www.vbfrance.com/article.aspx?Val=3749

- Un analyseur de spectre audio numérique

www.vbfrance.com/article.aspx?Val=4075

de quabal@caramail.com, lui-même utilisant :

- Audio FFT Murphy McCauley

de MurphyMc@Concentric.NET, lui-même utilisant :

- Don Cross's FFT code pour le calcul de la TFR

 

Lecture et écriture de fichiers wave

- [.Net2] Lecture fichier .cda + Extraction piste audio d'un CD

  www.csharpfr.com/code.aspx?ID=41094

- WAVE File Processor in C#

  www.codeproject.com/useritems/WAVE_Processor_In_C_.asp

- Utilitaire pour créer des wav contenant des fréquences données : NCH Tone Generator

  www.world-voices.com/software/nchtone.html

- Générateur de fichier wav de référence pour CD de test

  www.cppfrance.com/code.aspx?ID=34327

- Compose sounds from frequencies and visualize them, By Corinna John

  What you never wanted to know about PCM

  www.codeproject.com/cs/media/wavemixer.asp

www.codeproject.com/useritems/Concatenation_Wave_Files.asp en C# 2005

- CD audio : http://fr.wikipedia.org/wiki/Disque_compact

 

TFR

- TFR : http://patrice.dargenton.free.fr/publications/these.html#_Toc483625176

- TFR en asm : www.asmfr.com/code.aspx?ID=35923

- Algo élégant : www.cppfrance.com/code.aspx?ID=44369

 

Divers

- Test audition humaine :

  www.cppfrance.com/codes/TEST-AUDIO_43468.aspx

www.cppfrance.com/codes/ACCORDEUR-GUITARE_34211.aspx

- Siffler, trouver

  www.codeproject.com/cs/webservices/What_s_That_Tune_.asp

- WMA versus MP3 : Comparaison des formats de fichier audio MP3 et WMA (Windows Media Audio V2 ou ASF)

  http://ors1.chez-alice.fr/wma_vs_mp3/wma_vs_mp3.htm

- Le pro de l'acoustique : Sphax (sphaxs@wanadoo.fr)

  www.vbfrance.com/auteurdetail.aspx?ID=11069

- Here's an electronic selection of Brüel & Kjær's popular Primers. We hope that they will provide you with a good introduction to subjects relevant to sound and vibration measurement

  www.bksv.com/2148.htm

www.intelliscore.net : wav to mid !

- Ultrason : www.csharpfr.com/codes/ANTIINDESIRABLES_38309.aspx

 

Désactiver l'AutoRun lors de l'insertion d'un CD ou d'une clé USB (anti rootkit)

Pour cela, fusionner un fichier .reg contenant :

 

REGEDIT4

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer]

"NoDriveTypeAutoRun"=dword:000000ff

 

(pour remettre la valeur par défaut : dword:00000091)

 

0x1 Disables Autoplay on drives of unknown type.

0x4 Disables Autoplay on removable drives.

0x8 Disables Autoplay on fixed drives.

0x10 Disables Autoplay on network drives.

0x20 Disables Autoplay on CD-ROM drives.

0x40 Disables Autoplay on RAM drives.

0x80 Disables Autoplay on drives of unknown type.

0xFF Disables Autoplay on all types of drives.

 

Autres codes sources utilitaires

www.codeproject.com/useritems/Enum_Recording_Devices.asp

- Capture audio en WMA : www.codeproject.com/cs/media/audiosav.asp

- .NET Implementation of an Ogg Vorbis Player

  www.codeproject.com/cs/media/OggPlayer.asp

- Windows Media

  www.microsoft.com/downloads/Browse.aspx?displaylang=fr&categoryid=4

- Via la dll ActiveX WMP

  www.codeproject.com/useritems/Play_sound_in_VBnet_with.asp

- Mixing and playing sounds with Windows Media Player

  www.codeproject.com/vb/net/SampledSoundsPlayer.asp

www.csharpfr.com/codes/AUDIO-STREAMING-LAN_43736.aspx

- Faire un plug-in Winamp en C#

  www.codeproject.com/cs/media/WinampInputPlugins.asp

 

Tags audio

www.mp3tag.de/download.html

http://de.wikipedia.org/wiki/Tag-Editor

- Assembly to read and write Ogg tags (Vorbis, FLAC and Speex)

  www.codeproject.com/cs/media/cyber_sinh.asp

- Utilitaire mp3 version 3 - éditeur des tag id3 v1, v2.*, mpeg - sauvegarde des tag id3 v1, v2.* - gestion a grande échelle des tag

  www.vbfrance.com/code.aspx?ID=6667

www.vbfrance.com/codes/EDITEUR-TAG-MP3_6487.aspx

- Using Winamp input plugins for tagging audio files

  www.codeproject.com/cs/media/WinampInputPlugins.asp

- Reading ID3 tags from a WMA file (MP3 as well)

  www.codeproject.com/vb/net/tagreader.asp

 

 

Voilà, vous avez bien compris le principe de la comparaison spectrale ? alors appliquez-le à la compression vidéo, avec une TFR en 2D + une fenêtre temporelle comme pour le signal audio, cool :-)