用Python将“.wav”文件POST到URL,如何打印响应?

3 投票
1 回答
3429 浏览
提问于 2025-04-17 11:16

这里有一个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”文件……我想做的是获取这个文件并“处理”它,我不想把它输出到电脑上,而是想把它存储在一个变量里,之后我想把它通过POST请求发送到一个网址,同时解析一些参数……我看到了一些有趣的例子,展示了如何使用requests库发送multipart-encoded files,你可以在这里看到:

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

但是我尝试了好几次想实现我在这个问题中描述的内容,但都没有成功……也许一些指导会对我有帮助 :)

简单来说,我需要从麦克风录制一个WAV文件,然后把它通过POST请求发送到一个网址(同时带上像Headers这样的数据),最后在终端中以打印语句的形式输出结果……

谢谢你!!

1 个回答

0

wave.open 这个功能可以让你传入一个文件名或者一个像文件一样的对象来保存数据。如果你传入的是一个 StringIO 对象,而不是 WAVE_OUTPUT_FILENAME,那么你就能得到一个字符串对象,这个字符串对象可以用来构建一个 POST 请求。

需要注意的是,这样做会把文件加载到内存中——如果文件很大,你可能会更倾向于先把它保存到 一个临时文件 中,然后再用这个临时文件来发送请求。当然,你已经把它加载到内存里了,所以这可能不是个大问题。

撰写回答