3

私はから音を取得しています:

http://translate.google.com/translate_tts

それを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を使用しています。

4

2 に答える 2

3

ではないファイルを再生しようとしているため、このエラーが発生しますWAV

Google 翻訳によって生成された音声は、MP3.

MP3Python でサウンドを再生する方法については、この StackOverflow questionを読むことをお勧めします。

(基本的にPygletのようなライブラリをインストールする必要があります)

于 2013-05-02T01:58:40.793 に答える
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 ファイルを再生できます。

于 2013-12-21T18:47:46.210 に答える