用Python测量扬声器音量?

2024-09-30 23:33:53 发布

您现在位置: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

我不想指定一个字符串来命名默认扬声器,因为这将从一台电脑移动到另一台电脑,所以我希望捕获默认扬声器。没有插入麦克风

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


Tags: indefaultoutputdevicesdusersfileprint