Пример #1
0
        public SeikaStruct(string _name, int _cid)
        {
            this.name = _name;
            this.cid  = _cid;
            parameter = new Dictionary <string, Pram>();

            Dictionary <string, decimal> parameterList = new Dictionary <string, decimal>();
            List <string> pramName = new List <string>();

            foreach (KeyValuePair <string, decimal> kvp in SeikaConnect.Instance().scc.GetAvatorParams_current(cid))
            {
                string  pram  = kvp.Key;
                decimal value = kvp.Value;
                parameterList.Add(pram, value);
                if (Regex.IsMatch(pram, ".*_value$"))
                {
                    string[] vs   = { "_value" };
                    string   name = pram.Split(vs, StringSplitOptions.None)[0];
                    pramName.Add(name);
                    //Console.WriteLine(@"あたり:"+name);
                }
                //Console.WriteLine($"{pram}:{value}");
            }
            foreach (string name in pramName)
            {
                decimal value = parameterList[name + "_value"];
                decimal max   = parameterList[name + "_value_max"];
                decimal min   = parameterList[name + "_value_min"];
                decimal step  = parameterList[name + "_value_step"];
                parameter.Add(name, new Pram(value, max, min, step));
            }
        }
Пример #2
0
 public SeikaData()
 {
     Data = new Dictionary <string, SeikaStruct>();
     foreach (KeyValuePair <int, string> kvp in SeikaConnect.Instance().scc.AvatorList)
     {
         int    id   = kvp.Key;
         string name = kvp.Value;
         //Console.WriteLine($"-------------------------------------------------------");
         //Console.WriteLine($"{id}:{name}");
         Data.Add(name, new SeikaStruct(name, id));
     }
 }
Пример #3
0
        public SeikaStruct(string _name, int _cid)
        {
            this.name = _name;
            this.cid  = _cid;
            parameter = new Dictionary <string, Pram>();

            var avatorParam = SeikaConnect.Instance().scc.GetAvatorParams_current2(cid);

            foreach (KeyValuePair <string, Dictionary <string, Dictionary <string, decimal> > > prams in avatorParam)
            {
                foreach (KeyValuePair <string, Dictionary <string, decimal> > effectsEmotions in prams.Value)
                {
                    decimal value = effectsEmotions.Value["value"];
                    decimal max   = effectsEmotions.Value["max"];
                    decimal min   = effectsEmotions.Value["min"];
                    decimal step  = effectsEmotions.Value["step"];
                    parameter.Add(prams.Key + "_" + effectsEmotions.Key, new Pram(value, max, min, step));
                }
            }
        }
Пример #4
0
        private void SetTalk()
        {
            app.Command("talk", (command) =>
            {
                // 説明(ヘルプの出力で使用される)
                command.Description = "SeikaCenterへ発声情報を送る";

                // コマンドについてのヘルプ出力のトリガーとなるオプションを指定
                command.HelpOption("-?|-h|--help");

                var talkArgs     = command.Argument("cid text", "発話者のcidとテキスト", true);
                var effectOption = command.Option("-effect",
                                                  "例:-effect=\"speed,1.0\" -effect=\"pitch,1.3\"",
                                                  CommandOptionType.MultipleValue);
                var emotionOption = command.Option("-emotion",
                                                   "例:-emotion=\"喜び,1.0\"",
                                                   CommandOptionType.MultipleValue);
                var outputOption = command.Option("-o",
                                                  "出力パス 指定しない場合は発生するだけとなる",
                                                  CommandOptionType.MultipleValue);

                command.OnExecute(() =>
                {
                    //Console.WriteLine(talkArgs.Value);
                    if (talkArgs.Values.Count != 2)
                    {
                        return(0);
                    }

                    SeikaData seikaData     = new SeikaData();
                    SeikaStruct seikaStruct = seikaData.GetActor(talkArgs.Values[0]);
                    string text             = talkArgs.Values[1];
                    string savePath         = "";
                    int cid = seikaStruct.cid;

                    text = text.Replace("<br>", "\r\n").Replace("\r\r", "\r");

                    Dictionary <string, decimal> effects = new Dictionary <string, decimal>();
                    foreach (var value in effectOption.Values)
                    {
                        string[] str = value.Split(',');
                        effects.Add(str[0], decimal.Parse(str[1]));
                        //Console.WriteLine("-effect= " + value);
                    }
                    Dictionary <string, decimal> emotions = new Dictionary <string, decimal>();
                    foreach (var value in emotionOption.Values)
                    {
                        string[] str = value.Split(',');
                        emotions.Add(str[0], decimal.Parse(str[1]));
                        //Console.WriteLine("-effect= " + value);
                    }
                    if (outputOption.Value() != null)
                    {
                        savePath = outputOption.Value();
                    }
                    if (savePath != "")
                    {
                        Encoding utf        = Encoding.UTF8;
                        StreamWriter writer =
                            new StreamWriter(Path.GetDirectoryName(savePath) + @"/" + Path.GetFileNameWithoutExtension(savePath) + ".txt", false, utf);
                        writer.WriteLine(text);
                        writer.Close();
                    }

                    SeikaConnect.Instance().scc.Talk(cid, text, savePath, effects, emotions);
                    //SeikaConnect.Instance().scc.Talk(cid, "", "",new Dictionary<string, decimal>(), new Dictionary<string, decimal>());


                    return(0);
                });
            });
        }