Discrete Fourier Transform : Let's play with the audio spectrum


Description

Petite application pour calculer le spectre d’un fichier audio (.wav) au moyen
de la Transformée de Fourier Discrète en utilisant l’algorithme de la
Transformée de Fourier Rapide.

Je ne charge pas le fichier WAV en mémoire : Je le parcours octet par octet et
je calcule les coefficients de la Transformée de Fourier Discrète au fur et à
mesure. Je ne stocke que la moitié des coefficients. L’autre moitié, c’est le
conjugué complexe… Tout simplement.

Une fois que j’ai les coefficients (le spectre), je crée un fichier bitmap.
Comment lire le bitmap : De gauche à droite, le temps qui passe. De bas en haut
les fréquences (bas = basses fréquences, haut = hautes fréquences). La couleur
donne une indication sur l’intensité de la fréquence (du noir au blanc en
passant par une gamme de couleurs froides (bleus > violets) vers des couleurs
chaudes (rouges > jaunes)).

Le programme permet d’intervenir directement sur les coefficients de la TFD via
un fichier bitmap (256 couleurs) qui s’appliquera comme un calque sur le
spectre.
/! Ce fichier BMP filtre doit avoir les mêmes dimensions que le BMP du spectre
audio.

Deux possibilités sont offertes :

1/ Incruster des images ou des messages dans le spectre.
Dans l’exemple fournis, j’insère un petit texte dans les hautes fréquences. Si
tu cherches « stripes spectrogram » sur youtube, tu auras un autre exemple de ce
qui est possible de faire.

2/ Filtrer le fichier audio.
Permet de supprimer (ou de doubler) la valeur des coefficients du spectre. Il
faut jongler avec deux instances de Paint pour concevoir le fichier filtre afin
de bien positionner les pixels du filtre sur le coefficient à modifier. Bon, je
sais, c’est pas génial comme méthode. C’est pour cette raison que je fournis un
exemple. Le gris (valeur de 128) = On ne touche pas à la valeur du coefficient.
Le noir (valeur 0) = On annule le coefficient. Le blanc (valeur 255) = On double
la valeur du coefficient. On voit qu'il s'agit d'un facteur de 0 à 2.
Ainsi, tu peux éliminer des fréquences parasites (comme les sifflements aiguës
qui se traduisent par des lignes horizontales dans le spectre) ou des extraits
(dans l’exemple que je fournis, j’efface les passages où le gars tape dans les
mains).

Enfin, à partir du spectre ainsi filtré, je reconstruis le fichier WAV en
faisant la transformée inverse (Transformée de Fourier Discrète Inverse).



Compute the audio spectrum (DFT coefficients) using the Fast Fourier Transform
algorithm.
You can apply a filter (designed with MS-paint) to remove some audio components.
Or you can insert a picture or a message in the high frequencies.

The bmp filter file is a 256 colors bitmap (scale of grey from black to white).
Filter mode: Black cancel a DFT coefficient. White double the value. 127 grey
multiply it by 1 (do nothing).
Overlay mode: Insert the bmp into the spectrum. Adjust the intensity parameter
if the noise is to present when you play the audio wav file.

Examples:

1/ Eliminate the claps.
Load the clapper.wav file with the DFT nbr of coefficient = 7 (128 samples).
Apply the filter clapper_filter.bmp to cancel the claps (filter mode, average
grey level = 127).
You'll get a clapper_filter.wav as the result.

2/ Insert a picture or a hidden message inside the audio spectrum.
Load the clapper.wav file with the DFT nbr of coefficient = 9 (521 samples).
Apply the picture clapper_hidden_message.bmp in overlay mode in order to hide a
message in the high frequencies (/! Intensity = 1 with that little wav file).
You'll get a clapper_filter.wav as the result.

==> Check the spectrum of clapper_filter.wav to see the result!

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.