はじめに
こんにちは、らんだむちゃんとしゃべり隊です。この「らんだむちゃんとしゃべろ」は、らんだむちゃんとしゃべり隊であるKENYAとIWANKの二人で制作しました。
KENYA
今回の作品では主に文書生成と辞書機能などのシステム面を担当しました。
最初、文章生成を自分で作ろうと考えていました。そのために訳のわからないブログや論文などをいろいろ読みました。まずやんわりと理解した状態で実装しようと頑張ってみたものの、意味不明すぎて意味不明でした。
次にブログなどに上がっているものを模倣しようと試みました。ブログの通り動かすことができたのですが、やはりそこまでレベルの高いものでは無いため別の方法を考えることにしました。別のブログのものと複合させてみたりしたが、結局レベルの低いもの同士の合体という感じでした。
と言う訳で、APIに頼ろうと言う結論に至りました。使ったAPIはTalkAPIというものです。さすが企業が出しているものというだけあって、ブログのものよりも性能が格段に良いです。それでもまだ理想には少し遠いものでしたが、これ以上ここに時間をかける訳にもいかないのでこれを採用することにしました。とりあえず文章生成の部分が出来たので、次は音声読み上げの部分について取り掛かることにしました。この部分はIWANK君のおかげでスムーズにいくことができました。こちらはAgentcraftというAPIを使うことにしました。このAPIはあらかじめ自分で設定した条件から文章とその音声を返してくれるというものです。例えば、「おはよう」と入力された場合には「おはようございます」と返すと設定するというものです。これだけを使うとなると無限に設定しなければならないのですが、この部分にTalkAPIを使うことでこれらの無限の設定をしなくて済みます。まず、入力された文章をTalkAPIに通し、そこから得られた文章をAgentcraftへ渡し、Agentcraftにオウム返しを設定しておくことでTalkAPIから得られた文章を音声で返してくれるというようにうまく機能しました。本来ならばこれで完成という予定でしたが、自分で返事を決めることができたほうが良いということになったので、辞書機能を付けることにしました。
この作品は、しゃべってコンシェルジュのようなものをらんだむちゃんがやってくれたら面白いんじゃないかというところから始まりました。初めは適当に個人で暇潰しにやろうかなと思っていましたが、IWANK君が協力してくれるということで一緒に作ることになりました。おそらく個人で作っていたら文章生成のところで色々つまづいた時に諦めていたと思います。しかし、2人いたことで問題の解決策を見つけることができた場面が多々あったのでIWANK君にはとても感謝しています。この作品ができたのはIWANK君のおかげだったと思います。
追伸 APIは最強です。
IWANK
今回の作品では、実際にUnityで色々らんだむちゃんをウリウリしたりスクリプトの調整など全体のUI面を担当しました。
KENYA君が言っている通り、この作品は元々KENYA君が構想していたところに私が乗り込みました。最初は実装する壁の高さに怯えてぷるぷるスライム震いしていましたが、分担してあれやこれやとやっていくうちになんとか形になりました。システム面を全般的に実装したKENYA君は流石だなというところで、乗り込んで一緒に制作できて良かった~という気持ちです。本当にありがとう(ここでたいようのおどりを踊る)
さて、少々KENYA君とは書く順番が変わってしまったのですが、ここからは、今回どのようにしてUnity上でAPIを利用したかについて話していこうと思います。 個々のAPIの説明は上記にあるので、まずは今回のアプリの仕組みを俯瞰しましょう。
このように、アプリ側ではほとんどグラフィックの描画と音声出力のみで、それ以外の機能についてはAPI側で行っています。そのため、アプリの処理としてはそこまで重くないはずですが、回線速度が遅いとHTTPに怒られます。実際、ネットと有線で繋がっているデスクトップPCではなんなく動作しましたが、学内LANに接続したノートPCでは「判断が遅い!」と怒られてしまい、特に音声合成時にタイムアウトエラーが生じます。世知辛いです。
具体的なUnityで動作するコードについては割愛させていただきます。APIを公開している企業の公式リファレンスを見ていただく方が早そうです。
・TalkAPI -> https://a3rt.recruit-tech.co.jp/product/talkAPI/
・AgentCraft -> https://docs.sebastien.ai/documents/tutorial05/
この二つのAPIを実際にスクリプトでどうやって組み合わせているかという点についてですが、非同期処理のコルーチンを用いて実装しています。こういったサーバー通信をする処理があるときは非同期処理が有用な気がします。というか初めてAPIを叩いたので正直あまりよくわかっていません(突然の暴露)。もしかすると、この辺の処理が雑でHTTPから怒られたり、動作が不安定になってしまっているのかもしれません。その可能性はかなり高いです......精進精進!
また、今回はdocomoがSpeakSDK for Unityというとても便利なUnity用のSDKを公開していたので、これをベースにしてAPIを組み合わせました。APIのつじつま合わせは結構怖いです。間違えて毎フレームAPIサーバーにリクエストしていた日には即利用停止です。気を付けて実装します。デバッグするときも慎重に行いましょう。
ちゃんとらんだむちゃんの声が聞こえれば成功です。やったね!
そうして基本システムができた後は、実際にらんだむちゃんをUnityに招待し、AgentCraftから音声ファイルが届いたらそれに合わせて口のゲイン値を変化させ、口パクをしてくれるようにらんだむちゃんにお願いします。あとは細かいUIを実装してフィニッシュです。お疲れ様でした。
(そういえば、個人で利用可能な音声合成のAPIは、私が調べた限りだとこのAgentCraftが一番質が良いなと感じました。なぜかというと、声の抑揚などが自然なのはもちろん、ボイスの種類が豊富なんです。らんだむちゃんの声はきりたんの声に近い -rin というエージェントを採用したのですが、私はそれよりも幼ない、-aoi というエージェントの声が好みでした。AgentCraftは基本機能だけであれば無料(今回の制作も無料です)なので、ぜひ皆さんも試してみては?API芸人には気を付けよう!)
おわりに
ここまでお読みいただきありがとうございました。また、新歓イベントで実際にらんだむちゃんとおしゃべりしてくださった皆さんにもお礼を申し上げます。ありがとうございました。らんだむちゃんも色んな人と交流できて楽しかったみたいです。
さて、らんだむちゃんとしゃべりたいという小さな思いから、なんとかおしゃべりができるようになったのは大変めでたいことです。しかし、まだUIに不十分なところがあったり、たまに辞書機能がバグったり等、改善できる点は多々あります。
また、この作品をWebで公開したいとめちゃくちゃ思っていますが、APIの規約と仕様により厳しい状況です......。いつかまた別の形でアップデートされた「らんだむちゃんとしゃべろ」を公開できる日がくるかもしれません。To Be Continued ......!
他にもランダムには面白い作品がたくさんあるので、ぜひ他の作品の制作記も見てくださいね!