在 Python 中测量扬声器音量?

问题描述

我正在尝试用 Python 测量扬声器的声级。这个想法是打开一个浏览器来播放声音,并且由于浏览器将音频输出认扬声器,因此使用 sounddevice

测量该声音

但是,我无法让它工作。这是我到目前为止的代码

import sounddevice as sd
import numpy as np

def print_sound(outdata,frames,time,status):
    volume_norm = np.linalg.norm(outdata)*10
    print ("|" * int(volume_norm))

deviceInfo = sd.query_devices(kind='output')
print(deviceInfo)

sd.default.device = deviceInfo


with sd.OutputStream(callback=print_sound,device=deviceInfo['index']):
    sd.sleep(10000)

我被抛出这个错误

{'name': 'Speakers (Realtek High Definiti','hostapi': 0,'max_input_channels': 0,'max_output_channels': 2,'default_low_input_latency': 0.09,'default_low_output_latency': 0.09,'default_high_input_latency': 0.18,'default_high_output_latency': 0.18,'default_samplerate': 44100.0}
Traceback (most recent call last):
  File "c:\Users\MyUser\Desktop\MyProjects\MainRecorderScript\venv\lib\site-packages\sounddevice.py",line 2710,in _split
    invalue,outvalue = value
ValueError: too many values to unpack (expected 2)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "c:\Users\MyUser\Desktop\MyProjects\MainRecorderScript\sound_device_test.py",line 11,in <module>
    sd.default.device = deviceInfo
  File "c:\Users\MyUser\Desktop\MyProjects\MainRecorderScript\venv\lib\site-packages\sounddevice.py",line 2170,in __setattr__
    getattr(self,name)._pair[:] = _split(value)
  File "c:\Users\MyUser\Desktop\MyProjects\MainRecorderScript\venv\lib\site-packages\sounddevice.py",line 2714,in _split
    raise ValueError('Only single values and pairs are allowed') from e
ValueError: Only single values and pairs are allowed

我不想指定一个字符串来命名认扬声器,因为这会从 PC 移动到 PC,所以我希望捕获认扬声器。不会插入麦克风

编辑:作为参考,我尝试修改此脚本 How to read realtime microphone audio volume in python and ffmpeg or similar

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...