我正在尝试使用 Pyaudio 录制计算机的内部声音(YouTube 视频、应用程序等),但尽管在播放声音时录制,但输出文件始终为空。没有错误或警告。
我怀疑该问题与使用外部声卡(Focusrite Scarlett 2i2 第一代)有关。我在 Windows 11 上运行并尝试以管理员身份执行脚本。有趣的是,当我打开幻象电源时,会记录电噪声,因此它以某种方式监听设备,只是不拾取通过它播放的应用程序。
import pyaudio
import wave
chunk = 1024
sample_format = pyaudio.paInt16
channels = 2
rate = 48000
seconds = 5
p = pyaudio.PyAudio()
stream = p.open(format=sample_format,
channels=channels,
rate=rate,
input=True,
frames_per_buffer=chunk)
frames = []
for i in range(0, int(rate / chunk * seconds)):
data = stream.read(chunk)
frames.append(data)
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open("stream_test.wav", 'wb')
wf.setnchannels(channels)
wf.setsampwidth(p.get_sample_size(sample_format))
wf.setframerate(rate)
wf.writeframes(b''.join(frames))
wf.close()
我已经使用以下库而不是官方 PyAudio 解决了这个问题:
https://github.com/s0d3s/PyAudioWPatch/tree/master
PyAudioWPatch 允许您在环回模式下使用 WASAPI 记录输出。
有关更多讨论,请参阅此处这篇文章: