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

如何用Python监听Windows 10系统内部音频并检测250Hz阈值触发操作

实现Windows 10内部音频实时监听并检测250Hz频率触发操作

核心思路

无需录制音频文件,通过实时捕获内部音频流,用FFT(快速傅里叶变换)分析频率成分,当检测到峰值频率超过250Hz时执行指定操作。

所需依赖

先安装必要的Python库:

pip install sounddevice numpy

步骤说明与代码实现

  1. 启用Windows立体声混音设备
    这是捕获内部音频的前提:右键任务栏音量图标 → 声音设置 → 更多声音设置 → 录制选项卡,找到「立体声混音」设备并启用它。

  2. 获取音频设备ID
    运行以下代码查看所有可用音频设备,找到「立体声混音」对应的ID:

import sounddevice as sd
print(sd.query_devices())

输出示例中类似2: 立体声混音 (Realtek Audio), MME (2 in, 0 out)的行,数字2就是设备ID。

  1. 实时监听与频率检测代码
    替换INPUT_DEVICE_ID为你的立体声混音设备ID,调整参数后运行:
import sounddevice as sd
import numpy as np
import time
import sys

# 配置参数
SAMPLING_RATE = 44100  # 音频采样率,常用44100Hz
BLOCK_SIZE = 1024      # 每次捕获的音频帧大小,平衡延迟与精度
TARGET_FREQ = 250      # 触发阈值频率
TRIGGER_THRESHOLD = 3  # 连续检测到N次才触发,避免误判
trigger_count = 0

# 替换为你的立体声混音设备ID
INPUT_DEVICE_ID = 2

def audio_callback(indata, frames, time_info, status):
    global trigger_count
    if status:
        print(status, file=sys.stderr)
    
    # 提取单声道音频数据(立体声取第一通道)
    audio_data = indata[:, 0]
    # 执行FFT计算频率成分
    fft_result = np.fft.fft(audio_data)
    freqs = np.fft.fftfreq(len(fft_result), 1 / SAMPLING_RATE)
    
    # 只保留正频率部分
    positive_freqs = freqs[:len(freqs) // 2]
    magnitude = np.abs(fft_result)[:len(freqs) // 2]
    
    # 找到当前帧的峰值频率
    peak_freq = positive_freqs[np.argmax(magnitude)]
    
    # 判断是否触发操作
    if peak_freq > TARGET_FREQ:
        trigger_count += 1
        if trigger_count >= TRIGGER_THRESHOLD:
            # ---------------------------
            # 这里替换为你的指定操作
            print("检测到频率超过250Hz,执行操作!")
            # 示例:调用外部命令/函数
            # os.system("notepad.exe")
            # ---------------------------
            trigger_count = 0  # 重置计数,防止重复触发
    else:
        trigger_count = 0

try:
    with sd.InputStream(device=INPUT_DEVICE_ID,
                        samplerate=SAMPLING_RATE,
                        blocksize=BLOCK_SIZE,
                        callback=audio_callback):
        print("正在监听内部音频...按Ctrl+C停止")
        while True:
            time.sleep(1)
except KeyboardInterrupt:
    print("\n监听停止")
except Exception as e:
    print(f"错误:{str(e)}")

关键参数调整建议

  • BLOCK_SIZE:值越大,FFT频率精度越高,但音频延迟也越大;如果需要低延迟,可尝试512或256,精度要求高则用2048。
  • TRIGGER_THRESHOLD:如果经常误触发,可提高这个值(比如设为5),确保是持续的高频信号才触发。
  • 频率检测优化:如果需要更准确的检测(比如排除噪声峰值),可以计算250Hz附近频率分量的总能量占比,而不是只取单一峰值频率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:23:12