我正在检索声音:
并将其写入WAV文件,当我双击该文件时声音播放正常,但是当我使用python中的WAVE模块打开它时,它会给我这个错误:
wave.Error:文件不以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 BTW。
答案 0 :(得分:3)
您有此错误,因为您尝试播放的文件不是WAV
。
Google翻译生成的声音编码为MP3
。
至于如何使用Python播放MP3
声音,我建议您阅读this StackOverflow question。
(基本上你必须安装一些像Pyglet)
这样的库答案 1 :(得分: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文件。