Logiciels multimédia en console

Analyse spectrale de fichiers audio (théorie et pratique sous Linux)

Table des matières

logo_analyse_spectrale



Introduction



Dans cet article, nous allons voir comment déterminer la qualité audio d'un fichier, à travers l'analyse spectrale du morceau sous Linux.
C'est un peu différent de ce que je fais sur le site, mais j'avais envie de vous partager ces éléments.

Comme vous le savez, je suis DJ en plus de mon métier de sysadmin, et évidemment, lorsque vous envoyez du son sur un bon système son, il ne faut pas avoir un morceau extrait d'une piste Youtube.

En récupérant des fichiers audio, il est peut être indiqué que c'est un fichier MP3 de haute qualité. Parfois, on aura même des fichiers en FLAC ou en AIFF. Cependant, un fichier MP3 128kbps reconverti en MP3 320kbps ou en AIFF n'en fait pas un fichier audio de qualité, car on part d'une source de piètre qualité.

L'analyse spectrale est une excellente méthode pour déterminer la qualité réelle d'un fichier (et donc son débit réel).

A travers cet article, j'ai envie de vous expliquer un peu la théorie concernant l'audio, notamment sur le MP3 encore très populaire mais universel, puis on va voir comment analyser le spectre d'un fichier audio en pratique et en déduire le débit binaire.

Un peu de théorie pour comprendre



En introduction je vous ai parlé de l'analyse spectrale, mais ... qu'est ce que c'est au juste une analyse spectrale ?

L'analyse spectrale est une méthode qui permet d'examiner un son en fonction de son spectre de fréquences, c'est-à-dire les différentes fréquences qui composent ce son. Pour cela, on utilise souvent des calculs comme la transformation de Fourier rapide (FFT) , qui fournit une représentation graphique des fréquences présentes dans le son.

Avant d'aborder la partie pratique avec des outils sous Linux, voici quelques concepts théoriques concernant les fichiers MP3 (c'est similaire avec tous les formats de compression avec perte tel que le OGG (libvorbis).

La qualité d'un fichier MP3 est directement liée à son débit binaire, qui est le nombre de bits d'information contenus par seconde, mesuré en kilobits par seconde (kbps). Un débit plus élevé signifie qu'il y a plus d'informations par seconde, ce qui se traduit par une meilleure qualité sonore.
Les débits courants pour les fichiers MP3 sont de 128 kbps, 192 kbps, 256 kbps et 320 kbps. Ainsi, un fichier à 320 kbps offre une qualité sonore supérieure à celle d'un fichier à 128 kbps.

À des débits plus bas, certaines fréquences sont éliminées pour réduire la taille du fichier. Les encodeurs MP3 utilisent un seuil de fréquence pour décider quelles informations supprimer. L'analyse spectrale permet de visualiser ce seuil et, par conséquent, d'évaluer le débit binaire d'un fichier.

Les lecteurs de musique ou lecteurs de métadonnées indiquent généralement le débit binaire d'un fichier MP3 mais cette information peut être falsifiée. Sur des grosses sonos, un bon casque ou des écouteurs de qualité, ça s'entend à l'oreille. En effet, un fichier peut indiquer qu'il est à 320 kbps alors qu'il est en réalité à 128 kbps.
Exemple: Lorsqu'on transcode un fichier d'un débit plus élevé à un débit plus bas, on va perdre des informations, et il est impossible de récupérer ces données perdues (c'est une compression avec perte). Mais, si on essaye de transcoder un fichier de 128 kbps à 320 kbps, le lecteur de musique peut afficher un débit de 320 kbps, le fichier sera plus lourd également, cependant la qualité sonore restera celle du fichier original à 128 kbps. Dans ce cas, il y a tromperie sur la marchandise.

Pour information, l'oreille humaine est capable de percevoir une gamme de fréquences sonores allant généralement de 20 Hz à 20 kHz. Elle est plus sensible aux fréquences comprises entre 1 kHz et 5 kHz (les fréquences de notre voix).
Une fréquence basse correspondra à un son perçu grave, une fréquence élevée correspondra à un son perçu aigu.
A noter que plus on vieillit, moins on entend les fréquences aigües (fréquences supérieures à 15kHz).

Passons à la pratique



Outils et échantillon utilisés



Il existe de nombreux outils d'analyse spectrale. ici, j'utiliserai comment procéder avec le couteau suisse sox qui est un puissant outil de ligne de commande pour le traitement audio. On en a déjà parlé dans cet article : sox : Le couteau suisse de la manipulation audio
Des outils graphiques comme Audacity permettent aussi d'afficher ces analyses spectrales, mais je les trouve moins claires. ffmpeg sait aussi le faire mais il est plus long à traiter le fichier.

Dans cet exemple, je vais partir sur le titre Something So Good de l'amie NAIAD. Si vous l'aimez, vous pouvez l'acheter sur Bandcamp !
J'ai le privilège d'avoir les morceaux de NAIAD sortis de la masterisation et avant sa commercialisation pour les jouer en avant première. J'ai donc en ma possession le fichier : NAIAD - Something So Good (Original Mix) - 2023.aiff.
Pour raccourcir les commandes, je vais appeler le fichier NAIAD.aiff

Pour rappel, le format AIFF est un format non compressé offrant une qualité audio élevée et sans perte.

Voici les spécifications du fichier :
Code TEXT :
Input File     : 'NAIAD.aiff'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:06:33.07 = 17334426 samples = 29480.3 CDDA sectors
File Size      : 69.4M
Bit Rate       : 1.41M
Sample Encoding: 16-bit Signed Integer PCM



Analyse du son original



On va analyser le fichier source haute qualité avec sox ainsi :
Code BASH :
sox NAIAD.aiff -n spectrogram -o spectre_aiff.png -t NAIAD.aiff


Ce qui donne :


spectre_aiff



Conversion du son en MP3 avec plusieurs bitrates



On va convertir ce son au format AIFF en plusieurs MP3, avec différentes compression.

En MP3 320kbps :
Code BASH :
sox NAIAD.aiff -C 320 NAIAD_320.mp3


En MP3 256kbps :
Code BASH :
sox NAIAD.aiff -C 256 NAIAD_256.mp3


En MP3 192kbps :
Code BASH :
sox NAIAD.aiff -C 192 NAIAD_192.mp3


En MP3 128kbps :
Code BASH :
sox NAIAD.aiff -C 128 NAIAD_128.mp3


Et on va créer un faux MP3 320kbps, à partir du MP3 128kbps :
Code BASH :
sox NAIAD_128.mp3 -C 320 NAIAD_320_fake.mp3


On regarde rapidement la taille des fichiers :
Code TEXT :
6,0M    NAIAD_128.mp3
9,0M    NAIAD_192.mp3
13M    NAIAD_256.mp3
16M    NAIAD_320_fake.mp3
16M    NAIAD_320.mp3
67M    NAIAD.aiff


Analyse des fichiers MP3



On va générer les spectrogrammes des différents fichiers générés :
Code BASH :
sox NAIAD_320.mp3 -n spectrogram -o spectre_mp3_320.png -t NAIAD_320.mp3

Code BASH :
sox NAIAD_256.mp3 -n spectrogram -o spectre_mp3_256.png -t NAIAD_256.mp3

Code BASH :
sox NAIAD_192.mp3 -n spectrogram -o spectre_mp3_192.png -t NAIAD_192.mp3

Code BASH :
sox NAIAD_128.mp3 -n spectrogram -o spectre_mp3_128.png -t NAIAD_128.mp3


Ce qui donne respectivement :


spectre_mp3_320


spectre_mp3_256


spectre_mp3_192


spectre_mp3_128



On constate donc que la compression supprime des fréquences sur le fichier MP3 :
- En MP3 320kbps : Les fréquences au delà de 20,2 kHz environ sont supprimées
- En MP3 256kbps : Les fréquences au delà de 19,4 kHz environ sont supprimées
- En MP3 192kbps : Les fréquences au delà de 18,8 kHz environ sont supprimées
- En MP3 256kbps : Les fréquences au delà de 16,8 kHz environ sont supprimées
Pour être précis dans mes chiffres, j'ai généré les graphes avec une échelle plus grande.

Je ne peux pas vous mettre les extraits ici, mais si on écoute le morceau, on constate bien que plus le débit diminue, une dégradation de la qualité se fait sentir (test avec le casque DJ). Cependant, je pense que sur un téléphone mobile ou des haut-parleurs intégrés de PC, on entend peu la différence, ces équipements sont de piètre qualité.


Analyse du faux MP3 320kbps



Maintenant, au tour du faux MP3 320kbps.
C'est en réalité celui de 128kbps au son dégradé réencodé en mp3 320kbps et qui a une taille en Mo quasiment équivalente au MP3 320 :
Code TEXT :
16M    NAIAD_320_fake.mp3
16M    NAIAD_320.mp3


Avec les métadonnées, impossible de les différencier. Pour lire les métadonnées avec sox :
Code BASH :
sox --i NAIAD*320*


Ce qui donne :
Code :
Input File     : 'NAIAD_320_fake.mp3'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:06:33.12 = 17336724 samples = 29484.2 CDDA sectors
File Size      : 15.7M
Bit Rate       : 320k
Sample Encoding: MPEG audio (layer I, II or III)
Input File     : 'NAIAD_320.mp3'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:06:33.12 = 17336724 samples = 29484.2 CDDA sectors
File Size      : 15.7M
Bit Rate       : 320k
Sample Encoding: MPEG audio (layer I, II or III)


Cependant, si on lance l'analyse spectrale :
Code BASH :
sox NAIAD_320_fake.mp3 -n spectrogram -o spectre_mp3_320_fake.png -t NAIAD_320_fake.mp3


On voit clairement que les fréquences au delà de 16,8 kHz environ sont supprimées :

spectre_mp3_320_fake



Quelques valeurs sur différents formats et différentes compressions



J'ai poussé quelques tests avec plusieurs formats :
- Format AIFF : non compressé
- Format FLAC : compressé sans perte
- Format MP3 : compressé avec perte (donc destruction du fichier)
- Format OGG (libvorbis) : compressé avec perte (donc destruction du fichier)

Format / Qualité Taille en Mo Fréquences supprimées
AIFF 69,4 Mo Au delà de 22kHz
FLAC 50,1 Mo Au delà de 22kHz
OGG (10 ~485kbps) 23,8 Mo Au delà de 21,3kHz
OGG (9 ~351kbps) 17,2 Mo Au delà de 21,0kHz
OGG (8 ~291kbps) 14,3 Mo Au delà de 20,8kHz
OGG (7 ~246kbps) 12,1 Mo Au delà de 20,6kHz
OGG (5 ~166kbps) 8.18 Mo Au delà de 20,2 kHz
OGG (3 ~118kbps) 5,80 Mo Au delà de 18,5 kHz
MP3 320kbps 15,7 Mo Au delà de 20,2 kHz
MP3 256kbps 12,6 Mo Au delà de 19,4 kHz
MP3 192kbps 9,43 Mo Au delà de 18,8 kHz
MP3 128kbps 6,29 Mo Au delà de 16,8 kHz


Quelques conclusions



AIFF vs FLAC vs MP3 320kbps vs OGG qualité 10



Voici les spectres des différents formats :

AIFF : non compressé
spectre_aiff



FLAC : compression sans perte
spectre_flac



Format OGG (libvorbis) - compressé avec perte (meilleure qualité ~500kbps)
spectre_ogg_10



Format MP3 - compressé avec perte (meilleure qualité 320kbps)
spectre_mp3_320




Curiosités de compression MP3 vs OGG



Il y a quand même quelque chose que j'ai remarqué entre le MP3 et le OGG (libvorbis) :
- Le MP3 coupe les fréquences à un seuil plutôt exact
- Le OGG (libvorbis) semble être plus intelligent dans la compression (de 10 à 5) , ce qui "semble" dégrader moins le fichier.

Regardez la différence entre le MP3 320kbps et le OGG (libvorbis) qualité 7 (~246kbps) :

spectre_mp3_320


spectre_ogg_7


Cette page a été vue 250 fois