前提・実現したいこと
Googleのapiであるtext-to-speechをpythonから呼び出し、
得られた音声データをwavファイルを作成せずにそのまま再生したい。
発生している問題・エラーメッセージ
apiのレスポンスから得られたデータをどのようにすればpyaudioで再生できるのかわかりません。
Traceback (most recent call last): File "test.py", line 34, in <module> with wave.open(audio, 'rb') as wf: File "C:\Users\tisma\Anaconda3\envs\test2\lib\wave.py", line 499, in open return Wave_read(f) File "C:\Users\tisma\Anaconda3\envs\test2\lib\wave.py", line 163, in __init__ self.initfp(f) File "C:\Users\tisma\Anaconda3\envs\test2\lib\wave.py", line 128, in initfp self._file = Chunk(file, bigendian = 0) File "C:\Users\tisma\Anaconda3\envs\test2\lib\chunk.py", line 61, in __init__ self.chunkname = file.read(4) AttributeError: 'bytes' object has no attribute 'read'
該当のソースコード
python3
1import base64 2import json 3import requests 4import pyaudio 5import wave 6import time 7 8text = 'こんにちは' 9str_url = "https://texttospeech.googleapis.com/v1beta1/text:synthesize?key=" 10str_api_key = "hogehoge" 11str_headers = {'Content-Type': 'application/json; charset=utf-8'} 12url = str_url + str_api_key 13str_json_data = { 14 'input': { 15 'text': text 16 }, 17 'voice': { 18 'languageCode': 'ja-JP', 19 'name': 'ja-JP-Wavenet-A', 20 'ssmlGender': 'FEMALE' 21 }, 22 'audioConfig': { 23 'audioEncoding': 'LINEAR16', 24 'speakingRate': 1.1, 25 'pitch': 1.0, 26 } 27 } 28 29jd = json.dumps(str_json_data) 30r = requests.post(url, data=jd, headers=str_headers) 31if r.status_code == 200: 32 parsed = json.loads(r.text) 33 audio = base64.b64decode(parsed['audioContent']) 34 with wave.open(audio, 'rb') as wf: 35 # 以下再生用処理 36 p = pyaudio.PyAudio() 37 38 def _callback(in_data, frame_count, time_info, status): 39 data = wf.readframes(frame_count) 40 return (data, pyaudio.paContinue) 41 42 stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), 43 channels=wf.getnchannels(), 44 rate=wf.getframerate(), 45 output=True, 46 stream_callback=_callback) 47 48 stream.start_stream() 49 while stream.is_active(): 50 time.sleep(0.1) 51 52 stream.stop_stream() 53 stream.close() 54 p.terminate()
回答1件
あなたの回答
tips
プレビュー