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