////////////////////////////////////////////////////////////////////////////////////////// // BouyomiChan- Ver0.1.10.0 の配布アーカイブにあるソース BouyomiChanClient.cs に手を入れています。 // GUIを見ているわけではなく、話者のインデクスは決め打ちです ////////////////////////////////////////////////////////////////////////////////////////// using System; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Ipc; using System.Threading; namespace FNF.Utility { /// /// 声の種類。(0:デフォルト、1~8:AquesTalk、10001~:SAPI5) /// public enum VoiceType { Default = 0, Female1 = 1, Female2 = 2, Male1 = 3, Male2 = 4, Imd1 = 5, Robot1 = 6, Machine1 = 7, Machine2 = 8 } /// /// 棒読みちゃんへ接続するためのクラス。 /// public class BouyomiChanProxy : IDisposable { protected IpcClientChannel ClientChannel; protected BouyomiChanRemoting RemotingObject; public bool IsActive { get; private set; } /// /// オブジェクト生成。 /// 利用後にはDispose()で開放してください。 /// public BouyomiChanProxy() { try { ClientChannel = new IpcClientChannel("hogehoge", null); //チャンネル名は何でもいい ChannelServices.RegisterChannel(ClientChannel, false); RemotingObject = (BouyomiChanRemoting)Activator.GetObject(typeof(BouyomiChanRemoting), "ipc://BouyomiChan/Remoting"); bool f = RemotingObject.NowPlaying; // 通信可能かどうかの確認 Thread.Sleep(10); IsActive = true; } catch (Exception ebo) { Console.WriteLine("ebo:{0},{1}", ebo.Message, ebo.StackTrace); IsActive = false; } } /// /// ファイナライザ(Dispose Finalizeパターン実装) /// ~BouyomiChanProxy() { if (ClientChannel != null) { ChannelServices.UnregisterChannel(ClientChannel); ClientChannel = null; } Dispose(); } /// /// オブジェクト開放。 /// public void Dispose() { if (ClientChannel != null) { ChannelServices.UnregisterChannel(ClientChannel); ClientChannel = null; } GC.SuppressFinalize(this); } /// /// 棒読みちゃんに音声合成タスクを追加します。 /// /// 喋らせたい文章 public void AddTalkTask(string sTalkText) { RemotingObject.AddTalkTask(sTalkText); } /// /// 棒読みちゃんに音声合成タスクを追加します。(音程指定無し版。以前のバージョンとの互換性の為に残しています。) /// /// 喋らせたい文章 /// 再生。(-1で棒読みちゃん側の画面で選んでいる速度) /// 音量。(-1で棒読みちゃん側の画面で選んでいる音量) /// 声の種類。(Defaultで棒読みちゃん側の画面で選んでいる声) public void AddTalkTask(string sTalkText, int iSpeed, int iVolume, VoiceType vType) { RemotingObject.AddTalkTask(sTalkText, iSpeed, iVolume, (int)vType); } /// /// 棒読みちゃんに音声合成タスクを追加します。 /// /// 喋らせたい文章 /// 速度。(-1で棒読みちゃん側の画面で選んでいる速度) /// 音程。(-1で棒読みちゃん側の画面で選んでいる音程) /// 音量。(-1で棒読みちゃん側の画面で選んでいる音量) /// 声の種類。(Defaultで棒読みちゃん側の画面で選んでいる声) public void AddTalkTask(string sTalkText, int iSpeed, int iTone, int iVolume, VoiceType vType) { RemotingObject.AddTalkTask(sTalkText, iSpeed, iTone, iVolume, (int)vType); } /// /// 棒読みちゃんに音声合成タスクを追加します。読み上げタスクIDを返します。 /// /// 喋らせたい文章 /// 読み上げタスクID。 public int AddTalkTask2(string sTalkText) { return RemotingObject.AddTalkTask2(sTalkText); } /// /// 棒読みちゃんに音声合成タスクを追加します。読み上げタスクIDを返します。 /// /// 喋らせたい文章 /// 速度。(-1で棒読みちゃん側の画面で選んでいる速度) /// 音程。(-1で棒読みちゃん側の画面で選んでいる音程) /// 音量。(-1で棒読みちゃん側の画面で選んでいる音量) /// 声の種類。(Defaultで棒読みちゃん側の画面で選んでいる声) /// 読み上げタスクID。 public int AddTalkTask2(string sTalkText, int iSpeed, int iTone, int iVolume, VoiceType vType) { return RemotingObject.AddTalkTask2(sTalkText, iSpeed, iTone, iVolume, (int)vType); } /// /// 棒読みちゃんの残りのタスクを全て消去します。 /// public void ClearTalkTasks() { RemotingObject.ClearTalkTasks(); } /// /// 棒読みちゃんの現在のタスクを中止して次の行へ移ります。 /// public void SkipTalkTask() { RemotingObject.SkipTalkTask(); } /// /// 棒読みちゃんの現在のタスク数(再生待ち行数)を取得します。 /// public int TalkTaskCount { get { return RemotingObject.TalkTaskCount; } } /// /// 棒読みちゃんの現在再生中のタスクIDを取得します。 /// public int NowTaskId { get { return RemotingObject.NowTaskId; } } /// /// 棒読みちゃんが現在、音声を再生している最中かどうかを取得します。 /// public bool NowPlaying { get { return RemotingObject.NowPlaying; } } /// /// 棒読みちゃんが一時停止中かどうかを取得・設定します。 /// ※現在の行の再生が終了するまで停止しません。 /// public bool Pause { get { return RemotingObject.Pause; } set { RemotingObject.Pause = value; } } } }