COMコンポーネントとして利用(バージョン4.0β仕様)

COMコンポーネントとして利用(バージョン4.0β仕様)

C++やVBScriptなどによるプログラム向けインターフェイスです。
専用APIで感情やコンディションを細かく制御することが可能です。
※バージョン4.0ベータテスト仕様です。より良くするため正式公開時に変更する場合があります。

COM連携API仕様

// 外部ソフトに基本のトーク機能を提供します。
interface ITalker
{
uint Volume { get; set; }
// 音の大きさ(0~100)を取得または設定します。

uint Speed { get; set; }
// 話す速さ(0~100)を取得または設定します。

uint Tone { get; set; }
// 音の高さ(0~100)を取得または設定します。

uint Alpha { get; set; }
// 声質(0~100)を取得または設定します。

ITalkerComponentArray Components { get; }
// 現在のキャストの感情パラメータマップを取得します。
// 備考:
//   内容はCastによって変化します。
//   ※製品版【CeVIO Creative Studio】に含まれるキャストの場合、以下の感情があります。
//    『さとうささら』 → "普通", "元気", "怒り", "哀しみ"
//    『すずきつづみ』 → "クール", "照れ"
//    『タカハシ』 → "普通", "元気", "へこみ"
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   ITalkerComponentArrayPtr

string Cast { get; set; }
// キャストを取得または設定します。

IStringArray AvailableCasts { get; }
// 利用可能なキャスト名を取得します。
// 備考:
//   キャストの取り揃えは、インストールされている音源によります。
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   IStringArrayPtr

ISpeakingState Speak(string text);
// 指定したセリフの再生を開始します。
// 引数:
//   text - セリフ。
// 戻り値:
//   再生状態を表すオブジェクト。
// 備考:
//   再生終了を待たずに処理が戻ります
//   再生終了を待つには戻り値(ISpeakingState)のWaitを呼び出します。
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   ISpeakingStatePtr

bool Stop();
// 再生を停止します。
// 戻り値:
//   成功した場合はtrue。それ以外の場合はfalse。

double GetTextDuration(string text);
// 指定したセリフの長さを取得します。
// 引数:
//   text - セリフ。
// 戻り値:
//   長さ。単位は秒。

IPhonemeDataArray GetPhonemes(string text);
// 指定したセリフの音素単位のデータを取得します。
// 引数:
//   text - セリフ。
// 戻り値:
//   音素単位のデータ。
// 備考:
//   リップシンク等に利用できます。
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   IPhonemeDataArrayPtr

bool OutputWaveToFile(string text, string path);
// 指定したセリフをWAVファイルとして出力します。
// 引数:
//   text - セリフ。
//   path - 出力先パス。
// 戻り値:
//   成功した場合はtrue。それ以外の場合はfalse。
// 備考:
//   出力形式はサンプリングレート48kHz, ビットレート16bit, モノラルです。
}

// バージョン4.0追加のトーク機能を提供します。
// ITalker と組み合わせて使います。
interface ITalkerV40Part
{
uint ToneScale { get; set; }
// 抑揚(0~100)を取得または設定します。
}

// 外部ソフトに基本+追加トーク機能を提供します。
// バージョン4.0以上対象の場合は ITalker の代わりにこちらを使います。
interface ITalkerV40
{
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)を取得または設定します。

ITalkerComponentArray Components { get; }
// 現在のキャストの感情パラメータマップを取得します。
// 備考:
//   内容はCastによって変化します。
//   ※製品版【CeVIO Creative Studio】に含まれるキャストの場合、以下の感情があります。
//    『さとうささら』 → "普通", "元気", "怒り", "哀しみ"
//    『すずきつづみ』 → "クール", "照れ"
//    『タカハシ』 → "普通", "元気", "へこみ"
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   ITalkerComponentArrayPtr

string Cast { get; set; }
// キャストを取得または設定します。

IStringArray AvailableCasts { get; }
// 利用可能なキャスト名を取得します。
// 備考:
//   キャストの取り揃えは、インストールされている音源によります。
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   IStringArrayPtr

ISpeakingState Speak(string text);
// 指定したセリフの再生を開始します。
// 引数:
//   text - セリフ。
// 戻り値:
//   再生状態を表すオブジェクト。
// 備考:
//   再生終了を待たずに処理が戻ります
//   再生終了を待つには戻り値(ISpeakingState)のWaitを呼び出します。
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   ISpeakingStatePtr

bool Stop();
// 再生を停止します。
// 戻り値:
//   成功した場合はtrue。それ以外の場合はfalse。

double GetTextDuration(string text);
// 指定したセリフの長さを取得します。
// 引数:
//   text - セリフ。
// 戻り値:
//   長さ。単位は秒。

IPhonemeDataArray GetPhonemes(string text);
// 指定したセリフの音素単位のデータを取得します。
// 引数:
//   text - セリフ。
// 戻り値:
//   音素単位のデータ。
// 備考:
//   リップシンク等に利用できます。
// 注意点:
//   型は、Visual C++環境でスマートポインタを利用する場合、下記に置き換えられます。
//   IPhonemeDataArrayPtr

bool OutputWaveToFile(string text, string path);
// 指定したセリフをWAVファイルとして出力します。
// 引数:
//   text - セリフ。
//   path - 出力先パス。
// 戻り値:
//   成功した場合はtrue。それ以外の場合はfalse。
// 備考:
//   出力形式はサンプリングレート48kHz, ビットレート16bit, モノラルです。
}

// キャストの感情パラメータマップを表すオブジェクト。
interface ITalkerComponentArray
{
int Length { get; }
// 要素数を取得します。

ITalkerComponent At(int index) { get; }
// 指定したインデックスの要素を取得します。
// 引数:
//   index - インデックス。
// 戻り値:
//   要素。

ITalkerComponent ByName(string name) { get; }
// 指定した名前の要素を取得します。
// 引数:
//   name - 名前。
// 戻り値:
//   要素。

ITalkerComponentArray Duplicate();
// 配列を複製します。
// 戻り値:
//   複製した配列のインスタンス。
}

// 感情パラメータの単位オブジェクト。
interface ITalkerComponent
{
string Id { get; }
// 識別子を取得します。

string Name { get; }
// 感情の名前を取得します。(文字コードはUnicode)

uint Value { get; set; }
// 感情の値(0~100)を取得または設定します。
}

// 再生状態を表すオブジェクト。
interface ISpeakingState
{
bool IsCompleted { get; }
// 再生が完了したかどうかを取得します。
// 完了した場合はtrue。(失敗を含む)それ以外の場合はfalse。

bool IsSucceeded { get; }
// 再生が成功したかどうかを取得します。
// 成功した場合はtrue。それ以外の場合はfalse。

void Wait();
// 再生終了を待ちます。

void Wait_2(double timeout);
// 再生終了を待ちます。
// 引数:
//   timeout - 最大待機時間。単位は秒。(0未満は無制限)
}

// 音素データの配列を表すオブジェクト。
interface IPhonemeDataArray
{
int Length { get; }
// 要素数を取得します。

IPhonemeData At(int index);
// 指定したインデックスの要素を取得します。
// 引数:
//   index - インデックス。
// 戻り値:
//   要素。

IPhonemeDataArray Duplicate();
// 配列を複製します。
// 戻り値:
//   複製した配列のインスタンス。
}

// 音素データの単位オブジェクト。
interface IPhonemeData
{
string Phoneme { get; }
// 音素を取得します。

double StartTime { get; }
// 開始時間を取得します。単位は秒。

double EndTime { get; }
// 終了時間を取得します。単位は秒。
}

// 文字列の配列を表すオブジェクト。
interface IStringArray
{
int Length { get; }
// 要素数を取得します。

string At(int index);
// 指定したインデックスの要素を取得します。
// 引数:
//   index - インデックス
// 戻り値:
//   要素。

IStringArray Duplicate();
// 配列を複製します。
// 戻り値:
//   複製した配列のインスタンス。
}

// 外部ソフトに基本の【CeVIO Creative Studio】制御機能を提供します。
interface IServiceControl
{
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 Creative Studio】が編集中の場合、保存や終了キャンセルが可能。
}

// バージョン4.0追加の【CeVIO Creative Studio】制御機能を提供します。
// IServiceControl と組み合わせて使います。
interface IServiceControlV40Part
{
string HostVersion { get; }
// 【CeVIO Creative Studio】のバージョンを取得します。

string InterfaceVersion { get; }
// このライブラリのバージョンを取得します。
}

// 基本+追加の【CeVIO Creative Studio】制御機能を提供します。
// バージョン4.0以上対象の場合は IServiceControl の代わりにこちらを使います。
interface IServiceControlV40
{
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 Creative Studio】が編集中の場合、保存や終了キャンセルが可能。
}


COM連携サンプル(C++)

#include "stdafx.h"
#include <ObjBase.h>

// タイプライブラリインポート
// (タイプライブラリの登録は、【CeVIO Creative Studio】インストール時に行われます。)
#import "libid:D3AEA482-B527-4818-8CEA-810AFFCB24B6" named_guids rename_namespace("CeVIO")

int _tmain(int argc, _TCHAR* argv[])
{
// COM初期化
::CoInitialize(NULL);

// ServiceControlインスタンス生成
CeVIO::IServiceControl *pServiceControl;
HRESULT result0 = ::CoCreateInstance(CeVIO::CLSID_ServiceControl,
    NULL,
    CLSCTX_INPROC_SERVER,
    CeVIO::IID_IServiceControl,
    reinterpret_cast<LPVOID *>(&pServiceControl));
if (FAILED(result0)) {
// 失敗
::CoUninitialize();
return 0;
}

// ServiceControlのバージョン4.0追加機能インターフェイスを取得
CeVIO::IServiceControlV40Part *pServiceControlV40Part = NULL;
result = pServiceControl->QueryInterface(CeVIO::IID_IServiceControlV40Part,
reinterpret_cast<LPVOID *>(&pServiceControlV40Part));
if (SUCCEEDED(result)) {
MessageBox(NULL, pServiceControlV40Part->HostVersion.GetBSTR(), L"", MB_OK);
} else {
// バージョン4.0以前の場合はこちらに分岐
}

// 【CeVIO Creative Studio】起動
pServiceControl->StartHost(false);

// Talkerインスタンス生成
CeVIO::ITalker *pTalker;
HRESULT result1 = ::CoCreateInstance(CeVIO::CLSID_Talker,
    NULL,
    CLSCTX_INPROC_SERVER,
    CeVIO::IID_ITalker,
    reinterpret_cast<LPVOID *>(&pTalker));
if (FAILED(result1)) {
// 失敗
::CoUninitialize();
return 0;
}

// キャスト設定
pTalker->Cast = "さとうささら";

// (例)音量設定
pTalker->Volume = 100;

// ServiceControlのバージョン4.0追加機能インターフェイスを取得
CeVIO::ITalkerV40Part *pTalkerV40Part = NULL;
result = pTalker->QueryInterface(CeVIO::IID_ITalkerV40Part,
reinterpret_cast<LPVOID *>(&pTalkerV40Part));
if (SUCCEEDED(result)) {
// (例)抑揚設定
pTalkerV40Part->ToneScale = 100;
}

// (例)再生
CeVIO::ISpeakingStatePtr pState = pTalker->Speak("こんにちは");
pState->Wait();

// (例)音素データ取得
CeVIO::IPhonemeDataArrayPtr pPhonemes = pTalker->GetPhonemes("はじめまして");

// Talker解放(追加部分)
if (pTalkerV40Part != NULL) pTalkerV40Part->Release();

// Talker解放
pTalker->Release();

// 【CeVIO Creative Studio】終了
pServiceControl->CloseHost(0);

// ServiceControl解放(追加部分)
if (pServiceControlV40Part != NULL) pServiceControlV40Part->Release();

// ServiceControl解放
pServiceControl->Release();

// COM使用終了
::CoUninitialize();

return 0;
}
※バージョン3.3.3.0以前でも動作し、バージョン4.0追加機能も使う場合のサンプルプログラムです。
※バージョン4.0以降対象とする場合は、ITalkerV40 と IServiceControlV40 を用いた方がシンプルです。


COM連携サンプル(VBScript)

Dim service
Set service = CreateObject("CeVIO.Talk.RemoteService.ServiceControl")
service.StartHost(false)

Dim talker
Set talker = CreateObject("CeVIO.Talk.RemoteService.Talker")

talker.Cast = "さとうささら"
talker.Components.ByName("普通").Value = 100

Dim state
Set state = talker.Speak("さとうささらです。")
state.Wait

WScript.Sleep 1000

talker.Components.ByName("普通").Value = 0

Set state = talker.Speak("スクリプトからもしゃべれます。")
state.Wait

service.CloseHost(0)
 ※32bit版Windowsの場合、そのまま実行できます。
 ※64bit版Windowsの場合、C:\Windows\SysWOW64\wscript.exeにD&Dなどして実行できます。


※COMの仕様や開発方法については、MSDN等の関連ドキュメントをご参照ください。