使用PyAudio在Python中进行Loopback(“你听到的”)录音

11 投票
2 回答
9649 浏览
提问于 2025-04-18 04:14

大家好,

我正在尝试用Python和PyAudio来录制我的扬声器输出。目前,我可以录制麦克风输入,并把它发送给“听众”。我现在想做的是创建一个回环,这样就可以录制扬声器的输出。我之前用Windows的“立体声混音”功能做到了这一点,但因为我需要跨平台支持,所以应该有其他方法可以实现。

有没有人能给我一些建议,告诉我该怎么做?

这是我目前用来录制输入流的代码。

import socket
import pyaudio
import wave

#record
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 40

HOST = '192.168.0.122'    # The remote host
PORT = 50007              # The same port as used by the server

recording = True

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))

p = pyaudio.PyAudio()

for i in range(0, p.get_device_count()):
    print(i, p.get_device_info_by_index(i)['name'])

device_index = int(input('Device index: '))

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

print("*recording")

frames = []

while recording:
    data  = stream.read(CHUNK)
    frames.append(data)
    s.sendall(data)

print("*done recording")

stream.stop_stream()
stream.close()
p.terminate()
s.close()

print("*closed")

任何帮助都将非常感谢!

2 个回答

1

有一个修补过的pyaudio可以做到这一点:

pip install pyaudiowpatch
python -m pyaudiowpatch

如果你在输出列表中看到了回环设备,那就不需要再安装其他东西了;只需在调用pyaudio.PyAudio().open时使用input_device_index这个参数。

你可以查看这个录音的例子,链接在这里:https://github.com/s0d3s/PyAudioWPatch/blob/master/examples/pawp_record_wasapi_loopback.py

2

编辑:我没注意到跨平台的问题。这里留着作为Windows下环回设备的参考。

安装一个虚拟环回设备,比如VB-Cable,然后把这个适配器选为你的输入设备。对我来说,这个方法效果很好。

你可以用pyAudio来检查一下,方法如下:

>>> print p.get_device_count()
8

>>> print p.get_device_info_by_index(1)["name"]
Line 1 (Virtual Audio Cable)

所以,我把1当作我的设备索引。

撰写回答