Skip to content

Commit

Permalink
v1.2
Browse files Browse the repository at this point in the history
  • Loading branch information
tori29umai0123 committed Mar 19, 2023
1 parent 39a9f05 commit a2c93fa
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 61 deletions.
104 changes: 60 additions & 44 deletions Assets/Scripts/AutoRun_exe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,18 +66,55 @@ public void AssistantSeika_RUN()
Seika_Voice = new Process();
Seika_Voice.StartInfo.FileName = SystemSetting.Seika_Voice_exe;
Seika_Voice.Start();
AssistantSeika = new Process();
AssistantSeika.StartInfo.FileName = SystemSetting.AssistantSeika_exe;
AssistantSeika.Start();
Invoke("Seikactl_RUN", 3);

//
// 本来なら音声合成製品の起動確認処理がここに入る。
// 今回は3秒間の待ちを入れる事にする
Thread.Sleep(1000 * 3);

// AssistantSeikaの起動と製品スキャン実行
Seikactl_BOOTSEQUENCE();
}

public void Seikactl_RUN()
private void Seikactl_BOOTSEQUENCE()
{
Seikactl = new Process();
Seikactl.StartInfo.FileName = SystemSetting.Seikactl_exe;
Seikactl.StartInfo.Arguments = " prodscan";
Seikactl.StartInfo.Arguments = @"boot """ + SystemSetting.AssistantSeika_path + @"""";
Seikactl.Start();
Seikactl.WaitForExit();

if (Seikactl.ExitCode == 0)
{
Seikactl = new Process();
Seikactl.StartInfo.FileName = SystemSetting.Seikactl_exe;
Seikactl.StartInfo.Arguments = "waitboot 300"; // 最大300秒(5分)待ち
Seikactl.Start();
Seikactl.WaitForExit();

if (Seikactl.ExitCode == 0)
{
Seikactl = new Process();
Seikactl.StartInfo.FileName = SystemSetting.Seikactl_exe;
Seikactl.StartInfo.Arguments = "prodscan";
Seikactl.Start();
Seikactl.WaitForExit();

if (Seikactl.ExitCode != 0)
{
// AssistantSeikaの製品スキャンに失敗したのでエラーの処理がここに入る
}
}
else
{
// AssistantSeikaと通信ができないのでエラーの処理がここに入る
}
}
else
{
// AssistantSeikaの起動に失敗したのでエラーの処理がここに入る
}

}

private void OnApplicationQuit()
Expand All @@ -89,6 +126,13 @@ private async Task AppExit()
{
await Task.Run(() =>
{
//名前で指定してkill
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("OpenAI_API");
foreach (System.Diagnostics.Process p in ps)
{
p.Kill();
}
if (VoiceVox != null)
{
VoiceVox.Kill();
Expand All @@ -99,49 +143,21 @@ private async Task AppExit()
COEIROINK.CloseMainWindow();
}
if (Seika_Voice != null)
if (SystemSetting.VoiceApp == "AssistantSeika")
{
Seika_Voice.CloseMainWindow();
}
Seikactl = new Process();
Seikactl.StartInfo.FileName = SystemSetting.Seikactl_exe;
Seikactl.StartInfo.Arguments = @"shutdown";
Seikactl.Start();
Seikactl.WaitForExit();
if (AssistantSeika != null)
{
AssistantSeika.CloseMainWindow();
}
//名前で指定してkill
System.Diagnostics.Process[] ps1 = System.Diagnostics.Process.GetProcessesByName("OpenAI_API");
foreach (System.Diagnostics.Process p in ps1)
{
p.Kill();
if (Seikactl.ExitCode != 0)
{
// AssistantSeikaの停止処理に失敗してもやれることはない……(手動で止めろのメッセージを出すぐらい?)
}
}
System.Diagnostics.Process[] ps2 = System.Diagnostics.Process.GetProcessesByName("PetitGate32w");
foreach (System.Diagnostics.Process p in ps2)
{
p.Kill();
}
System.Diagnostics.Process[] ps3 = System.Diagnostics.Process.GetProcessesByName("PetitGate64w");
foreach (System.Diagnostics.Process p in ps3)
{
p.Kill();
}
System.Diagnostics.Process[] ps4 = System.Diagnostics.Process.GetProcessesByName("PetitGateHttpw");
foreach (System.Diagnostics.Process p in ps4)
{
p.Kill();
}
System.Diagnostics.Process[] ps5 = System.Diagnostics.Process.GetProcessesByName("Seikactl");
foreach (System.Diagnostics.Process p in ps5)
{
p.CloseMainWindow();
}
System.Diagnostics.Process[] ps6 = System.Diagnostics.Process.GetProcessesByName("SeikaSay2");
foreach (System.Diagnostics.Process p in ps6)
{
p.Kill();
}
Thread.Sleep(3000);
});
UnityEngine.Debug.Log("終了");
}
Expand Down
22 changes: 15 additions & 7 deletions Assets/Scripts/SeikaTalk.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ public void Awake()
GameObject Game_system = GameObject.FindGameObjectWithTag("Game_system");
SystemSetting SystemSetting = Game_system.GetComponent<SystemSetting>();
exepath = SystemSetting.SeikaSay2_exe;
narrator = "\"" + SystemSetting.AssistantSeika_narrator + "\"";
narrator = SystemSetting.AssistantSeika_narrator;
AudioDevice = SystemSetting.AudioDevice;
}
public void SeikaTalkStart()
Expand All @@ -27,7 +27,7 @@ public void SeikaTalkStart()
UImanager.talking = true;
UImanager.thinking = false;
source = this.GetComponent<AudioSource>();
source.clip = Microphone.Start(AudioDevice, false, EditorRunTerminal.Message.Length, 44100);
source.clip = Microphone.Start(AudioDevice, false, EditorRunTerminal.Message.Length, 44100); // 環境によって48kHzなこともあるのでパラメタ化した方が良いかも
Invoke("wait", 0.5f);
}
public void wait()
Expand All @@ -37,20 +37,28 @@ public void wait()
}
private async Task SeikaSay2Run()
{
// 発声を非同期にしていると後から来たメッセージでつぶされるのでは?
// キューに貯める必要があるほどの発言は来ないものとして処理します。

UnityEngine.Debug.Log("開始");
await Task.Run(() =>
{
SeikaSay2 = new Process();
SeikaSay2.StartInfo.FileName = exepath;
SeikaSay2.StartInfo.Arguments = "-async -cid " + narrator + " -t " + Message;
//WindowStyleにMinimizedを指定して、最小化された状態で起動されるようにする
SeikaSay2.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
SeikaSay2.StartInfo.CreateNoWindow = true;
SeikaSay2.StartInfo.UseShellExecute = false;
SeikaSay2.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; // 最小化ではなくて非表示にしておけばいいと思う
SeikaSay2.StartInfo.Arguments = "-cid " + narrator + " -t " + Message;
SeikaSay2.Start();
var emote_time = EditorRunTerminal.Message.Length * 300;
SeikaSay2.WaitForExit(); // 非同期ではないので発声終了までSeikaSay2は終了しない
// ↑でWaitForExitしてるのに何故かこの処理を入れないと音声が途切れる。なんで?
var emote_time = EditorRunTerminal.Message.Length * 50;
Thread.Sleep(emote_time);
});
UnityEngine.Debug.Log("終了");
UImanager.talking = false;
source.Stop();
}
}
}
10 changes: 4 additions & 6 deletions Assets/Scripts/SystemSetting.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,10 @@ public class SystemSetting : MonoBehaviour
public int COEIROINK_narrator;

public string Seika_Voice_exe;
public string AssistantSeika_exe;
public string AssistantSeika_path;
public string Seikactl_exe;
public string SeikaSay2_exe;
string AssistantSeika_narrator_string;
public int AssistantSeika_narrator;
public string AssistantSeika_narrator;
public string AudioDevice;

public string background;
Expand Down Expand Up @@ -68,11 +67,10 @@ public void Awake()
COEIROINK_narrator = int.Parse(COEIROINK_narrator_string);

Seika_Voice_exe = ini.ReadValue("AssistantSeika", "Seika_Voice_exe", "");
AssistantSeika_exe = ini.ReadValue("AssistantSeika", "AssistantSeika_exe", "");
AssistantSeika_path = ini.ReadValue("AssistantSeika", "AssistantSeika_path", "");
Seikactl_exe = ini.ReadValue("AssistantSeika", "Seikactl_exe", "");
SeikaSay2_exe = ini.ReadValue("AssistantSeika", "SeikaSay2_exe", "");
AssistantSeika_narrator_string = ini.ReadValue("AssistantSeika", "AssistantSeika_narrator", "");
AssistantSeika_narrator = int.Parse(AssistantSeika_narrator_string);
AssistantSeika_narrator = ini.ReadValue("AssistantSeika", "AssistantSeika_narrator", "");
AudioDevice = ini.ReadValue("AssistantSeika", "AudioDevice", "");

background = ini.ReadValue("Other", "BackGround", "");
Expand Down
8 changes: 4 additions & 4 deletions config.ini
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ scriptPath = D:/desktop/test_API.py
AI_URL = http://127.0.0.1:5000/

[AI_Voice]
VoiceApp = VoiceVox
VoiceApp = AssistantSeika
VoicePeak_exe = C:\Program Files\VOICEPEAK\voicepeak.exe
VoicePeak_narrator = Japanese Male 2
VoiceVox_exe = C:\Users\ユーザー名\AppData\Local\Programs\VOICEVOX\run.exe
Expand All @@ -17,7 +17,7 @@ COEIROINK_exe = C:\Program Files\COEIROINK-CPU-v.1.7.2\COEIROINK.exe
COEIROINK_narrator = 50

[AssistantSeika]
AssistantSeika_exe = C:\Program Files\510Product\AssistantSeika.lnk
AssistantSeika_path = C:\Program Files\510Product\AssistantSeika
Seikactl_exe = C:\Program Files\510Product\SeikaCtl\Seikactl.exe
Seika_Voice_exe = C:\Program Files (x86)\AHS\VOICEROID+\KouEX\VOICEROID.exe
SeikaSay2_exe = C:\Program Files\510Product\SeikaSay2\SeikaSay2.exe
Expand All @@ -39,12 +39,12 @@ Thickness = 0.2
CharactorName = お嬢様
host = 127.0.0.1
port = 5000
API_Key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
API_Key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[Camera_setting]
pos_x=-0.000778390211053193
pos_y=1.29912412166595
pos_z=1.96742427349091
angle_x=7.70004224777222
angle_y=177.499954223633
angle_z=-1.48077532458046E-07
angle_z=-3.36539869749686E-07

0 comments on commit a2c93fa

Please sign in to comment.