「Jsonから得るbase64の音声データを保存せず再生する方法」の版間の差分
ナビゲーションに移動
検索に移動
Sufee Admin (トーク | 投稿記録) ページの作成:「==概要== webapiから受け取った音声データを保存せずにバッファのみで再生する方法。<br> ※ただし以下の条件で行う ・base64でエンコードとasciiでデコードしたデータをそのままjson形式で受け取る。 ・受け取ったらその逆をして音声に復元する。 ・音声フォーマットはwavである。 ==コード==」 |
Sufee Admin (トーク | 投稿記録) 編集の要約なし |
||
7行目: | 7行目: | ||
==コード== | ==コード== | ||
<syntaxhighlight lang="python3"> | |||
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() | |||
#以上 | |||
</syntaxhighlight> |
2022年11月15日 (火) 18:22時点における最新版
概要
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()
#以上