Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Merakam Audio dalam Python: Mengesan Pertuturan dan Senyap Secara Automatik

Cara Merakam Audio dalam Python: Mengesan Pertuturan dan Senyap Secara Automatik

WBOY
WBOYasal
2024-08-29 20:30:10359semak imbas

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

Merakam audio hanya apabila seseorang sedang bercakap ialah ciri berkuasa yang boleh digunakan dalam pelbagai aplikasi, daripada pembantu yang diaktifkan suara kepada menjimatkan ruang storan dengan menghapuskan tempoh senyap. Dalam tutorial ini, anda akan belajar cara menulis kod Python yang mula merakam apabila ia mengesan pertuturan dan berhenti apabila senyap dikesan.

Prasyarat

Sebelum menyelam, pastikan anda mempunyai perkara berikut:

  • Python 3.x dipasang pada sistem anda.
  • Pengetahuan asas Python.
  • Kebiasaan dengan perpustakaan Python seperti pyaudio, numpy dan webrtcvad.

Langkah 1: Pasang Perpustakaan Diperlukan ?

Kami akan menggunakan perpustakaan berikut:

  • pyaudio: Untuk menangkap audio daripada mikrofon anda.
  • webrtcvad: Untuk pengesanan aktiviti suara.
  • numpy: Untuk mengendalikan data audio.

Anda boleh memasangnya menggunakan pip:

pip install pyaudio webrtcvad numpy

Langkah 2: Menyediakan Strim Audio ?

Mula-mula, mari sediakan strim audio untuk menangkap input audio daripada mikrofon anda.

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)

Langkah 3: Melaksanakan Pengesanan Aktiviti Suara (VAD) ?

Kami akan menggunakan perpustakaan webrtcvad untuk mengesan apabila seseorang bercakap. Pustaka boleh mengklasifikasikan bingkai audio sebagai pertuturan atau bukan pertuturan.

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)

Langkah 4: Menangkap dan Memproses Bingkai Audio ?

Sekarang, mari tangkap bingkai audio secara berterusan dan semak sama ada ia mengandungi pertuturan.

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

Langkah 5: Menyimpan Audio yang Dirakam ?

Akhir sekali, mari simpan audio yang dirakam ke fail .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")

Kesimpulan ?

Dengan hanya beberapa baris kod, anda telah melaksanakan program Python yang mengesan pertuturan dan merekodkan bahagian pertuturan sahaja, mengabaikan senyap. Teknik ini amat berguna untuk mencipta sistem diaktifkan suara yang cekap.

Jangan ragu untuk mencuba dengan keagresifan VAD dan tetapan audio untuk memenuhi keperluan khusus anda. Selamat mengekod! ?‍???‍?


Atas ialah kandungan terperinci Cara Merakam Audio dalam Python: Mengesan Pertuturan dan Senyap Secara Automatik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn