You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows10下如何用Python获取扬声器实时输出音量?

解决系统扬声器音量检测问题

你的代码问题出在用错了音频流类型:sd.OutputStream是用来向扬声器输出音频的,不会捕获正在播放的系统声音,所以indata始终为空,音量显示0是必然的。要获取系统播放的音频,需要使用环回捕获(捕获系统输出的音频信号),以下是可行的解决方案:

方案一:用sounddevice捕获环回设备

  1. 先列出所有音频设备,找到你的环回设备(比如Windows的“立体声混音”、macOS/Linux的“Loopback”设备):
import sounddevice as sd
print(sd.query_devices())
  1. 修改代码,使用InputStream并指定环回设备ID:
import sounddevice as sd
import numpy as np
import sys

def audio_callback(indata, frames, time, status):
    if status:
        print(status, file=sys.stderr)
    # 计算音量,系数可根据需求调整
    volume_norm = np.linalg.norm(indata) * 10
    print(f"Volume Level: {volume_norm:.2f}")

def main():
    # 替换为你找到的环回设备ID
    loopback_device_id = 2  # 示例ID,需自行修改
    sd.default.device = loopback_device_id
    sd.default.channels = 2
    sd.default.samplerate = 44100

    with sd.InputStream(callback=audio_callback):
        print("正在监听系统音量...按Ctrl+C停止")
        sd.sleep(10000)  # 监听10秒,可改为while True持续监听

if __name__ == "__main__":
    main()

方案二:用soundcard库(更简便,自动识别环回)

soundcard库会自动处理环回设备的识别,无需手动找ID:

  1. 安装库:
pip install soundcard
  1. 运行检测代码:
import soundcard as sc
import numpy as np

# 获取默认扬声器对应的环回麦克风
speaker = sc.default_speaker()
mic = sc.get_microphone(id=speaker.id, include_loopback=True)

with mic.recorder(samplerate=44100, channels=2) as rec:
    print("正在监听系统音量...按Ctrl+C停止")
    while True:
        data = rec.record(numframes=1024)
        volume_norm = np.linalg.norm(data) * 10
        print(f"Volume Level: {volume_norm:.2f}")

注意事项

  • Windows:默认“立体声混音”设备可能被禁用,需在声音设置的“录制”选项卡中启用它
  • macOS:需要给运行代码的终端/IDE授予麦克风权限(系统偏好设置→安全性与隐私→麦克风)
  • Linux:可能需要安装pulseaudio-module-loopback包来启用环回功能

内容的提问来源于stack exchange,提问作者Pavan Yogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 23:14:58