监测音量分贝Python 编写的简单程序

下面是一个用 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 可以停止监测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yehaiwz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值