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

Windows下用Python录制蓝牙/USB耳机的耳返与麦克风音频

蓝牙连接下录制耳机麦克风+耳返音频的解决方案

1. 先定位蓝牙设备对应的音频回路设备

你的现有代码只适配了有线的Stereomix,蓝牙设备的混音设备名称通常不同。先运行这段代码列出所有音频设备,找到蓝牙相关的录制设备:

import pyaudio

p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
    dev = p.get_device_info_by_index(i)
    print(f"设备索引: {i}, 名称: {dev['name']}, 支持输入: {dev['maxInputChannels'] > 0}")
p.terminate()

重点找名称含「蓝牙」「Bluetooth」「混音」「Loopback」「Listen」的输入设备,记下它的索引。

2. 启用蓝牙设备的混音功能(Windows系统)

如果没找到对应设备,先开启系统隐藏的录制设备:

  • 右键任务栏音量图标 → 声音设置 → 高级声音选项 → 更多声音设置
  • 切换到「录制」选项卡,右键空白区域 → 勾选「显示禁用的设备」「显示已断开的设备」
  • 找到蓝牙设备对应的「立体声混音」或「Bluetooth Audio Renderer」类录制设备,右键启用

3. 修改代码适配蓝牙混音设备

把找到的蓝牙设备索引替换到代码中,或修改自动匹配逻辑:

import pyaudio
import wave

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
OUTPUT_FILENAME = "bluetooth_output.wav"

p = pyaudio.PyAudio()
dev_index = None
# 自动匹配蓝牙相关录制设备
for i in range(p.get_device_count()):
    dev = p.get_device_info_by_index(i)
    if (('Bluetooth' in dev['name'] or '蓝牙' in dev['name']) and dev['maxInputChannels'] > 0):
        dev_index = dev['index']
        print(f"找到蓝牙录制设备: 索引{dev_index}, 名称{dev['name']}")
        break

# 自动匹配失败时,手动指定索引(替换成你找到的数字)
if not dev_index:
    dev_index = 3

stream = p.open(format=FORMAT,
               channels=CHANNELS,
               rate=RATE,
               input=True,
               input_device_index=dev_index,  
               frames_per_buffer=CHUNK)

print("录制中...")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    data = stream.read(CHUNK)
    frames.append(data)

print("录制结束")
stream.stop_stream()
stream.close()
p.terminate()

wf = wave.open(OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

4. 备选方案:分别捕获麦克风与耳返再混合

如果蓝牙设备无混音选项,可以分开捕获麦克风输入和系统播放音频,再混合两个流:

import pyaudio
import wave
import numpy as np

CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
OUTPUT_FILENAME = "mixed_output.wav"

p = pyaudio.PyAudio()

# 定位蓝牙麦克风
mic_index = None
for i in range(p.get_device_count()):
    dev = p.get_device_info_by_index(i)
    if ('Bluetooth' in dev['name'] and dev['maxInputChannels'] > 0):
        mic_index = dev['index']
        print(f"蓝牙麦克风索引: {mic_index}")
        break

# 定位耳返录制设备(立体声混音/loopback)
loopback_index = None
for i in range(p.get_device_count()):
    dev = p.get_device_info_by_index(i)
    if ('Loopback' in dev['name'] or '立体声混音' in dev['name']) and dev['maxInputChannels'] > 0:
        loopback_index = dev['index']
        print(f"耳返设备索引: {loopback_index}")
        break

# 打开两个音频流
mic_stream = p.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    input_device_index=mic_index,
                    frames_per_buffer=CHUNK)

loopback_stream = p.open(format=FORMAT,
                         channels=CHANNELS,
                         rate=RATE,
                         input=True,
                         input_device_index=loopback_index,
                         frames_per_buffer=CHUNK)

print("录制中...")
frames = []
for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
    mic_data = mic_stream.read(CHUNK)
    loopback_data = loopback_stream.read(CHUNK)
    
    # 转数组混合(可调整音量比例,0.5为各占一半)
    mic_np = np.frombuffer(mic_data, dtype=np.int16)
    loopback_np = np.frombuffer(loopback_data, dtype=np.int16)
    mixed_np = (mic_np * 0.5 + loopback_np * 0.5).astype(np.int16)
    frames.append(mixed_np.tobytes())

print("录制结束")
mic_stream.stop_stream()
mic_stream.close()
loopback_stream.stop_stream()
loopback_stream.close()
p.terminate()

wf = wave.open(OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:30:10