Код: Выделить всё
import sounddevice as sd
import numpy as np
class SoundLevelReader(QObject):
new_level = Signal(float)
def sd_callback(self, indata, frames, time, status):
# see https://en.wikipedia.org/wiki/Sound_pressure#Sound_pressure_level
rms = np.sqrt(np.mean(np.absolute(indata)**2))
ref = 20e-6 # reference sound pressure in air
db = 20 * np.log10(rms / ref)
print("RMS:{:.6f}".format(rms))
print("REF:{:.6f}".format(ref))
print("RES:{:.6f}".format(db))
self.new_level.emit(db)
def main():
# ...
reader = SoundLevelReader()
with sd.InputStream(callback=reader.sd_callback, device=4, blocksize=5000):
sys.exit(app.exec())
Однако, пытаясь соблюдать эталонное значение 20 мкП (
Код: Выделить всё
ref
Код: Выделить всё
db = 20 * np.log10(rms / ref)
Код: Выделить всё
RMS:0.000818
REF:0.000020
RES:32.236420
RMS:0.000455
REF:0.000020
RES:27.131226
Код: Выделить всё
db = 20 * np.log10(rms)
Код: Выделить всё
RMS:0.013473
REF:0.000020
RES:-37.410866
RMS:0.003492
REF:0.000020
RES:-49.137325
Код: Выделить всё
db = 10 * np.log10(rms)
Код: Выделить всё
RMS:0.002143
REF:0.000020
RES:-26.689749
RMS:0.033025
REF:0.000020
RES:-14.811516
Может кто-нибудь объяснить, как правильно рассчитать значение в децибелах на основе показаний, поступающих со звукового устройства< /код> библиотека Python? Я знаю, что существует много разных «вариантов» децибел. Моя главная цель — получить показания, которые в наши дни будут отображаться в DAW.
Подробнее здесь: https://stackoverflow.com/questions/792 ... el-reading