首页 > 其他分享 >计算实时分贝值

计算实时分贝值

时间:2023-04-28 17:57:44浏览次数:29  
标签:音频 db 分贝 实时 计算 np data pyaudio

首先安装依赖:

sudo apt install -y portaudio19-dev
pip install pyaudio

接着运行程序,记得插入麦克风

import numpy as np
import scipy.signal as signal
import pyaudio

# 创建PyAudio对象
pa = pyaudio.PyAudio()

# 打开音频输入流
stream = pa.open(format=pyaudio.paInt16, channels=1, rate=44100, input=True, frames_per_buffer=1024)

# 生成A加权滤波器
b, a = signal.A_weighting(44100)

while True:
    # 从音频输入流中读取数据
    data = np.frombuffer(stream.read(1024), dtype=np.int16)
    
    # 将音频信号转换为频域信号
    freq, spec = signal.welch(data, fs=44100, nperseg=1024, scaling='spectrum')
    
    # 计算每个频率的功率谱密度
    psd = spec / (freq[1] - freq[0])
    
    # 将功率谱密度转换为分贝值
    db = 10 * np.log10(signal.lfilter(b, a, psd))
    
    # 对所有频率的分贝值取平均值,得到整个音频的实时分贝大小
    db_avg = np.mean(db)
    
    # 打印实时分贝大小
    print('Real-time dB level: {:.2f} dB'.format(db_avg))

方法2:

# 导入所需的库
import pyaudio
import numpy as np

# 定义一些参数
CHUNK = 1024 # 每次读取的音频数据的大小
FORMAT = pyaudio.paInt16 # 音频数据的格式
CHANNELS = 1 # 音频数据的通道数
RATE = 44100 # 音频数据的采样率
REF_LEVEL = 20 # 参考分贝值,用于计算相对分贝值

# 创建一个pyaudio对象
pa = pyaudio.PyAudio()

# 打开一个音频流,用于获取音频输入
stream = pa.open(format=FORMAT,
                channels=CHANNELS,
                rate=RATE,
                input=True,
                frames_per_buffer=CHUNK)

# 定义一个函数,用于计算分贝值
def calculate_decibel(data):
    # 将音频数据转换为numpy数组
    data = np.frombuffer(data, dtype=np.int16)
    # 计算音频数据的均方根值(RMS)
    rms = np.sqrt(np.mean(data**2))
    # 计算相对分贝值,使用20微帕斯卡作为参考声压级
    db = 20 * np.log10(rms / REF_LEVEL)
    # 返回分贝值
    return db

# 定义一个循环,用于不断地读取音频数据并计算分贝值
while True:
    # 读取一段音频数据
    data = stream.read(CHUNK)
    # 计算分贝值
    db = calculate_decibel(data)
    # 打印分贝值
    print(f"Decibel level: {db:.2f} dB")

标签:音频,db,分贝,实时,计算,np,data,pyaudio
From: https://www.cnblogs.com/tiansz/p/17362840.html

相关文章

  • 在jupyterlab中使用按钮控制matplotlib绘图,并实时更新绘图
    直接上代码importmatplotlib.pyplotaspltimportnumpyasnpimportipywidgetsaswidgetsimporttimefromIPython.displayimportJavascript,display,clear_output,update_displayclassPltTest:def__init__(self):self.output=widgets.Output......
  • 模型的显存和参数量计算
    模型的显存和参数量计算https://blog.csdn.net/weixin_49305813/article/details/119179849https://blog.csdn.net/NODIECANFLY/article/details/102854842......
  • 量子相关计算基本操作
    NOT,SWAPC-NOT量子门量子门NOT门NOT:输入与输出相反。量子门SWAP门SWAP:交换两个输入量子门C-NOT门 C-NOT:Controlled-NOT根据控制位决定输入是否变为相反的值。控制位为0,输出为目标值原值;控制位为1,输出为目标值的非值。此过程控制位的值保持不变。 C-NOT门中,控制位也......
  • OpenCV实现停车场车位实时检测
    目录1.数据预处理(1)背景过滤(2)边缘检测(3)停车场区域提取2.确定停车位(1)霍夫变换检测直线(2)过滤霍夫变换检测到的直线(3)以列为单位,划分停车位(4)锁定每个车位(5)截取出每个停车位的图像,作为训练模型的数据。3.模型训练及预测(1)模型训练(2)模型预测本文通过获取停车场的一......
  • 计算类的大小
    1.对象存储规则类实例化出的对象,有成员变量和成员函数,它们是存储在对象的?实际上,只有非静态的成员变量存储在对象中,而成员函数是存储在公用代码段中,如下图现在知道了成员变量存储在对象中,成员函数在公用代码段,那么成员变量在内存中是如何存储的对象中的成员变......
  • 计算机操作系统随笔
    计算机操作系统是一种控制和管理计算机硬件和软件资源的软件程序,类比为一座大厦的物业管理。它负责管理计算机硬件资源,如中央处理器、内存、硬盘等,以及软件资源,如程序、文件等。一座大厦的物业管理主要负责管理大厦的各项资源,如电力、水源、电梯、消防等,确保大厦能够正常运作。......
  • 计算机网络基础——10 活动目录AD的配置和应用
    10.1实验目的1.了解域和活动目录的概念2.掌握 Windows server 2003 中活动目录 AD 的安装与配置3.掌握加入域和登录域的方法10.2实验相关知识:域与活动目录的概念  一台 Windows 计算机,在网络中要么隶属于工作组,要么隶属于域。工作组通常是几部计算机组成的逻辑集合,又......
  • 通过组策略在计算机网络位置添加ftp
    原理在%APPDATA%\Microsoft\Windows\NetworkShortcuts目录添加ftp快捷方式即可。操作名称中填入完整路径和ftp快捷方式的名称,比如这样:%APPDATA%\Microsoft\Windows\NetworkShortcuts\share ......
  • c# 计算程序执行时间,计算一段代码执行所用的时间,测试效率
    usingSystem;usingSystem.Threading;classClass1{ [System.Runtime.InteropServices.DllImport("Kernel32.dll")] staticexternboolQueryPerformanceCounter(reflongcount); [System.Runtime.InteropServices.DllImport("Kernel32.dll")] ......
  • 前端JavaScript的精确计算问题
    问题发现"47.900000"*"771.65" = 36962.034999999996 (错误)  36962.035(正确)问题定位JavaScript前端计算不精确(浮点数计算的精确问题)问题解决除法函数,用来得到精确的除法结果说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比......