ホームページ  >  記事  >  バックエンド開発  >  Python で音声を録音する方法: 音声と沈黙を自動的に検出する

Python で音声を録音する方法: 音声と沈黙を自動的に検出する

WBOY
WBOYオリジナル
2024-08-29 20:30:10358ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。