首页  >  文章  >  后端开发  >  如何用Python录制音频:自动检测语音和静音

如何用Python录制音频:自动检测语音和静音

WBOY
WBOY原创
2024-08-29 20:30:10389浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn