Skip to content

Instantly share code, notes, and snippets.

@Jodaille
Created April 23, 2024 12:57
Show Gist options
  • Save Jodaille/64a479c2b65fdd3fc1aa0477651fc8ad to your computer and use it in GitHub Desktop.
Save Jodaille/64a479c2b65fdd3fc1aa0477651fc8ad to your computer and use it in GitHub Desktop.
Audio analyse < 1000Hz
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