none
Cevio Creative Studioの外部連携で感情を設定したい RRS feed

  • 質問

  • using System;
    using CeVIO.Talk.RemoteService; //CeVIO.Talk.RemoteService.dllを参照
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                CeVIO.Talk.RemoteService.Talker talker = new CeVIO.Talk.RemoteService.Talker();
    
                if (string.IsNullOrWhiteSpace(talker.Cast))
                {//0が『さとうささら』、1が『すずきつづみ』、2が『タカハシ』
                talker.Cast = CeVIO.Talk.RemoteService.Talker.AvailableCasts[0];
                }
                talker.Volume = 100;
                talker.Speed = 50;
                talker.Tone = 50;
                talker.Alpha = 50;
                //感情を設定する 『さとうささら』の場合、"普通"、"元気"、"怒り"、"悲しみ"の4つ
                CeVIO.Talk.RemoteService.TalkerComponent emotion;
                emotion.Name
                emotion.Value = 50; 
                
                CeVIO.Talk.RemoteService.SpeakingState state;
                state = talker.Speak("さとうささらです");
                if (!state.IsSucceeded)
                {
                    Console.WriteLine("再生に失敗しました。");
                }
                else
                {
                    state.Wait(100);
                    if (!state.IsCompleted)
                    {
                        talker.Stop();
                        Console.WriteLine("再生が完了しませんでした。");
                    }
                    else
                    {
                        Console.WriteLine("再生が完了しました。");
                    }
                }
            }
        }
    }

    Rubyの開発経験はありますが、C#にはまだまだ慣れないBURIです。

    あれから数冊入門書を読み返しました。『作って覚えるVisualC#2010Express入門』秀和システム、『猫でもわかるC#プログラミング』ソフトバンク、『やさしいC#』ソフトバンクなどを読みました。 

    Cevioの外部連携ができない

    のスレッドにてご教示いただいたサンプルプログラムで発声はできたのですが、感情を設定したいのです。

    ・CeVIO Creative Studio ユーザーズガイド > 外部連携インターフェース:をもとに先のソースをいじってみた結果が以上のとおりです。

    感情パラメータ関連は省略してはいけないのでしょうか。また、感情それぞれ、『さとうささら』の場合、"普通"、"元気"、"怒り"、"悲しみ"に値を設定するにはどうしたらよいのでしょうか。

    ご教示よろしくお願いします。

    BURI


    • 編集済み BURI55 2014年6月25日 18:46
    2014年6月25日 18:44

回答

  • 再度NETアセンブリとして利用を参照して、感情を表すらしいTalkerComponentクラスがどこで使われているのかを探すと、TalkerComponentCollectionクラスで使われていて、さらにそれがTalkerクラスのComponentsプロパティで使われていることが分かります。
    つまり、すでにCastが設定済みのTalkerクラスのComponetsプロパティからTalkerComponentCollectionを取得して、CollectionからTalkerComponentを取得できそうです。
    CollectionはCountとインデクサーが2個(this[int],this[string])あるので、インデクサーで要素を取り出せそうです。
    インデクサーはint型とstring型が定義されているので、emotion[0]やemotion["普通"]のようにして要素を取り出せます。指定されているCastに感情があることが分かっていればstring型ので直接アクセスするのが早いでしょうが、不明な場合はCountで数を調べて要素数内でループをしてint型ので取り出してみます。

    //感情を設定する 『さとうささら』の場合、"普通"、"元気"、"怒り"、"悲しみ"の4つ
    CeVIO.Talk.RemoteService.TalkerComponent emotion;
    for(int i=0; i<talker.Components.Count ;i++)
    {
        emotion=talker.Components[i];
        //emotion = talker.Components["元気"];//でも取れるかも
        if(emotion.Name =="元気")
        {
            emotion.Value = 50;
        }
        else
        {
            emotion.Value = 0;
        }
    }
    #動作確認はできません

    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    • 回答の候補に設定 星 睦美 2014年6月27日 4:42
    • 回答としてマーク BURI55 2014年6月27日 4:44
    2014年6月25日 22:05