僅在有人說話時錄製音頻是一項強大的功能,可用於各種應用程序,從語音激活助手到通過消除靜音期來節省存儲空間。在本教學中,您將學習如何編寫 Python 程式碼,在偵測到語音時開始錄音,並在偵測到靜音時停止錄音。
先決條件
開始之前,請確保您具備以下條件:
-
Python 3.x 安裝在您的系統上。
- Python 基礎。
- 熟悉 pyaudio、numpy 和 webrtcvad 等 Python 函式庫。
第 1 步:安裝所需的庫?
我們將使用以下函式庫:
-
pyaudio:用於從麥克風捕獲音訊。
-
webrtcvad:用於語音活動偵測。
-
numpy:用於處理音訊資料。
您可以使用 pip 安裝它們:
1 | pip install pyaudio webrtcvad numpy
|
登入後複製
第 2 步:設定音訊串流?
首先,讓我們設定音訊串流以捕捉來自麥克風的音訊輸入。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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 函式庫來偵測某人何時說話。該庫可以將音訊幀分類為語音或非語音。
1 2 3 4 5 6 7 8 | 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 步:捕捉和處理音訊幀?
現在,讓我們連續捕獲音訊幀並檢查它們是否包含語音。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 檔案。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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中文網其他相關文章!