我如何找到当前的分贝级别并将其设置为变量?
How would i find the current decibel level and set it as a variable?
我正在使用麦克风查找房间中的当前分贝级别并将其设置为变量。我一直没能找到任何关于此的 python 代码,所以我很困惑。
如果变量可以每 0.3 秒刷新一次就更好了,但这不是必须的。
感谢您的帮助!!
这是一些使用 pyaudio library
that can calculate the dB level using Root Mean Square (RMS) 的 python 代码,每 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 对此进行了很好的讨论。
如果您需要真实世界的分贝测量值,您将需要参考测量值、校准设备和更多研究!
我正在使用麦克风查找房间中的当前分贝级别并将其设置为变量。我一直没能找到任何关于此的 python 代码,所以我很困惑。
如果变量可以每 0.3 秒刷新一次就更好了,但这不是必须的。
感谢您的帮助!!
这是一些使用 pyaudio library
that can calculate the dB level using Root Mean Square (RMS) 的 python 代码,每 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 对此进行了很好的讨论。
如果您需要真实世界的分贝测量值,您将需要参考测量值、校准设备和更多研究!