Jsonから得るbase64の音声データを保存せず再生する方法
ナビゲーションに移動
検索に移動
概要
webapiから受け取った音声データを保存せずにバッファのみで再生する方法。
※ただし以下の条件で行う ・base64でエンコードとasciiでデコードしたデータをそのままjson形式で受け取る。 ・受け取ったらその逆をして音声に復元する。 ・音声フォーマットはwavである。
コード
import requests
import base64
import sounddevice as sd
import wave
import io
import numpy as np
#API Access
res = requests.get("URL",timeout=60)
if res.status_code != requests.codes.ok:
sys.exit()
#JSON GET
json_data = res.json()
#復元する asciiのバイトに変換のちbase64形式を戻す
audio = base64.b64decode((json_data["audio"]).encode("ascii"))
#ローカルのパス指定なのでioライブラリで渡す
wf = wave.open(io.BytesIO(audio))
fs = wf.getframerate()
data = wf.readframes(wf.getnframes())
data = np.frombuffer(data, dtype='int16')
#再生
sd.play(data, fs)
status = sd.wait()
#以上