Jsonから得るbase64の音声データを保存せず再生する方法

提供:sufeeWiki
ナビゲーションに移動 検索に移動

概要

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()

#以上