首頁  >  文章  >  後端開發  >  如何用Python錄製音訊:自動偵測語音和靜音

如何用Python錄製音訊:自動偵測語音和靜音

WBOY
WBOY原創
2024-08-29 20:30:10362瀏覽

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

僅在有人說話時錄製音頻是一項強大的功能,可用於各種應用程序,從語音激活助手到通過消除靜音期來節省存儲空間。在本教學中,您將學習如何編寫 Python 程式碼,在偵測到語音時開始錄音,並在偵測到靜音時停止錄音。

先決條件

開始之前,請確保您具備以下條件:

  • Python 3.x 安裝在您的系統上。
  • Python 基礎。
  • 熟悉 pyaudio、numpy 和 webrtcvad 等 Python 函式庫。

第 1 步:安裝所需的庫?

我們將使用以下函式庫:

  • pyaudio:用於從麥克風捕獲音訊。
  • webrtcvad:用於語音活動偵測。
  • numpy:用於處理音訊資料。

您可以使用 pip 安裝它們:

pip install pyaudio webrtcvad numpy

第 2 步:設定音訊串流?

首先,讓我們設定音訊串流以捕捉來自麥克風的音訊輸入。

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)

第 3 步:實施語音活動偵測 (VAD)?

我們將使用 webrtcvad 函式庫來偵測某人何時說話。該庫可以將音訊幀分類為語音或非語音。

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)

第 4 步:捕捉和處理音訊幀?

現在,讓我們連續捕獲音訊幀並檢查它們是否包含語音。

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

步驟 5:儲存錄製的音訊?

最後,讓我們將錄製的音訊儲存到 .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")

結論 ?

僅用幾行程式碼,您就實現了一個 Python 程序,該程序可以檢測語音並僅記錄說話部分,忽略靜音部分。該技術對於創建高效的語音啟動系統特別有用。

請隨意嘗試 VAD 攻擊性和音訊設置,以滿足您的特定需求。快樂編碼! ??‍??‍?


以上是如何用Python錄製音訊:自動偵測語音和靜音的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn