1. HOME
  2. ブログ
  3. IT技術
  4. Microsoft Azure を用いてキャラクターを流暢に話させる【Unity】

Microsoft Azure を用いてキャラクターを流暢に話させる【Unity】

Microsoft Azure でキャラクターを喋らせる

3Dゲームが従来より手軽に開発できる「Unity(ユニティ)」。

「スマートフォンアプリ」はもちろん、「Oculus(オキュラス)」などの VR ゲームまで開発することができます。

さらに、最近では「バーチャルYouTuber」の開発や運営にも「Unity」が使われています。

「Unity」で使える、様々な3Dモデルも無償で配布されており、それを使用して、開発する方も多いのではないでしょうか。

Unity での開発で音声をどうするか?

そんな開発の中、当たってしまう壁のひとつに「キャラクターの音声」が挙げられると思います。

「ゆっくりボイス」など、「合成音声によるフリーのテキスト読み上げソフト」で作成するのも一つの手です。

ですが、全てのセリフ毎に、mp3 の音声ファイルを作成するのは、大変な手間かもしれません。

そこで今回は、「Microsoft Azure(マイクロソフト アジュール)」を利用し、キャラクターに発声させ、「さらに、会話する」ところまで紹介したいと思います!

今回実装する上での注意点

  1. Microsoft Azure では、英語の読み上げしか提供されておりません。
  2. Unity の ver は 2018.3.14f1 です。2019ではエラーがでます。
  3. 本記事の Microsoft Azure の情報は 2020年1月21日時点のものになります。
  4. Microsoft Azure の Cognitive Service、Speech to Text、SpeechSDK を使用します。
    有料のサブスクリプションが推奨されます。会社、学校などで確認をお願いします。
    無料でも可能ですが、レスポンスが遅いので、違和感があります。

【準備1】Azure Speechリソースを作成する

まずは、下記のページの手順で、「Microsoft Azure」を使えるように設定をしましょう!

【Microsoft Azure 公式ドキュメント】
https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/get-started

設定が終わると、[リソースに移動]というボタンが出てくるので、選択します。

その後、左側のナビゲーションウィンドウで、[キー]を選択すると、「サブスクリプションキー」が表示されます。

この値を後ほど使用するので、記録しておいてください。

【準備2】UnityにSpeechSDKのパッケージをインストールする

下記のリンクから、「Unity のパッケージ」をインストールします。

【Unity パッケージ】
https://aka.ms/csspeech/unitypackage
※上記リンクで直接ダウンロードが始まります

その後、ダウンロードしたデータを、「取り込みたいUnityのプロジェクトを開いた状態」で右クリックします。

そうしてみると、以下のような画面が出てくるので、[import]を選択します。

プロジェクトビューの「Assets」に、「SpeechSDK」のフォルダができれば、準備は終了です。

話す側の設定

さて準備が整いました!

それでは、いよいよ、キャラクターを喋らせる設定を行いたいと思います!

まずは、こちらのドキュメントに従って、Unity のプロジェクトを操作します。

【Microsoft Azure 公式ドキュメント】
https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/quickstarts/text-to-speech?tabs=unity%2Clinux%2Cjre&pivots=programming-language-csharp

コードの変更

コードをコピーした後に、少し変更します。

サンプルプログラムの、90行目からです。

上記内の、 YourSubscriptionKeyYourServiceRegion を、【準備1】で確認した値にします。

YourServiceRegion  は、  japaneast  か japanwest のどちらかに変更してください。

※「japaneast(東日本)」か「japanwest(西日本)」の設定は、居住している地域にすることで、若干応答が早くなります。

発声までの最後の仕上げ

その後、「HelloWorld」を「Canvas」にアタッチし、以下のように「Inputfield」や「text」をアタッチします。

これで準備は完了です。

[play] ボタンを押した後、「Inputfield」に英文を入力して、ボタンを押します。

音声が聞こえれば成功です!

聞く側の設定

次は「こちらからの問いかけに答える」ことが出来るようにしていきます。

まずは、「こちらが話した言葉を、文字に変換」していきます。

先ほど使用した、SpeechSDK のサブスクリプションを、そのまま使います

Unity のプロジェクトに、「text」と「ボタン」を用意し、下記のドキュメントにある、コード「HelloWorld」を使用します。

【Microsoft Azure 公式ドキュメント】
https://docs.microsoft.com/en-us/azure/cognitive-services/speech-service/quickstarts/speech-to-text-from-microphone?tabs=unity%2Cx-android%2Clinux%2Cjava-runtime&pivots=programming-language-csharp

エラーの修正

ここで、前半使用した「HelloWorld」と、同じコード名が使用されているので、エラーが発生します。

ですので、スクリプトを作るときに「HelloWorld」でない名前を設定します。

また、スクリプトの中のクラス名「HelloWorld」も変更していきます。

サブスクリプションキーとリージョンの設定

前半と同じように、「サブスクリプションキー」と「リージョン」の設定を行います。

こちらは、サンプルコード30行目あたりです。

変更が終わったら、下記図のように「canvas」にスクリプトをアタッチし、対象となるオブジェクトをアタッチします。

できたら、[play]ボタンを押して実験してみましょう。

話した文章が、文字列として表示されれば成功です。

話す側と聞く側、二つのプログラムを接続する

話した言葉を文字に起こすプログラム」と、「文字通りに話すプログラム」を接続します。

想定問題集をつくる

まずは、チャットボットのように、想定問答集をつくります

話した言葉を文字起こしするとき、大文字小文字には揺らぎがあるので、下記のように数パターン用意しておきましょう。

上記のように、「文字起こしした値」に対して、「想定問答に基づいた返答」に変更しましょう。

文字通りの音声を読み上げるスクリプト に渡す

それを、一番始めに作った「文字通りの音声を読み上げるスクリプト」に渡します。

もともとが、「text」なので、「InputField」に入るように形式を変更しましょう。

InputField.text = inputtext.text;

これが面倒な場合は、文字読み上げを行う「HelloWorld」のスクリプトを、以下のように書き換えます。

public Text inputText;
を定義。
コードの30行目あたりの
using (var result = synthesizer.SpeakTextAsync(inputField.text).Result)

using (var result = synthesizer.SpeakTextAsync(inputText.text).Result)
になるように変更。

上記のように変更した場合、アタッチされているスクリプトに、「GameObject」を割り当てる「inputText」が増えています。

下記画像の内容になるよう、変更しましょう。

UI で必要のない Text を除外

その後、UIとして必要のない Text は、画面の外に追い出しておきます。

画像を見てもらえばわかると思いますが、ボタンを「話す」と「返事を聞く」の二つに分けています。

「話す」ボタンを押して話し、「返事を聞く」ボタンを押せば返事を聞くことができます。

さいごに

いかがでしたでしょうか?

音声が入れば、ゲームのクオリティも格段に上がったように感じられるかと思います。

ご紹介した内容を参考に、キャラクターを喋らせて遊んでみてください!

日本語化について

CustomSpeech(カスタムスピーチ)」という Azure の機能を使えば、「日本語化」ができるそうです。

ですが、Unity での組み込みではまだ動作しません。

そのため、更新があれば追記したいと思います!

【Microsoft Azure 公式ドキュメント】
https://docs.microsoft.com/ja-jp/azure/cognitive-services/speech-service/how-to-custom-speech

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

書いた人はこんな人

ライトコードメディア編集部
ライトコードメディア編集部
「好きなことを仕事にするエンジニア集団」の(株)ライトコードのメディア編集部が書いている記事です。

関連記事