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

如何用Python获取麦克风状态?兼询跨平台麦克风切换方案

Windows下获取麦克风静音状态

你之前的切换代码用了win32api,但获取状态用pycaw库更简洁,先安装依赖:

pip install pycaw

下面是同时支持状态获取和静音切换的代码:

from pycaw.pycaw import AudioUtilities, IAudioEndpointVolume
from comtypes import CLSCTX_ALL
import win32api
import win32gui

# 获取麦克风当前静音状态
def get_mic_mute_state():
    capture_devices = AudioUtilities.GetCaptureDevices()
    default_capture = AudioUtilities.GetDefaultCaptureDevice()
    for device in capture_devices:
        if device.GetId() == default_capture.GetId():
            interface = device.Activate(IAudioEndpointVolume._iid_, CLSCTX_ALL, None)
            volume_obj = interface.QueryInterface(IAudioEndpointVolume)
            return volume_obj.GetMute()

# 复用你的静音切换逻辑
def toggle_mic_mute():
    WM_APPCOMMAND = 0x319
    APPCOMMAND_MICROPHONE_VOLUME_MUTE = 0x180000
    hwnd_active = win32gui.GetForegroundWindow()
    win32api.SendMessage(hwnd_active, WM_APPCOMMAND, None, APPCOMMAND_MICROPHONE_VOLUME_MUTE)

# 示例调用
if __name__ == "__main__":
    current_mute = get_mic_mute_state()
    print(f"麦克风当前状态: {'已静音' if current_mute else '未静音'}")
    toggle_mic_mute()
跨平台麦克风控制方案

Windows

继续使用pycaw库,上面的代码已经同时支持状态查询和静音切换。

macOS

直接调用系统osascript命令实现,无需额外安装库:

import subprocess

def get_mic_mute_state_mac():
    result = subprocess.run(
        ["osascript", "-e", 'input volume of (get volume settings)'],
        capture_output=True, text=True
    )
    return int(result.stdout.strip()) == 0  # macOS中输入音量为0即代表静音

def toggle_mic_mute_mac():
    current_state = get_mic_mute_state_mac()
    target_volume = 100 if current_state else 0
    subprocess.run(["osascript", "-e", f'set input volume to {target_volume}'])

Linux

根据音频服务器类型选择实现方式:

PulseAudio(主流桌面环境如Ubuntu、Fedora)

import subprocess

def get_mic_mute_state_pulse():
    result = subprocess.run(
        ["pactl", "get-source-mute", "@DEFAULT_SOURCE@"],
        capture_output=True, text=True
    )
    return "yes" in result.stdout.strip()

def toggle_mic_mute_pulse():
    subprocess.run(["pactl", "set-source-mute", "@DEFAULT_SOURCE@", "toggle"])

ALSA

import subprocess

def get_mic_mute_state_alsa():
    result = subprocess.run(
        ["amixer", "get", "Capture"],
        capture_output=True, text=True
    )
    return "off" in result.stdout.split("[")[2].split("]")[0]

def toggle_mic_mute_alsa():
    subprocess.run(["amixer", "set", "Capture", "toggle"])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:48:33