Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

docomoの音声合成APIのAudio/L16のデータをaplayコマンドで再生する

docomo音声合成API【Powerd by エーアイ】を使って、返ってくるAudio/L16のデータをaplayコマンドで再生するメモ。


dev.smt.docomo.ne.jp

package main

import (
	"io"
	"net/http"
	"os"
	"strings"
	"time"
)

const APIKey = "XXX"

func main() {
	url := "https://api.apigw.smt.docomo.ne.jp/aiTalk/v1/textToSpeech?APIKEY=" + APIKey

	ssml := `<?xml version="1.0" encoding="utf-8" ?>
<speak version="1.1">
<voice name="nozomi">
のぞみです。おはようございます。
</voice>
<break time="1000ms" />
<voice name="seiji">
せいじです。こんにちは。
</voice>
</speak>`

	req, err := http.NewRequest("POST", url, strings.NewReader(ssml))
	if err != nil {
		panic(err)
	}
	req.Header.Add("Content-Type", "application/ssml+xml")
	req.Header.Add("Accept", "audio/L16")
	client := &http.Client{Timeout: time.Duration(10) * time.Second}
	res, err := client.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()
	dst, err := os.Create("sound.raw")
	if err != nil {
		panic(err)
	}
	if _, err := io.Copy(dst, res.Body); err != nil {
		panic(err)
	}
}
$ aplay -t raw -r 16k -c 1 -f S16_BE sound.raw

aplayのヘルプを見つつ、こんな感じにしたら再生できた。


参考

blog.leko.jp