2

所以这里我们有一个 Python 脚本:

""" Record a few seconds of audio and save to a WAVE file. """

import pyaudio
import wave
import sys

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"

p = pyaudio.PyAudio()

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

print "* recording"
all = []
for i in range(0, RATE / chunk * RECORD_SECONDS):
    data = stream.read(chunk)
    all.append(data)
print "* done recording"

stream.close()
p.terminate()

# write data to WAVE file
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()

这个脚本执行第一条评论行所说的,如果你在终端中运行它,它将在你在执行时设置的路径中输出一个“.wav”文件......我想做的是得到该文件并“操纵”它,而不是将其输出到计算机,我想将它存储在一个变量或类似的东西中,然后我想将它发布到一个解析一些参数的URL......我看到了一些使用requests发布多部分编码文件的有趣示例,如您在此处看到的:

http://docs.python-requests.org/en/latest/user/quickstart/

但是我做了几次尝试来实现我在这个问题中描述的内容,但我很不幸......也许一些指导会对此有所帮助:)

简而言之,我需要的是从麦克风记录一个 WAV 文件,然后将其发布到一个 URL(解析数据,如标题),然后在终端中以打印语句或类似的方式获取输出......

谢谢你!!

4

1 回答 1

0

wave.open允许您传递要保存的文件名或类似文件的对象。如果您传入一个StringIO对象而不是WAVE_OUTPUT_FILENAME,您将获得一个字符串对象,您大概可以使用它来构造一个 POST 请求。

请注意,这会将文件加载到内存中——如果它可能真的很长,您可能更愿意将其放入一个临时文件中,然后使用它来提出您的请求。当然,您已经将它加载到内存中,所以也许这不是问题。

于 2012-01-28T02:26:34.613 回答