Created
April 23, 2024 12:57
-
-
Save Jodaille/64a479c2b65fdd3fc1aa0477651fc8ad to your computer and use it in GitHub Desktop.
Audio analyse < 1000Hz
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import sys | |
import librosa | |
import numpy as np | |
import matplotlib.pyplot as plt | |
import glob | |
def analyze_audio(audio_file): | |
# Charger le fichier audio | |
y, sr = librosa.load(audio_file, sr=None) | |
# Calculer la transformée de Fourier à court terme (STFT) de l'enregistrement sonore | |
D = np.abs(librosa.stft(y)) | |
# Convertir la magnitude de la STFT en décibels (dB) | |
DB = librosa.amplitude_to_db(D, ref=np.max) | |
# Trouver les pics dans le spectrogramme | |
peaks = librosa.util.peak_pick(DB.max(axis=0), pre_max=3, post_max=3, pre_avg=3, post_avg=5, delta=0.5, wait=10) | |
# Convertir les indices de fréquence des pics en fréquences en Hz | |
frequencies = librosa.fft_frequencies(sr=sr) | |
# Retourner un ensemble des fréquences principales | |
return set(frequencies[peaks]) | |
def main(audio_files): | |
# Liste pour stocker les ensembles de fréquences pour chaque fichier | |
frequency_sets = [] | |
# Analyser chaque fichier audio | |
for audio_file in audio_files: | |
frequencies = analyze_audio(audio_file) | |
frequency_sets.append(frequencies) | |
# Trouver les fréquences communes | |
common_frequencies = set.intersection(*frequency_sets) | |
# Tracer le graphique des fréquences communes | |
plt.figure(figsize=(10, 6)) | |
plt.hist([list(filter(lambda x: x <= 1000, freqs)) for freqs in frequency_sets], bins=50, label=audio_files, alpha=0.7) | |
plt.title('Fréquences principales dans les fichiers audio (en-dessous de 1000 Hz)') | |
plt.xlabel('Fréquence (Hz)') | |
plt.ylabel('Nombre de occurrences') | |
plt.xticks(np.arange(0, 1001, 50)) | |
plt.legend() | |
plt.grid(True) | |
# Sauvegarder le graphique dans un fichier image | |
plt.savefig('frequences_audio.png', bbox_inches='tight') | |
# Afficher les fréquences communes | |
print("Fréquences communes au-dessus de 1000 Hz:") | |
for freq in sorted(common_frequencies): | |
if freq >= 1000: | |
print(freq) | |
if __name__ == "__main__": | |
if len(sys.argv) != 2: | |
print("Usage: python script.py chemin_vers_fichiers_audio/*.wav") | |
sys.exit(1) | |
audio_files = glob.glob(sys.argv[1]) | |
main(audio_files) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment