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

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

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

感谢您的帮助!!

【问题讨论】:

标签: python python-3.x variables audio decibel


【解决方案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 对此进行了很好的讨论。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 2015-02-15
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多