【发布时间】:2011-01-04 00:53:09
【问题描述】:
我想用 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 行,在
数据 = stream.read(块)
文件“/Library/Python/2.5/site-packages/pyaudio.py”,第 562 行,已读
paCanNotReadFromAnOutputOnlyStream)
IOError: [Errno 不是输入流] -9975
有没有办法实例化 PyAudio 流,以便它从计算机的输出输入,而我不必将耳机插孔连接到麦克风?有没有更好的方法来解决这个问题?我宁愿坚持使用 python 应用程序并避免使用可可。
【问题讨论】:
-
你的笔记本电脑里已经有声音了? “另存为...”有什么问题,它是 Macintosh。
-
有没有一种简单的方法可以在浏览器中保存在 Flash 播放器中播放的文件(我猜它们是 .flv 文件)?我知道很多时候像 youtube 和 vimeo 这样的网站都有下载 .flv 文件的链接,但很多时候他们没有这样做的链接。
标签: python macos audio audio-streaming