COMコンポーネントとして利用
C++やVBScriptなどによるプログラム向けインターフェイスです。
専用APIで感情やコンディションを細かく制御することが可能です。
※上記のサンプルプロジェクトです。解凍後、Visual Studio 2019以降でソリューションを読み込むと実行できます。
※上記のサンプルスクリプトです。解凍後、Windowsのコマンドプロンプトから実行できます。
※COMの仕様や開発方法については、MSDN等の関連ドキュメントをご参照ください。
API仕様
COM連携API仕様
// トーク機能を提供します。
interface ITalker2V40
{
uint Volume { get; set; }
// 音の大きさ(0~100)を取得または設定します。
uint Speed { get; set; }
// 話す速さ(0~100)を取得または設定します。
uint Tone { get; set; }
// 音の高さ(0~100)を取得または設定します。
uint ToneScale { get; set; }
// 抑揚(0~100)を取得または設定します。
uint Alpha { get; set; }
// 声質(0~100)を取得または設定します。
ITalkerComponentArray2 Components { get; }
// 現在のキャストの感情パラメータマップを取得します。
// 備考:
// 内容はCastによって変化します。
// 例1『さとうささら』→ "普通", "元気", "怒り", "哀しみ"
// 例2『小春六花』→ "嬉しい", "普通", "怒り", "哀しみ", "落ち着き"
// 注意点:
// 型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
// ITalkerComponentArray2Ptr
string Cast { get; set; }
// キャストを取得または設定します。
IStringArray AvailableCasts { get; }
// 利用可能なキャスト名を取得します。
// 備考:
// キャストの取り揃えは、インストールされている音源によります。
// 注意点:
// 型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
// IStringArray2Ptr
ISpeakingState2 Speak(string text);
// 指定したセリフの再生を開始します。
// 引数:
// text - セリフ。
// 戻り値:
// 再生状態を表すオブジェクト。
// 備考:
// 再生終了を待たずに処理が戻ります。
// 再生終了を待つには戻り値(ISpeakingState2)のWaitを呼び出します。
// 注意点:
// 型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
// ISpeakingState2Ptr
bool Stop();
// 再生を停止します。
// 戻り値:
// 成功した場合はtrue。それ以外の場合はfalse。
double GetTextDuration(string text);
// 指定したセリフの長さを取得します。
// 引数:
// text - セリフ。
// 戻り値:
// 長さ。単位は秒。
IPhonemeDataArray2 GetPhonemes(string text);
// 指定したセリフの音素単位のデータを取得します。
// 引数:
// text - セリフ。
// 戻り値:
// 音素単位のデータ。
// 備考:
// リップシンク等に利用できます。
// 注意点:
// 型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
// IPhonemeDataArray2Ptr
bool OutputWaveToFile(string text, string path);
// 指定したセリフをWAVファイルとして出力します。
// 引数:
// text - セリフ。
// path - 出力先パス。
// 戻り値:
// 成功した場合はtrue。それ以外の場合はfalse。
// 備考:
// 出力形式はサンプリングレート48kHz, ビットレート16bit, モノラルです。
}
// キャストの感情パラメータマップを表すオブジェクト。
interface ITalkerComponentArray2
{
int Length { get; }
// 要素数を取得します。
ITalkerComponent2 At(int index) { get; }
// 指定したインデックスの要素を取得します。
// 引数:
// index - インデックス。
// 戻り値:
// 要素。
ITalkerComponent2 ByName(string name) { get; }
// 指定した名前の要素を取得します。
// 引数:
// name - 名前。
// 戻り値:
// 要素。
ITalkerComponentArray2 Duplicate();
// 配列を複製します。
// 戻り値:
// 複製した配列のインスタンス。
}
// 感情パラメータの単位オブジェクト。
interface ITalkerComponent2
{
string Id { get; }
// 識別子を取得します。
string Name { get; }
// 感情の名前を取得します。(文字コードはUnicode)
uint Value { get; set; }
// 感情の値(0~100)を取得または設定します。
}
// 再生状態を表すオブジェクト。
interface ISpeakingState2
{
bool IsCompleted { get; }
// 再生が完了したかどうかを取得します。
// 完了した場合はtrue。(失敗を含む)それ以外の場合はfalse。
bool IsSucceeded { get; }
// 再生が成功したかどうかを取得します。
// 成功した場合はtrue。それ以外の場合はfalse。
void Wait();
// 再生終了を待ちます。
void Wait_2(double timeout);
// 再生終了を待ちます。
// 引数:
// timeout - 最大待機時間。単位は秒。(0未満は無制限)
}
// 音素データの配列を表すオブジェクト。
interface IPhonemeDataArray2
{
int Length { get; }
// 要素数を取得します。
IPhonemeData2 At(int index);
// 指定したインデックスの要素を取得します。
// 引数:
// index - インデックス。
// 戻り値:
// 要素。
IPhonemeDataArray2 Duplicate();
// 配列を複製します。
// 戻り値:
// 複製した配列のインスタンス。
}
// 音素データの単位オブジェクト。
interface IPhonemeData2
{
string Phoneme { get; }
// 音素を取得します。
double StartTime { get; }
// 開始時間を取得します。単位は秒。
double EndTime { get; }
// 終了時間を取得します。単位は秒。
}
// 文字列の配列を表すオブジェクト。
interface IStringArray2
{
int Length { get; }
// 要素数を取得します。
string At(int index);
// 指定したインデックスの要素を取得します。
// 引数:
// index - インデックス
// 戻り値:
// 要素。
IStringArray2 Duplicate();
// 配列を複製します。
// 戻り値:
// 複製した配列のインスタンス。
}
// 【CeVIO AI】制御機能を提供します。
interface IServiceControl2V40
{
string HostVersion { get; }
// 【CeVIO Creative Studio】のバージョンを取得します。
string InterfaceVersion { get; }
// このライブラリのバージョンを取得します。
static bool IsHostStarted { get; }
// 【CeVIO Creative Studio】にアクセス可能かどうか取得します。
int StartHost(bool noWait);
// 【CeVIO Creative Studio】を起動します。起動済みなら何もしません。
// 引数:
// noWait - trueは起動のみ行います。アクセス可能かどうかはIsHostStartedで確認します。
// falseは起動後に外部からアクセス可能になるまで制御を戻しません。
// 戻り値:
// 0:成功。起動済みの場合も含みます。
// -1:インストール状態が不明。
// -2:実行ファイルが見つからない。
// -3:プロセスの起動に失敗。
// -4:アプリケーション起動後、エラーにより終了。
void CloseHost(int mode);
// 【CeVIO Creative Studio】に終了を要求します。
// 引数:
// mode - 処理モード。
// 0:【CeVIO AI】が編集中の場合、保存や終了キャンセルが可能。
}
サンプルプログラム
COM連携サンプル(C++)
// タイプライブラリインポート
// ※タイプライブラリの登録は、【CeVIO AI】インストール時に行われます。
#import "libid:7E3B8901-0A65-44A0-9A9A-5F9F822D0716" named_guids rename_namespace("CeVIO")
int main()
{
// COM初期化
::CoInitialize(NULL);
// ServiceControlインスタンス生成
CeVIO::IServiceControl2V40* pServiceControl;
HRESULT result0 = ::CoCreateInstance(CeVIO::CLSID_ServiceControl2V40,
NULL,
CLSCTX_INPROC_SERVER,
CeVIO::IID_IServiceControl2V40,
reinterpret_cast(&pServiceControl));
if (FAILED(result0)) {
// 失敗
::CoUninitialize();
return 0;
}
// 【CeVIO AI】起動
pServiceControl->StartHost(false);
// Talkerインスタンス生成
CeVIO::ITalker2V40* pTalker;
HRESULT result1 = ::CoCreateInstance(CeVIO::CLSID_Talker2V40,
NULL,
CLSCTX_INPROC_SERVER,
CeVIO::IID_ITalker2V40,
reinterpret_cast(&pTalker));
if (FAILED(result1)) {
// 失敗
::CoUninitialize();
return 0;
}
// キャスト設定
pTalker->Cast = "さとうささら";
// (例)音量設定
pTalker->Volume = 100;
// (例)抑揚設定
pTalker->ToneScale = 100;
// (例)再生
CeVIO::ISpeakingState2Ptr pState = pTalker->Speak("こんにちは");
pState->Wait();
// (例)音素データ取得
CeVIO::IPhonemeDataArray2Ptr pPhonemes = pTalker->GetPhonemes("はじめまして");
// Talker解放
pTalker->Release();
// 【CeVIO AI】終了
pServiceControl->CloseHost(0);
// ServiceControl解放
pServiceControl->Release();
// COM使用終了
::CoUninitialize();
return 0;
}
COM連携サンプル(VBScript)
Dim service
Set service = CreateObject("CeVIO.Talk.RemoteService2.ServiceControl2V40")
service.StartHost(false)
Dim talker
Set talker = CreateObject("CeVIO.Talk.RemoteService2.Talker2V40")
talker.Cast = "さとうささら"
talker.Components.ByName("普通").Value = 50
talker.Components.ByName("元気").Value = 50
Dim state
Set state = talker.Speak("さとうささらです。")
state.Wait
WScript.Sleep 1000
talker.ToneScale = 80
Set state = talker.Speak("スクリプトからもしゃべれます。")
state.Wait
service.CloseHost(0)
※COMの仕様や開発方法については、MSDN等の関連ドキュメントをご参照ください。