Maison > développement back-end > Tutoriel Python > Comment enregistrer de l'audio en Python : détecter automatiquement la parole et le silence

Comment enregistrer de l'audio en Python : détecter automatiquement la parole et le silence

WBOY
Libérer: 2024-08-29 20:30:10
original
402 Les gens l'ont consulté

How to Record Audio in Python: Automatically Detect Speech and Silence

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é.

Conditions préalables

Avant de plonger, assurez-vous d'avoir les éléments suivants :

  • Python 3.x installé sur votre système.
  • Connaissance de base de Python.
  • Familiarité avec les bibliothèques Python comme pyaudio, numpy et webrtcvad.

Étape 1 : Installer les bibliothèques requises ?

Nous utiliserons les bibliothèques suivantes :

  • pyaudio : Pour capturer l'audio de votre microphone.
  • webrtcvad : Pour la détection de l'activité vocale.
  • numpy : Pour gérer les données audio.

Vous pouvez les installer en utilisant pip :

pip install pyaudio webrtcvad numpy
Copier après la connexion

Étape 2 : Configuration du flux audio ?

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)
Copier après la connexion

Étape 3 : Mise en œuvre de la détection d'activité vocale (VAD) ?

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)
Copier après la connexion

Étape 4 : Capturer et traiter les images audio ?

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
Copier après la connexion

Étape 5 : Sauvegarder l'audio enregistré ?

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")
Copier après la connexion

Conclusion ?

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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal