L'enregistrement audio uniquement lorsque quelqu'un parle est une fonctionnalité puissante qui peut être utilisée dans diverses applications, des assistants à commande vocale à l'économie d'espace de stockage en éliminant les périodes de silence. Dans ce didacticiel, vous apprendrez à écrire du code Python qui démarre l'enregistrement lorsqu'il détecte une parole et s'arrête lorsqu'un silence est détecté.
Avant de plonger, assurez-vous d'avoir les éléments suivants :
Nous utiliserons les bibliothèques suivantes :
Vous pouvez les installer en utilisant pip :
pip install pyaudio webrtcvad numpy
Tout d'abord, configurons le flux audio pour capturer l'entrée audio de votre microphone.
import pyaudio # Audio configuration FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 CHUNK = 1024 # Initialize PyAudio audio = pyaudio.PyAudio() # Open stream stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK)
Nous utiliserons la bibliothèque webrtcvad pour détecter quand quelqu'un parle. La bibliothèque peut classer les images audio comme vocales ou non vocales.
import webrtcvad # Initialize VAD vad = webrtcvad.Vad() vad.set_mode(1) # 0: Aggressive filtering, 3: Less aggressive def is_speech(frame, sample_rate): return vad.is_speech(frame, sample_rate)
Maintenant, capturons en continu les images audio et vérifions si elles contiennent de la parole.
def record_audio(): frames = [] recording = False print("Listening for speech...") while True: frame = stream.read(CHUNK) if is_speech(frame, RATE): if not recording: print("Recording started.") recording = True frames.append(frame) else: if recording: print("Silence detected, stopping recording.") break # Stop and close the stream stream.stop_stream() stream.close() audio.terminate() return frames
Enfin, sauvegardons l'audio enregistré dans un fichier .wav.
import wave def save_audio(frames, filename="output.wav"): wf = wave.open(filename, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(audio.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() # Example usage frames = record_audio() save_audio(frames) print("Audio saved as output.wav")
Avec seulement quelques lignes de code, vous avez implémenté un programme Python qui détecte la parole et enregistre uniquement les parties parlées, ignorant le silence. Cette technique est particulièrement utile pour créer des systèmes efficaces à commande vocale.
N'hésitez pas à expérimenter l'agressivité et les paramètres audio du VAD en fonction de vos besoins spécifiques. Bon codage ! ????
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!