僅在有人說話時錄製音頻是一項強大的功能,可用於各種應用程序,從語音激活助手到通過消除靜音期來節省存儲空間。在本教學中,您將學習如何編寫 Python 程式碼,在偵測到語音時開始錄音,並在偵測到靜音時停止錄音。
開始之前,請確保您具備以下條件:
我們將使用以下函式庫:
您可以使用 pip 安裝它們:
pip install pyaudio webrtcvad numpy
首先,讓我們設定音訊串流以捕捉來自麥克風的音訊輸入。
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)
我們將使用 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)
現在,讓我們連續捕獲音訊幀並檢查它們是否包含語音。
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
最後,讓我們將錄製的音訊儲存到 .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中文網其他相關文章!