docomoの音声合成APIのAudio/L16のデータをaplayコマンドで再生する
docomoの音声合成API【Powerd by エーアイ】を使って、返ってくるAudio/L16のデータをaplayコマンドで再生するメモ。
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のヘルプを見つつ、こんな感じにしたら再生できた。
参考