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

通过Python为不同应用程序单独配置音频输出设备

直播音频设备分路与恢复的实现方案

Python脚本方案(自定义控制)

如果想用Python实现精准控制,推荐使用pycaw库——它封装了Windows Core Audio API,能直接操控单个应用的音频输出设备。

步骤1:安装依赖

pip install pycaw

核心实现代码

以下代码包含直播模式切换和设备恢复的完整逻辑,记得替换成你实际的设备名称和进程名:

from pycaw.pycaw import AudioUtilities

# 根据设备名称获取音频输出设备对象
def get_device_by_name(target_name):
    for device in AudioUtilities.GetAllDevices():
        if device.FriendlyName.strip() == target_name:
            return device
    return None

# 根据进程名获取对应的音频会话
def get_session_by_process_name(proc_name):
    for session in AudioUtilities.GetAllSessions():
        if session.Process and session.Process.name() == proc_name:
            return session
    return None

# 给指定音频会话设置输出设备
def set_session_output_device(session, target_device):
    if not session or not target_device:
        return
    try:
        audio_manager = session._ctl.QueryInterface(AudioUtilities.IAudioSessionManager2)
        audio_client = audio_manager.GetAudioClient()
        audio_client.SetDefaultEndpoint(target_device.id, 0)
    except Exception as e:
        print(f"设置设备失败: {e}")

# 保存所有活跃音频会话的原始设备(用于恢复)
original_device_map = {}
def backup_current_devices():
    global original_device_map
    original_device_map.clear()
    for session in AudioUtilities.GetAllSessions():
        if session.Process:
            proc_name = session.Process.name()
            try:
                audio_manager = session._ctl.QueryInterface(AudioUtilities.IAudioSessionManager2)
                audio_client = audio_manager.GetAudioClient()
                original_endpoint = audio_client.GetDefaultEndpoint(0)
                original_device_map[proc_name] = original_endpoint.id
            except:
                continue

# 恢复所有会话到原始设备,未备份的会话使用默认设备
def restore_default_devices(default_device_name):
    default_device = get_device_by_name(default_device_name)
    if not default_device:
        print("未找到默认设备")
        return
    for session in AudioUtilities.GetAllSessions():
        if session.Process:
            proc_name = session.Process.name()
            target_device_id = original_device_map.get(proc_name, default_device.id)
            # 匹配目标设备
            target_device = None
            for device in AudioUtilities.GetAllDevices():
                if device.id == target_device_id:
                    target_device = device
                    break
            if target_device:
                set_session_output_device(session, target_device)
    # 同时恢复系统全局默认输出
    AudioUtilities.GetSpeakers().SetDefaultEndpoint(default_device.id, 0)

# 切换到直播模式
def switch_to_live_mode(cable_a, cable_b, cable_c):
    backup_current_devices()
    # 设置Spotify到Cable A
    spotify_session = get_session_by_process_name("Spotify.exe")
    set_session_output_device(spotify_session, get_device_by_name(cable_a))
    # 设置游戏到Cable B(替换为你的游戏进程名,比如"GTA5.exe")
    game_session = get_session_by_process_name("Game.exe")
    set_session_output_device(game_session, get_device_by_name(cable_b))
    # 设置系统全局输出到Cable C
    cable_c_dev = get_device_by_name(cable_c)
    if cable_c_dev:
        AudioUtilities.GetSpeakers().SetDefaultEndpoint(cable_c_dev.id, 0)

# 使用示例(取消注释即可运行)
if __name__ == "__main__":
    # 替换为你实际的设备名称
    LIVE_CABLE_A = "Cable A"
    LIVE_CABLE_B = "Cable B"
    LIVE_CABLE_C = "Cable C"
    DEFAULT_AUDIO_DEVICE = "你的常规耳机/音箱名称"

    # 启动直播模式
    # switch_to_live_mode(LIVE_CABLE_A, LIVE_CABLE_B, LIVE_CABLE_C)

    # 恢复默认设备
    # restore_default_devices(DEFAULT_AUDIO_DEVICE)

注意事项

  • 必须以管理员权限运行脚本,否则无法修改系统音频设置
  • 进程名称要准确,可通过任务管理器查看目标应用的.exe文件名
  • pycaw仅支持Windows系统,依赖Windows Core Audio API

现成工具方案(无需编码)

如果不想写代码,以下工具可以快速实现需求:

  • Voicemeeter Potato/Standard:专业直播音频路由工具,支持将不同应用的音频分配到不同虚拟设备,可保存预设,一键切换直播/默认模式,还支持音频混合、降噪等功能
  • Audio Router:轻量工具,支持通过命令行切换单个应用的音频输出,可编写批处理脚本实现一键切换,比如:
    :: 直播模式切换
    AudioRouter.exe set-process "Spotify.exe" "Cable A"
    AudioRouter.exe set-process "Game.exe" "Cable B"
    AudioRouter.exe set-default "Cable C"
    
    :: 恢复默认
    AudioRouter.exe set-process "Spotify.exe" "常规设备名称"
    AudioRouter.exe set-process "Game.exe" "常规设备名称"
    AudioRouter.exe set-default "常规设备名称"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:25:02