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

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

WBOY
發布: 2024-08-29 20:30:10
原創
493 人瀏覽過

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 安裝它們:

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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板