誰かが話しているときのみ音声を録音することは、音声起動アシスタントから無音期間を排除してストレージ容量を節約するまで、さまざまなアプリケーションで使用できる強力な機能です。このチュートリアルでは、音声を検出すると録音を開始し、無音を検出すると停止する 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 中国語 Web サイトの他の関連記事を参照してください。