Воспроизвести содержимое звука, полученного из URL-адреса?

Я извлекаю звук из:

http://translate.google.com/translate_tts

и записываю его в файл WAV, когда я дважды щелкаю файл, звук воспроизводится нормально, но когда я использую модуль WAVE из python, чтобы открыть его, это дает мне эту ошибку:

волна.Ошибка: файл не начинается с идентификатора RIFF

Я хочу знать, есть ли способ открыть этот файл или можно ли воспроизвести звук без предварительной записи.

Вот соответствующий код:

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.


person R3D57R34K    schedule 02.05.2013    source источник


Ответы (2)


У вас есть эта ошибка, потому что вы пытаетесь воспроизвести файл, который не является WAV.

Звук, генерируемый Google Translate, кодируется как MP3.

Что касается того, как воспроизвести звук MP3 с помощью Python, я бы рекомендовал вам прочитать этот вопрос StackOverflow.

(В основном вам нужно установить некоторую библиотеку, например Pyglet)

person halflings    schedule 02.05.2013

В качестве альтернативы, если вам нужен файл wav, вы можете установить что-нибудь, чтобы преобразовать его в файл wav. Pymedia — хороший модуль для этого. Версия pymedia, созданная для текущих версий Python, может быть трудно найти, однако я нашел хорошее место, чтобы получить ее по адресу: 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, но гораздо проще воспроизводить wav-файл в python. Например, поддержка файлов mp3 в pygame ограничена, но всегда можно воспроизвести файл wav.

person trevorKirkby    schedule 21.12.2013