3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UnityでWatsonの音声認識と音声読み上げを使ってみる

Last updated at Posted at 2020-05-28

#はじめに
はじめして!Qiita初投稿になります!
よろしくお願いいたします。

本記事では、
UnityでのWatsonを使ったアプリケーションを作る際に、自分がわからなくて詰まった
Watson SDKにおけるSpeech To TextとText To Speechの認証方法と使い方について記述します。
これらサービスを使ったアプリケーションを作成しているので
以下のURLを参考にしてみてください。
https://github.com/sugarsolt/SecretaryUnity-chan

#対象者
UnityのWatson SDKを使ってみたいけど、使い方がよくわからない人
(注)ただし、IBM Cloudへの登録方法は記述しません。

#目次

#インストール
Watson SDkのインストール方法は以下のURLにも記載されていますが、簡単に説明させていただきます。
https://github.com/watson-developer-cloud/unity-sdk

  1. Unityでプロジェクトを作成
  2. Api Compatibility Levelを.Net 4.xに変更
  3. unity-sdkとunity-sdk-coreをダウンロード
  4. unity-sdkとunity-sdk-coreを解凍
  5. unity-sdkとunity-sdk-coreをAsset下に移動
    以上でインストールは完了です。
    ここで、私が使っている各ソフトウェアのバージョンを記載します。
  • Windows10
  • Unity 2019.3.12f1 (64-bit)
  • unity-sdk-core 1.2.0
  • unity-sdk 4.6.0

#認証
この章では、Speech To TextとText To Speechサービスを使う上での認証用プログラムを示します。
ここはサンプルプログラムと同じです。

##Speech To Text認証
これはSpeech To Textサービスの認証用のプログラムになります。
APIとURLを入力することによって認証を得ます。

Talk.cs
private IEnumerator authWatsonSTT(){
    //STT認証
    if (string.IsNullOrEmpty(STTIamApikey))
    {
        throw new IBMException("Plesae provide IAM ApiKey for the service.");
    }
    IamAuthenticator authenticator = new IamAuthenticator(apikey: STTIamApikey);
    //  Wait for tokendata
    while (!authenticator.CanAuthenticate()){
        yield return null;
    }
    STTService = new SpeechToTextService(authenticator);
    if (!string.IsNullOrEmpty(STTServiceUrl))
    {
        STTService.SetServiceUrl(STTServiceUrl);
    }
    yield break;
}

##Text To Speech認証
これはText To Speechサービスの認証用のプログラムになります。
Speech To Text認証と同様にAPIとURLを入力することによって認証を得ます。

Talk.cs
private IEnumerator authWatsonTTS(){
    //TTS認証
    if (string.IsNullOrEmpty(TTSIamApikey))
    {
        throw new IBMException("Plesae provide IAM ApiKey for the service.");
    }
    IamAuthenticator authenticator = new IamAuthenticator(apikey: TTSIamApikey);
    //  Wait for tokendata
    while (!authenticator.CanAuthenticate()){
        yield return null;
    }
    TTSService = new TextToSpeechService(authenticator);
    if (!string.IsNullOrEmpty(TTSServiceUrl))
    {
        TTSService.SetServiceUrl(TTSServiceUrl);
    }
    yield break;
}

#音声認識・音声読み上げ
この章では音声認識プログラムと音声読み上げプログラムについて記述いたします。
ここでは示さないその他のパラメータの指定方法はwatson sdkのサイトを参考にしてください。

##Speech To Text
Speech To Textサービスを利用するためのプログラムについて記述します。
機能としては、watsonを使って、wav形式の音声データを文章に変換するものです。
このプログラムで指定する必要があるパラメータは”audio”、”contentType”、”model”になります。
”audio”では”contentType”で指定した形式のデータをbyte[]型で取得したものを渡すところになります。
”contentType”ではwavやmp3などのデータ形式を指定します。
”model”では日本語や英語などを聞き取るデータの言語を指定します。
ここでは日本語を聞き取るので”ja-JP_BroadbandModel”を指定しました。
コールバック関数の中では、送信した音声データを文字列に変換したデータを取得しています。

Talk.cs
private IEnumerator WatsonSTT()
{
    //認識開始 
    STTService.Recognize(callback: (DetailedResponse<SpeechRecognitionResults> response, IBMError error) =>
        {
            jsontext = response.Response;
        },
        audio: bytes,
        contentType: "audio/wav",
        model: "ja-JP_BroadbandModel"
    );
    yield break;
}

##Text To Speech
Text To Speechサービスを利用するためのプログラムについて記述します。
機能としては、watsonを使って文章をwav形式の音声データに変換するものです。
このプログラムで指定する必要があるパラメータは”text”、”voice”、”accept”になります。
”text”では発声してほしい文字列を指定します。
”voice”では発声してほしい話者を指定します。
”accept”では発声データの形式を指定します。
コールバック関数の中では、取得したbyte[]型のデータをaudio clipに変換し、
それを再生しています。

Talk.cs
private IEnumerator WatsonTTS(string VoiceText){
    //認識開始 
    byte[] synthesizeResponse = null;
    clip = null;
    TTSService.Synthesize(callback: (DetailedResponse<byte[]> response, IBMError error) =>
        {
            synthesizeResponse = response.Result;
            clip = WaveFile.ParseWAV("myClip", synthesizeResponse);
            PlayClip(clip);
        },
        text: VoiceText,
        voice: "ja-JP_EmiV3Voice",
        accept: "audio/wav"
    );
    yield break;
}

#最後に
アプリケーションでwatsonを使う際に詰まったところについて記述しました。
初投稿で分かりにくいところが多々あると思いますが生暖かい目で見守ってください。

#参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?