2012-01-28 40 views
2

所以在這裏我們有一個Python腳本:使用Python將「.wav」文件POST到URL,打印響應如何?

""" 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() 

而且這個腳本做的第一comentary行說什麼,如果你在終端上運行它,它會在輸出路徑中的「.WAV」文件你設置在執行的那一刻......我想要做的是獲取該文件並「操縱」它,而不是將其輸出到計算機,我想將其存儲在一個變量或類似的東西中,然後我會喜歡將它張貼到URL解析一些參數以及它...我看到一些有趣的例子發佈多部分編碼文件使用請求,你可以看到這裏:

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

但我做了什麼實現我descripting在這個問題上,我是不幸的......也許有一點指導,將有助於這一個:)

作爲簡單地說,我需要的是多次嘗試從麥克風錄製一個WAV文件,然後將其張貼到一個URL(解析數據就像Headers一樣),然後在打印語句或類似終端中獲得輸出...

謝謝!

回答

0

wave.open可以傳遞是一個文件名或文件的對象保存成。如果你傳入一個StringIO對象而不是WAVE_OUTPUT_FILENAME,你可以得到一個你可以用來構造一個POST請求的字符串對象。

注意,這將文件加載到內存 - 如果它可能是很長的,你可能更喜歡做into a temporary file,然後用它來使你的要求。當然,你已經把它加載到內存中,所以也許這不是問題。

+1

在Python 3,你也可能希望[BytesIO(http://docs.python.org/py3k/library/io.html#io.BytesIO)來代替。 – millimoose 2012-01-28 02:41:34

+0

好吧,這個建議我得到一個:啓動腳本時「AttributeError的‘海峽’對象有沒有屬性‘項目’」的錯誤,它實際上記錄的音頻,將其解析爲一個變量(如果你嘗試打印,它實際上是二進制數據),然後,當試圖POST數據時,我得到這個錯誤。爲什麼? *使用StringIO – Jmlevick 2012-01-28 03:20:56

+0

聽起來就像你正在傳遞一個字符串,在那裏想要一個字典(它有一個'.items()'方法)。這是怎麼回事? – Dougal 2012-01-28 03:26:43

相關問題