カッティングボード

カルマをカットしてます

ゆかりさんと雑談する

このブログは↓のアドベントカレンダーの14日目の記事です.

なんだかんだ折り返してあと半分なので頑張っていきたいと思います.

adventar.org

今週の月曜日のアドベントカレンダーの記事に↓のようなものがありました.

5st7.hatenablog.com

ゆかりさんが喋ってくれるdocomoapiがあるらしい.

ゆかりさんと対話することで寂しさを紛らわせたいよねってことで,僕はゆかりさんと雑談することに決めました.

ゆかりさんと雑談する

使用するもの

docomoapiを2つ利用します. dev.smt.docomo.ne.jp dev.smt.docomo.ne.jp

実装

実装としてはコンソールで入力した文字を雑談apiに投げて,その返答をゆかりさんに喋らせてます. ゆかりさんが喋る部分のコードはごーなんちゃらさんのコードを参考にしてます.

require 'uri'
require 'openssl'
require 'net/http'
require 'json'

APIKEY = 'YOUR_APIKEY'
speach_uri = URI.parse("https://api.apigw.smt.docomo.ne.jp/aiTalk/v1/textToSpeech?APIKEY=#{APIKEY}")
speach_http = Net::HTTP.new(speach_uri.host, speach_uri.port)
speach_http.use_ssl = true

chat_uri = URI.parse("https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=#{APIKEY}")
chat_http = Net::HTTP.new(chat_uri.host, chat_uri.port)
chat_http.use_ssl = true


chat_body = {}

loop do
  chat_body['utt'] = gets

  chat_request = Net::HTTP::Post.new(chat_uri.request_uri, {'Content-Type' =>'application/json'})
  chat_request.body = chat_body.to_json
  chat_response = nil
  chat_http.start do |h|
    resp = h.request(chat_request)
    chat_response = JSON.parse(resp.body)
  end
  chat_body['context'] = chat_response['context']
  chat_body['mode'] = chat_response['mode']

  speach_request = Net::HTTP::Post.new(speach_uri.request_uri, {'Content-Type': 'application/ssml+xml','Accept': 'audio/L16'})
  speach_request.body = "<?xml version='1.0' encoding='utf-8' ?>
    <speak version='1.1'>
    <voice name='sumire'>
      #{chat_response['utt']}
    </voice>
    </speak>
  "

  speach_response = nil
  speach_http.start do |h|
    resp = h.request(speach_request)
    speach_response = resp.body
  end

  
  File.open("tmp.raw", "w") do |f| 
    f.puts(speach_response)
  end
  
  system('sox -t raw -r 16k -e signed -b 16 -B -c 1  tmp.raw output.wav')
  system('afplay output.wav')

end

いい感じに対話してるのを撮りたかったのですが,いい感じに録画する方法がなかったのでとりあえずコードだけ貼っておきます.

しりとりとかもできるので,ゆかりさんとの楽しい雑談で暇な時間をつぶせます.

APIの登録ちょっとめんどくさいですが,いろいろ試して遊べるので是非試してみてください.

明日はかのんくんです,

雑談APIにののしってとお願いするとゆかりさんにたまに罵ってもらえます.実装したdocomoの人神かよ