我如何找到当前的分贝级别并将其设置为变量?
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 秒打印一次。 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()
p.terminate()
注意
正如上面评论中提到的 - 测量 dB 可能是一个比您在这里需要的更深层次的话题。如果没有关于用例的一些信息,请注意,尽管此处的方法是您可能会看到的最常见的方法 - 它仅将峰值与自身进行比较。 This question 对此进行了很好的讨论。
如果您需要真实世界的分贝测量值,则需要参考测量值、校准设备和更多研究!
【讨论】:
以上是关于我如何找到当前的分贝级别并将其设置为变量?的主要内容,如果未能解决你的问题,请参考以下文章
Youtrack 与 GIT(不是 github)的集成级别