ailia_voice  1.1.0.0
APIの使用方法

基本的な使用方法

C#を使用して音声合成をする例です。AiliaVoiceModelを作成し、OpenModelでAIモデルを読み込み、G2Pで音素に変換、Inferenceを呼び出すことでAudioClipを取得可能です。GPT-SoVITSの場合は、Inferenceの前にSetReferenceでリファレンスとなるAudioClipを与えます。

void Initialize(){
bool status = voice.Create(Ailia.AILIA_ENVIRONMENT_ID_AUTO, AiliaVoice.AILIA_VOICE_FLAG_NONE);
string asset_path=Application.streamingAssetsPath;
string path = asset_path+"/AiliaVoice/";
status = voice.OpenDictionary(path+"open_jtalk_dic_utf_8-1.11", AiliaVoice.AILIA_VOICE_DICTIONARY_TYPE_OPEN_JTALK);
switch(model){
case MODEL_TACOTRON2_ENGLISH:
status = voice.OpenModel(path+"onnx/nvidia/encoder.onnx", path+"onnx/nvidia/decoder_iter.onnx", path+"onnx/nvidia/postnet.onnx", path+"onnx/nvidia/waveglow.onnx", null, AiliaVoice.AILIA_VOICE_MODEL_TYPE_TACOTRON2, AiliaVoice.AILIA_VOICE_CLEANER_TYPE_BASIC);
break;
case MODEL_GPT_SOVITS_JAPANESE:
status = voice.OpenModel(path+"onnx/gpt-sovits/t2s_encoder.onnx", path+"onnx/gpt-sovits/t2s_fsdec.onnx", path+"onnx/gpt-sovits/t2s_sdec.opt.onnx", path+"onnx/gpt-sovits/vits.onnx", path+"onnx/gpt-sovits/cnhubert.onnx", AiliaVoice.AILIA_VOICE_MODEL_TYPE_GPT_SOVITS, AiliaVoice.AILIA_VOICE_CLEANER_TYPE_BASIC);
break;
}
}
void Infer(string text){
if (model == MODEL_GPT_SOVITS_JAPANESE){
text = voice.G2P(text, AiliaVoice.AILIA_VOICE_G2P_TYPE_GPT_SOVITS_JA);
string ref_text = voice.G2P("水をマレーシアから買わなくてはならない。", AiliaVoice.AILIA_VOICE_G2P_TYPE_GPT_SOVITS_JA);
voice.SetReference(ref_clip, ref_text);
}
bool status = voice.Inference(text);
audioSource.clip = voice.GetAudioClip();
audioSource.Play();
}
void Uninitialize(){
voice.Close();
}

GPUの使用

GPUを使用するには、AiliaVoice.Openのenv_id引数にGPUのenv_idを指定します。 AILIA_ENVIRONMENT_ID_AUTOを指定した場合は、CPUで推論が行われます。 GPUのenv_idを取得する方法は、AiliaSpeechSample.csのGetEnvId()を参照してください。 下記の例では、ailiaのAPIを使用して環境を列挙し、env_typeが1の場合にGPUのenv_idを取得しています。

private int GetEnvId(int env_type){
int env_id = Ailia.AILIA_ENVIRONMENT_ID_AUTO;
if (env_type == 1) { // GPU
int count = 0;
Ailia.ailiaGetEnvironmentCount(ref count);
for (int i = 0; i < count; i++){
IntPtr env_ptr = IntPtr.Zero;
Ailia.ailiaGetEnvironment(ref env_ptr, (uint)i, Ailia.AILIA_ENVIRONMENT_VERSION);
Ailia.AILIAEnvironment env = (Ailia.AILIAEnvironment)Marshal.PtrToStructure(env_ptr, typeof(Ailia.AILIAEnvironment));
if (env.backend == Ailia.AILIA_ENVIRONMENT_BACKEND_MPS || env.backend == Ailia.AILIA_ENVIRONMENT_BACKEND_CUDA || env.backend == Ailia.AILIA_ENVIRONMENT_BACKEND_VULKAN){
env_id = env.id;
env_name = Marshal.PtrToStringAnsi(env.name);
}
}
} else {
env_name = "cpu";
}
return env_id;
}

プラットフォームごとの注意点

iOS

iOSで動作させる場合は、CapabilityにIncreased Memory Limitを指定してください。

Android

AndroidではStreamingAssetsのファイルへの直接アクセスが行えないため、起動時にTemporaryCachePathにモデルファイルを転送します。