Bonjour,
j'ai pour objectif d'utiliser le codage de Huffman pour réduire le poids d'un fichier audio wav. J'ai pour l'instant un algorithme qui réalise le codage de Huffman sur un texte. A travers mes recherches j'ai cru comprendre que pour utiliser Huffman sur un son il fallait utiliser la transformée de Fourier rapide (FFT), n'y connaissant pas grand chose j'ai trouvé un code qui semble bien fonctionner. Cependant en sortie il me renvoie la liste des fréquences mais il n'y a aucune redondance, ce qui est très problématique vu que c'est la base de Huffman. J'ai testé plusieurs échantillons sonores qui étaient pourtant assez répétitifs… Voici le code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import numpy as np from scipy.io.wavfile import read Fe, signal = read('oiseau.wav') N = len(signal) Duree = N / Fe plt.figure(1) plt.clf() T = np.linspace(0,Duree, N) plt.subplot(2,1,1) plt.title("Fichier Audio : signal et Spectre") plt.xlabel("Durée (en sec.)") plt.plot(T, signal) from scipy.fftpack import fft, fftfreq tfd_signal = fft(signal) # TFD du signal freq_signal = fftfreq(N, 1./Fe) # Fréquences l=int(len(freq_signal)/2-1) plt.subplot(2,1,2) plt.xlabel("Fréquence (en Hz)") plt.plot(freq_signal[1:l],abs(tfd_signal[1:l])) plt.show() |
Voici le lien de l’enregistrement sonore.
J'ai pu comparer le spectre temporel en sortie avec celui que me donne le logiciel Audacity et ça colle bien, donc l'algo semble bien tourner. Du coup je me demande si je n'ai juste pas bien compris comment fonctionne la compression du son via FFT+Huffman…
Merci de m'éclairer.