努力したWiki

推敲の足りないメモ書き多数

ユーザ用ツール

サイト用ツール


documents:voiceroid:assistantseika:assistantseika-005a

AssistantSeikaのWCFサービス説明

概要

AssistantSeikaはWCF(Windows Communication Foundation)で外部から接続を待ち受けしています。 ユーザはWCFのクライアントを作成してアクセスすることになります。

WCFサービスの定義

以下のインタフェースで示すサービスを公開しています。

IScAPIs.cs
using System;
using System.Collections.Generic;
using System.ServiceModel;
 
namespace AssistantSeika
{
    [ServiceContract(SessionMode = SessionMode.Required)]
    public interface IScAPIs
    {
        [OperationContract]
        string Verson();
 
        [OperationContract]
        Dictionary<int, string> AvatorList();
 
        [OperationContract]
        Dictionary<string, Dictionary<string, Dictionary<string, decimal>>> GetDefaultParams2(int cid);
 
        [OperationContract]
        Dictionary<string, Dictionary<string, Dictionary<string, decimal>>> GetCurrentParams2(int cid);
 
        [OperationContract]
        double Talk(int cid, string talktext, string filepath, Dictionary<string, decimal> effects, Dictionary<string, decimal> emotions);
 
        [OperationContract]
        void TalkAsync(int cid, string talktext, Dictionary<string, decimal> effects, Dictionary<string, decimal> emotions);
 
        [OperationContract]
        double Save(int cid, string talktext, string filepath, Dictionary<string, decimal> effects, Dictionary<string, decimal> emotions);
    }
}

接続の例

実際にサービスに接続して発声させる例です。

sample.cs
using System.Collections.Generic;
using System.ServiceModel;
using System.Threading;
using AssistantSeika;
 
namespace sampleSpeak
{
    class Program
    {
        static void Main(string[] args)
        {
            string BaseAddr = "net.pipe://localhost/EchoSeika/CentralGate/ApiEntry";
            ChannelFactory<IScAPIs> Channel = new ChannelFactory<IScAPIs>(new NetNamedPipeBinding(), new EndpointAddress(BaseAddr));
            IScAPIs api = Channel.CreateChannel();
 
            while (Channel.State != CommunicationState.Opened)
            {
                Thread.Sleep(100);
            }
 
            Dictionary<string, decimal> effetcs = new Dictionary<string, decimal>()
            {
                { "volume",     1.0m },
                { "speed",      0.9m },
                { "pitch" ,     1.3m },
                { "alpha",      0.0m },
                { "intonation", 1.0m }
            };
            Dictionary<string, decimal> emotions = new Dictionary<string, decimal>()
            {
                {"喜び", 0.60m }
            };
 
            api.Talk(2000, "あー嬉しいなー", "", effetcs, emotions);
        }
    }
}

エフェクトパラメタ

effectsで指定できる名前。英小文字で記述。

名前 対応するパラメタ VOICEROID+EX VOICEROID2 CeVIO ガイノイドTalk 棒読みちゃん SAPI SpeechPlatform
volume 音量
speed 話速
pitch 高さ(CeVIOではトーン)
intonation 抑揚(CeVIOではトーンスケール)
alpha 声質 ※CeVIOでのみ有効

感情パラメタ

emotionsは話者により異なります。

感情パラメタ
話者 “喜び” “怒り” “悲しみ” “セクシー” “パワフル” “あたふた” “元気” “普通” “怒り” “哀しみ” “クール” “照れ” “へこみ” “High” “Mid” “MidLow” “Low”
VOICEROID2
東北イタコ(VOICEROID2)
さとうささら
すずきつづみ
タカハシ
ONE

再生時間

Talk()で返る時間/長さは、同じ文面を再生/保存させても毎回異なります。
これは、製品の機能を使わず発声の終了を自前で監視しているため、PCの状態やタイミング等の問題で変動します。 音声保存時は一度保存した音声ファイルから算出させています。

エラーがあった場合、時間/長さにマイナスの値が返ります。

documents/voiceroid/assistantseika/assistantseika-005a.txt · 最終更新: 2020/05/20 18:31 by k896951

ページ用ツール