2017-01-09 13 views
8

私はwavファイルとして自分の声を録音するためにpyaudioを使用しています。私はこれはwavファイルをインポートしようとするhttps://github.com/GoogleCloudPlatform/python-docs-samples/blob/master/speech/api-client/transcribe.pyGoogleスピーチAPIのための適切なWAVファイルの作成

:私は基本的にテキストにWAVファイルの音声を変換し、Googleの音声APIについて、次のコードを使用してい

def voice_recorder(): 
    FORMAT = pyaudio.paInt16 
    CHANNELS = 2 
    RATE = 22050 
    CHUNK = 1024 
    RECORD_SECONDS = 4 
    WAVE_OUTPUT_FILENAME = "first.wav" 

    audio = pyaudio.PyAudio() 

    # start Recording 
    stream = audio.open(format=FORMAT, channels=CHANNELS, 
        rate=RATE, input=True, 
        frames_per_buffer=CHUNK) 
    print "konusun..." 
    frames = [] 

    for i in range(0, int(RATE/CHUNK * RECORD_SECONDS)): 
     data = stream.read(CHUNK) 
     frames.append(data) 
    #print "finished recording" 


    # stop Recording 
    stream.stop_stream() 
    stream.close() 
    audio.terminate() 

    waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb') 
    waveFile.setnchannels(CHANNELS) 
    waveFile.setsampwidth(audio.get_sample_size(FORMAT)) 
    waveFile.setframerate(RATE) 
    waveFile.writeframes(b''.join(frames)) 
    waveFile.close() 

:私は、次のコードを使用していますそして、後に、私はMP3ファイルを変換するよ、私はffmpegのとMP3にWAVファイルを変換しています:

googleapiclient.errors.HttpError: <HttpError 400 when requesting https://speech.googleapis.com/v1beta1/speech:syncrecognize?alt=json returned "Invalid Configuration, Does not match Wav File Header. 
Wav Header Contents: 
Encoding: LINEAR16 
Channels: 2 
Sample Rate: 22050. 
Request Contents: 
Encoding: linear16 
Channels: 1 
Sample Rate: 22050."> 

私はこのために、以下の回避策を使用しています:Googleのコードにpyaudioによって生成され、私は次のエラーを取得していますsoxで再びwavに:

def wav_to_mp3(): 
    FNULL = open(os.devnull, 'w') 
    subprocess.call(['ffmpeg', '-i', 'first.wav', '-ac', '1', '-ab', '6400', '-ar', '16000', 'second.mp3', '-y'], stdout=FNULL, stderr=subprocess.STDOUT) 

def mp3_to_wav(): 
    subprocess.call(['sox', 'second.mp3', '-r', '16000', 'son.wav']) 

GoogleのAPIはこのWAV出力で動作しますが、品質が低下しすぎるため、うまく動作しません。

最初の手順でpyaudioでGoogleの互換WAVファイルを作成するにはどうすればよいですか?

答えて

4

はavconvでFLACファイルにwavファイルを変換すると、GoogleのスピーチAPIに送信するには、問題に

subprocess.call(['avconv', '-i', 'first.wav', '-y', '-ar', '48000', '-ac', '1', 'last.flac']) 
を解決しました
関連する問題