我如何找到当前的分贝级别并将其设置为变量?

Posted

技术标签:

【中文标题】我如何找到当前的分贝级别并将其设置为变量?【英文标题】:How would i find the current decibel level and set it as a variable? 【发布时间】:2021-12-28 02:49:40 【问题描述】:

我希望使用麦克风查找房间中的当前分贝级别并将其设置为变量。我一直无法找到任何关于此的 python 代码,所以我很困惑。

如果变量可以每 0.3 秒刷新一次就好了,但不是必须的。

感谢您的帮助!!

【问题讨论】:

你看过pypi.org/project/soundmeter吗?它不提供分贝值,但这很复杂,如下所述:***.com/questions/52943151/… 【参考方案1】:

这里是一些使用pyaudio library 的python 代码,它可以使用Root Mean Square (RMS) 计算dB 电平并每0.3 秒打印一次。 rmsdb 都可以作为变量使用。

import pyaudio
import time
from math import log10
import audioop  

p = pyaudio.PyAudio()
WIDTH = 2
RATE = int(p.get_default_input_device_info()['defaultSampleRate'])
DEVICE = p.get_default_input_device_info()['index']
rms = 0
print(p.get_default_input_device_info())

def callback(in_data, frame_count, time_info, status):
    global rms
    rms = audioop.rms(in_data, WIDTH) / 32767
    return in_data, pyaudio.paContinue


stream = p.open(format=p.get_format_from_width(WIDTH),
                input_device_index=DEVICE,
                channels=1,
                rate=RATE,
                input=True,
                output=False,
                stream_callback=callback)

stream.start_stream()

while stream.is_active(): 
    db = 20 * log10(rms)
    print(f"RMS: rms DB: db") 
    # refresh every 0.3 seconds 
    time.sleep(0.3)

stream.stop_stream()
stream.close()

p.terminate()

注意

正如上面评论中提到的 - 测量 dB 可能是一个比您在这里需要的更深层次的话题。如果没有关于用例的一些信息,请注意,尽管此处的方法是您可能会看到的最常见的方法 - 它仅将峰值与自身进行比较。 This question 对此进行了很好的讨论。

如果您需要真实世界的分贝测量值,则需要参考测量值、校准设备和更多研究!

【讨论】:

以上是关于我如何找到当前的分贝级别并将其设置为变量?的主要内容,如果未能解决你的问题,请参考以下文章

给定指定的分贝级别,如何在 R 中创建波浪声音?

如何获取当前目录并将其分配给linux中的变量[关闭]

裁剪和放置图像以实现电池电量效果

Youtrack 与 GIT(不是 github)的集成级别

使用循环从 plist 的根级别获取字典数组并将其放入变量中

如何设置 HikariCP 的日志记录级别?