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)); } }
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)); } }
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)); } } }
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); }); }); }