我正在尝试使用PyAudio记录计算机扬声器的输出。
我试图修改PyAudio文档中给出的代码示例,但是它不起作用。
从技术上讲,没有错误。我获得了output.wav
文件,可以打开它,但是没有声音。在Audacity上,我只能看到一条直线。
怎么了
import pyaudio
import wave
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
SPEAKERS = p.get_default_output_device_info()["hostApi"] #The part I have modified
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
input_host_api_specific_stream_info=SPEAKERS) #The part I have modified
print("* recording")
frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("* done recording")
stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()
最佳答案
如果有人仍然像我一样绊脚石,我发现了一个PyAudio fork在Windows上记录输出。
说明:
官方的PyAudio版本无法记录输出。但是,在Windows Vista及更高版本中,引入了新的API WASAPI,其中包括以环回模式打开流到输出设备的功能。在此模式下,流的行为类似于输入流,并具有记录传出音频流的能力。
要设置模式,必须设置一个特殊标志(AUDCLNT_STREAMFLAGS_LOOPBACK)。由于在正式版本中不支持此标志,因此需要编辑PortAudio和PyAudio,以添加回送支持。
新选项:
关于python - 使用PyAudio录制扬声器输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55541029/