2013-05-02 28 views
3

我從獲取的聲音:播放從網址中檢索到的聲音的內容?

http://translate.google.com/translate_tts

並將其寫入到一個WAV文件,當我雙擊播放聲音OK文件,但是當我使用Wave模塊從Python來打開它,它給我這個錯誤:

wave.Error: file does not start with RIFF id

我想知道如果有一個開擴這個文件的方式,或者如果它可以播放聲音之前沒有寫它。

下面是相關代碼:

url = "http://translate.google.com/translate_tts?tl=%s&q=%s" % (lang, text) 
hrs = {"User-Agent": 
     "Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7"} 

request = urllib.request.Request(url, headers = hrs) 
page = urllib.request.urlopen(request) 

fname = "Play"+str(int(time.time()))+".wav" 
file = open(fname, 'wb') 
file.write(page.read()) 
file.close() 

和代碼讀取這個文件是:提前

INPUT_FRAMES_PER_BLOCK = 1024 

wf = wave.open(fname, 'r') 

pa = pyaudio.PyAudio() 

stream = pa.open(format=pa.get_format_from_width(wf.getsampwidth()), 
       channels=wf.getnchannels(), 
       rate=wf.getframerate(), 
       output=True) 

data = wf.readframes(INPUT_FRAMES_PER_BLOCK) 

while data != '': 
    stream.write(data) 
    data = wf.readframes(INPUT_FRAMES_PER_BLOCK) 

stream.stop_stream() 
stream.close() 

pa.terminate() 

謝謝! 我正在使用Python 3順便說一句。

回答

3

你有這個錯誤,因爲你試圖播放的文件不是WAV

Google Translate產生的聲音編碼爲MP3

至於如何使用Python播放MP3聲音,我建議您閱讀this StackOverflow question

(基本上,你必須安裝一些圖書館像Pyglet

0

另外,如果你想有一個wav文件,你可以安裝的東西將其轉換爲WAV文件。 Pymedia是一個很好的模塊。爲當前版本的python製作的pymedia版本可能很難找到,但是,我發現了一個很好的地方可以獲得它:http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymedia

這是一個函數,它將mp3文件轉換爲wav文件,並保存在你的文件系統中的wav文件:

def dumpWAV(name): 
    import pymedia.audio.acodec as acodec 
    import pymedia.muxer as muxer 
    import time, wave, string, os 
    name1= str.split(name, '.') 
    name2= string.join(name1[ : len(name1)- 1 ]) 
    # Open demuxer first 
    dm= muxer.Demuxer(name1[ -1 ].lower()) 
    dec= None 
    f= open(name, 'rb') 
    snd= None 
    s= " " 
    while len(s): 
     s= f.read(20000) 
     if len(s): 
      frames= dm.parse(s) 
      for fr in frames: 
       if dec== None: 
        # Open decoder 
        dec= acodec.Decoder(dm.streams[ 0 ]) 
       r= dec.decode(fr[ 1 ]) 
       if r and r.data: 
        if snd== None: 
         snd= wave.open(name2+ '.wav', 'wb') 
         snd.setparams((r.channels, 2, r.sample_rate, 0, 'NONE','')) 
        snd.writeframes(r.data) 

你可能只想播放MP3,但它顯著更容易在python播放WAV文件。例如,pygame對mp3文件的支持是有限的,但它總是可以播放一個wav文件。