用python录制输出声音

用python录制输出声音,python,macos,audio,audio-streaming,Python,Macos,Audio,Audio Streaming,我想用python编程录制从笔记本电脑发出的声音。我找到了PyAudio,并想出了以下程序来完成这项任务: import pyaudio, wave, sys chunk = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 44100 RECORD_SECONDS = 5 WAVE_OUTPUT_FILENAME = sys.argv[1] p = pyaudio.PyAudio() channel_map = (0, 1) stream

我想用python编程录制从笔记本电脑发出的声音。我找到了
PyAudio
,并想出了以下程序来完成这项任务:

import pyaudio, wave, sys

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = sys.argv[1]

p = pyaudio.PyAudio()
channel_map = (0, 1)

stream_info = pyaudio.PaMacCoreStreamInfo(
    flags = pyaudio.PaMacCoreStreamInfo.paMacCorePlayNice,
    channel_map = channel_map)

stream = p.open(format = FORMAT,
                rate = RATE,
                input = True,
                input_host_api_specific_stream_info = stream_info,
                channels = CHANNELS)

all = []
for i in range(0, RATE / chunk * RECORD_SECONDS):
        data = stream.read(chunk)
        all.append(data)
stream.close()
p.terminate()

data = ''.join(all)
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(data)
wf.close()
问题是我必须将耳机插孔连接到麦克风插孔。我尝试替换这些行:

input = True,
input_host_api_specific_stream_info = stream_info,
有了这些:

output = True,
output_host_api_specific_stream_info = stream_info,
但是我得到了这个错误:

回溯(最近一次呼叫最后一次):
文件“/test.py”,第25行,在
data=stream.read(块)
文件“/Library/Python/2.5/site packages/pyaudio.py”,第562行,已读
PACANNORTREADFROUTPUTONLYSTREAM)
IOError:[Errno不是输入流]-9975


有没有一种方法可以实例化PyAudio流,这样它就可以从计算机的输出中输入,而不必将耳机插孔连接到麦克风上?有没有更好的办法?我更喜欢使用python应用程序,避免使用cocoa。

不幸的是,没有简单的方法可以做到这一点,但和是最好的工具。

您可以安装,它允许您创建额外的音频设备并在它们之间路由音频。通过这种方式,您可以定义系统到Soundflower设备的输出,并使用PyAudio从中读取音频


您还可以看一看的音频客户端。

我可以通过不使用编程的方式给出答案。 面板>声音>录制>>启用立体声混音。 这需要驱动程序支持。 我还发现这让我的声音产生了回声。
至少这解决了我的问题。

以编程方式执行此操作将很棘手。基本上,不可能在“输出”前面拦截音频流量。因此,您需要做的是创建自己的虚拟音频设备,并在该设备上播放您想要捕获的任何应用程序

其他人也提到的不同的第三方应用程序似乎在MacOS上提供了这样的功能。我可以补充,但我对这两种工具都没有经验


从编程的角度来说,您必须模仿与此完全相同的内容。

请在上查看此脚本。它用python记录输出声音。我会考虑修改一个函数,用声音设备模块的输出流来记录输出。您可以查看sounddevice的文档。脚本可以正常工作,您可以根据需要实现它,但用输出流替换录音系统可能会使代码不那么凌乱,效率更高。

他们有API或其他编程方式来完成这项工作吗?声音已经在您的笔记本电脑中了?“另存为…”是Macintosh,有什么问题吗?有没有简单的方法将flash播放器中播放的文件保存到浏览器中(我猜它们是.flv文件)?我知道很多时候像youtube和vimeo这样的网站都有下载.flv文件的链接,但是很多时候他们没有这样做的链接。Soundflower已经死了或者提供的链接已经死了。这不是一个程序性的答案。Pyjack是非标准的。