Traitement audio avec Python
Parfois, lors de la programmation, nous devons passer par des étapes de traitement audio. Certaines des tâches de traitement audio les plus utilisées dans la programmation incluent le chargement et l’enregistrement de fichiers audio, la division et l’ajout de fichiers audio en segments, la création de fichiers audio mixtes à l’aide de différentes données, la manipulation des niveaux sonores, l’application de certains filtres et la génération de réglages audio et peut-être plus.
Tous ces types de choses peuvent être réalisés avec Python. Python est un langage flexible ; il fournit des bibliothèques pour presque toutes les tâches dont vous avez entendu parler. Pour le traitement audio, Python fournit Pydub, qui est un module très simple et bien conçu.
Sommaire
Installer Pydub
Comme tous les autres modules de Python, Pydub peut également être facilement installé à l’aide d’une simple commande – pip install pydub.
Traitement audio : chargement et lecture
AudioSegment est la classe parente dans Pydub. Il joue le rôle d’un conteneur qui peut charger, manipuler et enregistrer des fichiers audio. Créons notre premier audio avec python. Pour cela, nous aurons besoin d’un fichier de test, qui pourrait être dans n’importe quel format comme WAV, MP3 ou n’importe qui. Dans cet article, je vais télécharger un fichier audio comme nous récupérons des données sur le Web :
import urllib.request from pydub import AudioSegment from pydub.playback import play # Download an audio file urllib.request.urlretrieve("https://tinyurl.com/wx9amev", "metallic-drums.wav") # Load into PyDub loop = AudioSegment.from_wav("metallic-drums.wav") # Play the result play(loop)
Traitement audio de base
Comme nous avons chargé notre audio, nous pouvons maintenant effectuer différents types de traitement audio, commençons par quelques étapes nécessaires en répétant un fichier audio :
# Repeat 2 times loop2 = loop * 2 # Get length in milliseconds length = len(loop2) # Set fade time fade_time = int(length * 0.5) # Fade in and out faded = loop2.fade_in(fade_time).fade_out(fade_time)
Superposition audio
Ci-dessus, nous avons simplement répété l’audio, maintenant superposons et mixons différents segments audio avec différents niveaux de manipulation :
# Download another loop urllib.request.urlretrieve("https://tinyurl.com/yx3k5kw5", "beat.wav") # Load into PyDub beat = AudioSegment.from_wav("beat.wav") # Mix with our original loop mixed = beat[:length].overlay(loop2)
Traitement audio : appliquer des filtres
Maintenant, allons plus loin en rassemblant tout en appliquant des filtres et en inversant les effets audio :
# Filter the beat at 3kHz filtered = beat.low_pass_filter(3000) # Mix loop2 with a reversed, panned version loop = loop2.reverse().pan(-0.5).overlay(loop2.pan(0.5)) # Mix our filtered beat with the new loop at -3dB final = filtered.overlay(loop2 - 3, loop=True)
Maintenant, si vous souhaitez enregistrer votre fichier audio, vous pouvez facilement le faire comme ci-dessous :
final.export("final.mp3", format="mp3")
Synthétiser des mélodies
Outre toutes les étapes de manipulation du son que nous avons décrites ci-dessus, nous pouvons également synthétiser de nouveaux sons. Ces tonalités peuvent être sinusoïdales, carrées, manipulant des ondes à n’importe quelle fréquence. Nous pouvons également effectuer du bruit blanc. Dans l’exemple ci-dessous, je vais montrer la méthode sinusoïdale pour produire un réglage sinusoïdal pour les 15 premiers intervalles de manière harmonique :
# Create an empty AudioSegment result = AudioSegment.silent(duration=0) # Loop over 0-14 for n in range(15): # Generate a sine tone with frequency 200 * n gen = Sine(200 * n) # AudioSegment with duration 200ms, gain -3 sine = gen.to_audio_segment(duration=200).apply_gain(-3) # Fade in / out sine = sine.fade_in(50).fade_out(100) # Append the sine to our result result += sine # Play the result play(result)
J’espère que vous avez aimé cet article sur le traitement audio avec Python. N’hésitez pas à poser vos précieuses questions dans la section des commentaires ci-dessous.