相关文章推荐
微醺的红茶  ·  [Shell命令] echo ...·  5 天前    · 

我怎样才能找到当前的分贝水平并将其设置为一个变量?

1 人关注

我想用一个麦克风找到一个房间的当前分贝值,并将其设置为一个变量。我没能找到任何关于这个问题的python代码,所以我很困惑。

如果这个变量能每隔0.3秒刷新一次就好了,但不一定要这样。

谢谢你的帮助!!

1 个评论
你看过 pypi.org/project/soundmeter 吗?它不提供分贝值,但这很复杂,这里有解释: stackoverflow.com/questions/52943151/...
python
python-3.x
variables
audio
decibel
Caleb Nicolle
Caleb Nicolle
发布于 2021-12-28
1 个回答
lys
lys
发布于 2021-12-29
已采纳
0 人赞同

这里有一些python代码,使用 pyaudio library 可以用均方根 (RMS) 计算分贝值,并每0.3秒打印一次。 rms db 都可以作为变量使用。

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()