下面是一个用 Python 编写的简单程序,用于监测音量分贝。这个程序使用 pyaudio 库来捕获音频数据,并使用 numpy 库来计算音量分贝。你需要先安装这两个库,可以使用以下命令:

pip install pyaudio numpy

以下是完整的代码示例:

import pyaudio
import numpy as np

# 定义常量
CHUNK = 1024  # 每个缓冲区的帧数
FORMAT = pyaudio.paInt16  # 采样位数
CHANNELS = 1  # 单声道
RATE = 44100  # 采样率

def rms(data):
    """计算均方根(RMS)"""
    count = len(data) / 2
    format = "%dh" % (count)
    shorts = np.array(struct.unpack(format, data)).astype(np.float32)
    squares = (shorts ** 2).sum() / count
    return np.sqrt(squares)

def dbfs_to_db(rms_value, max_possible_value):
    """将RMS值转换为分贝(dB)"""
    if rms_value == 0:
        return -100  # 避免除以零错误
    return 20 * np.log10(rms_value / max_possible_value)

def main():
    p = pyaudio.PyAudio()

    stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

    print("开始监测音量分贝...")

    try:
        while True:
            data = stream.read(CHUNK)
            rms_value = rms(data)
            db_value = dbfs_to_db(rms_value, 32767)  # 32767 是16位整数的最大值
            print(f"当前音量分贝: {db_value:.2f} dB")
    except KeyboardInterrupt:
        print("监测已停止。")

    stream.stop_stream()
    stream.close()
    p.terminate()

if __name__ == "__main__":
    main()

代码说明
导入库:

pyaudio 用于音频输入。
numpy 用于数值计算。
定义常量:

CHUNK:每个缓冲区的帧数。
FORMAT:采样位数,这里使用16位整数。
CHANNELS:单声道。
RATE:采样率,44100 Hz。
rms函数:

计算均方根(RMS),用于表示音频信号的强度。
dbfs_to_db函数:

将RMS值转换为分贝(dB)。
main函数:

初始化 pyaudio 对象。
打开音频流,设置参数。
进入无限循环,读取音频数据,计算RMS值并转换为分贝,打印结果。
捕获 KeyboardInterrupt 异常,允许用户通过按 Ctrl+C 停止程序。
关闭音频流并终止 pyaudio 对象。
运行程序
保存上述代码到一个文件中,例如 volume_monitor.py,然后在终端中运行:

python volume_monitor.py

程序将开始监测麦克风输入的音量分贝,并实时打印结果。按 Ctrl+C 可以停止监测。

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐