我想知道如何在dB中获得声压级。输入应是来自PC (实时音频信号)麦克风的信号.输出是输入信号的实时声压级.这是我的简单密码。
import pyaudio
import numpy as np
import wave
from threading import Thread
from pysine import sine
import math
import time
def print_sound():
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
pa = pyaudio.PyAudio()
stream = pa.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
buffer = []
while True:
string_audio_data = stream.read(CHUNK)
audio_data = np.frombuffer(string_audio_data, np.int16)
volume_norm = np.linalg.norm(audio_data)*10
dfft = 10.*np.log10(abs(np.fft.rfft(audio_data)))
print(int(volume_norm))
print_sound()这个错误是
Warning (from warnings module): File "C:\Users\Admin\1.py", line 27 dfft = 10.*np.log10(abs(np.fft.rfft(audio_data))) RuntimeWarning: divide by zero encountered in log10
发布于 2022-03-17 10:00:57
正如@Thierry上面所指出的,如果不使用实际测量来校准扬声器/麦克风系统,就不可能得到dB SPL的答案。报告相对级别是可能的(就像您对代码片段所做的那样)。
这些是报告绝对dB SPL所需的最低要求:
。
https://stackoverflow.com/questions/71454890
复制相似问题