ailia_voice  1.5.0.0
公開メンバ関数 | 限定公開メンバ関数 | 全メンバ一覧
ailiaVoice.AiliaVoiceModel クラス
ailiaVoice.AiliaVoiceModel の継承関係図
Inheritance graph
[凡例]
ailiaVoice.AiliaVoiceModel 連携図
Collaboration graph
[凡例]

公開メンバ関数

int GetEnvironmentId (bool is_gpu)
 実行環境を取得します。 [詳解]
 
string GetEnvironmentName ()
 実行環境の名称を取得します。 [詳解]
 
bool Create (int env_id, int flag)
 インスタンスを作成します。 [詳解]
 
bool SetUserDictionary (string dict_path, int dict_type)
 ユーザ辞書を指定します。 [詳解]
 
bool OpenDictionary (string dict_path, int dict_type)
 辞書を指定します。 [詳解]
 
bool OpenModel (string encoder, string decoder1, string decoder2, string wave, string ssl, int model_type, int cleaner_type)
 モデルを指定します。 [詳解]
 
bool OpenTacotron2ModelFile (string encoder, string decoder1, string decoder2, string wave, int cleaner_type)
 Tacotron2モデルを指定します。 [詳解]
 
bool OpenGPTSoVITSV1ModelFile (string encoder, string decoder1, string decoder2, string wave, string ssl)
 GPT-SoVITS V1モデルを指定します。 [詳解]
 
bool OpenGPTSoVITSV2ModelFile (string encoder, string decoder1, string decoder2, string wave, string ssl, string chinese_bert, string vocab)
 GPT-SoVITS V2モデルを指定します。 [詳解]
 
bool OpenGPTSoVITSV3ModelFile (string encoder, string decoder1, string decoder2, string ssl, string vq, string cfm, string bigvgan, string chinese_bert, string vocab)
 GPT-SoVITS V3モデルを指定します。 [詳解]
 
bool OpenGPTSoVITSV2ProModelFile (string encoder, string decoder1, string decoder2, string ssl, string vits, string sv, string chinese_bert, string vocab)
 GPT-SoVITS V2-Proモデルを指定します。 [詳解]
 
bool SetSampleSteps (int steps)
 CFMのサンプリングステップ数を設定します。 [詳解]
 
bool SetSpeed (float speed)
 音声合成の速度を設定します。 [詳解]
 
bool SetModelType (int model_type)
 G2Pで使用するモデルタイプを設定します。 [詳解]
 
virtual void Close ()
 インスタンスを破棄します。 [詳解]
 
virtual void Dispose ()
 リソースを解放します。 [詳解]
 
string G2P (string utf8, int g2p_type)
 音素を取得します。 [詳解]
 
bool SetReference (AudioClip ref_audio, string ref_text)
 リファレンス音声を設定します。 [詳解]
 
bool Inference (string feature)
 音声合成を実行します。 [詳解]
 
AudioClip GetAudioClip ()
 音声合成結果を取得します。 [詳解]
 

限定公開メンバ関数

virtual void Dispose (bool disposing)
 

関数詳解

◆ Close()

virtual void ailiaVoice.AiliaVoiceModel.Close ( )
inlinevirtual

インスタンスを破棄します。

インスタンスを破棄し、初期化します。

499  {
500  if (net != IntPtr.Zero){
501  AiliaVoice.ailiaVoiceDestroy(net);
502  net = IntPtr.Zero;
503  }
504  }

◆ Create()

bool ailiaVoice.AiliaVoiceModel.Create ( int  env_id,
int  flag 
)
inline

インスタンスを作成します。

引数
env_idAiliaの実行環境
flagフラグの論理和(AiliaVoice.AILIA_VOICE_FLAG_*)
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
99  {
100  if (net != null){
101  Close();
102  }
103 
104  AiliaVoice.AILIAVoiceApiCallback callback = AiliaVoice.GetCallback();
105 
106  int memory_mode = Ailia.AILIA_MEMORY_REDUCE_CONSTANT | Ailia.AILIA_MEMORY_REDUCE_CONSTANT_WITH_INPUT_INITIALIZER | Ailia.AILIA_MEMORY_REUSE_INTERSTAGE;
107  int status = AiliaVoice.ailiaVoiceCreate(ref net, env_id, Ailia.AILIA_MULTITHREAD_AUTO, memory_mode, flag, callback, AiliaVoice.AILIA_VOICE_API_CALLBACK_VERSION);
108  if (status != 0){
109  if (debug_log){
110  Debug.Log("ailiaVoiceCreate failed " + status);
111  }
112  return false;
113  }
114 
115  return true;
116  }
virtual void Close()
インスタンスを破棄します。
Definition: AiliaVoiceModel.cs:498

◆ Dispose() [1/2]

virtual void ailiaVoice.AiliaVoiceModel.Dispose ( )
inlinevirtual

リソースを解放します。

514  {
515  Dispose(true);
516  }
virtual void Dispose()
リソースを解放します。
Definition: AiliaVoiceModel.cs:513

◆ Dispose() [2/2]

virtual void ailiaVoice.AiliaVoiceModel.Dispose ( bool  disposing)
inlineprotectedvirtual
519  {
520  if (disposing){
521  // release managed resource
522  }
523  Close(); // release unmanaged resource
524  }

◆ G2P()

string ailiaVoice.AiliaVoiceModel.G2P ( string  utf8,
int  g2p_type 
)
inline

音素を取得します。

引数
utf8入力文字列
g2p_typeG2Pタイプ
戻り値
成功した場合はstring、失敗した場合は空文字を返す。
549  {
550  byte[] text = System.Text.Encoding.UTF8.GetBytes(utf8+"\u0000");
551  //Debug.Log(text[text.Length - 1]);
552  GCHandle handle = GCHandle.Alloc(text, GCHandleType.Pinned);
553  IntPtr input = handle.AddrOfPinnedObject();
554  int status = AiliaVoice.ailiaVoiceGraphemeToPhoneme(net, input, g2p_type);
555  handle.Free();
556  if (status != 0){
557  if (debug_log){
558  Debug.Log("ailiaVoiceGraphemeToPhoneme faield " + status);
559  }
560  return "";
561  }
562  uint count = 0;
563  status = AiliaVoice.ailiaVoiceGetFeatureLength(net, ref count);
564  if (status != 0){
565  if (debug_log){
566  Debug.Log("ailiaVoiceGetFeatureLength faield " + status);
567  }
568  return "";
569  }
570  byte[] texts = new byte [count];
571  handle = GCHandle.Alloc(texts, GCHandleType.Pinned);
572  IntPtr output = handle.AddrOfPinnedObject();
573  status = AiliaVoice.ailiaVoiceGetFeatures(net, output, count);
574  handle.Free();
575  if (status != 0){
576  if (debug_log){
577  Debug.Log("ailiaVoiceGetFeatures faield " + status);
578  }
579  return "";
580  }
581  return System.Text.Encoding.UTF8.GetString(texts);
582  }

◆ GetAudioClip()

AudioClip ailiaVoice.AiliaVoiceModel.GetAudioClip ( )
inline

音声合成結果を取得します。

戻り値
成功した場合はAudioClip、失敗した場合はnullを返す。
688  {
689  AudioClip audioClip = AudioClip.Create(audio_clip_name, audio_data.Length, (int)channels, (int)sampling_rate, false);
690  audioClip.SetData(audio_data, 0);
691  return audioClip;
692  }

◆ GetEnvironmentId()

int ailiaVoice.AiliaVoiceModel.GetEnvironmentId ( bool  is_gpu)
inline

実行環境を取得します。

引数
is_gpuGPUを使用するかどうか
戻り値
env_id
44  {
45  int env_id = Ailia.AILIA_ENVIRONMENT_ID_AUTO;
46  if (is_gpu) { // GPU
47  int count = 0;
48  Ailia.ailiaGetEnvironmentCount(ref count);
49  for (int i = 0; i < count; i++){
50  IntPtr env_ptr = IntPtr.Zero;
51  Ailia.ailiaGetEnvironment(ref env_ptr, (uint)i, Ailia.AILIA_ENVIRONMENT_VERSION);
52  Ailia.AILIAEnvironment env = (Ailia.AILIAEnvironment)Marshal.PtrToStructure(env_ptr, typeof(Ailia.AILIAEnvironment));
53 
54  if (env.backend == Ailia.AILIA_ENVIRONMENT_BACKEND_MPS || env.backend == Ailia.AILIA_ENVIRONMENT_BACKEND_CUDA || env.backend == Ailia.AILIA_ENVIRONMENT_BACKEND_VULKAN){
55  env_id = env.id;
56  env_name = Marshal.PtrToStringAnsi(env.name);
57  }
58  }
59  } else {
60  env_name = "cpu";
61  }
62  return env_id;
63  }

◆ GetEnvironmentName()

string ailiaVoice.AiliaVoiceModel.GetEnvironmentName ( )
inline

実行環境の名称を取得します。

戻り値
env_name
76  {
77  return env_name;
78  }

◆ Inference()

bool ailiaVoice.AiliaVoiceModel.Inference ( string  feature)
inline

音声合成を実行します。

引数
feature入力フューチャ
戻り値
成功した場合はAtrue、失敗した場合はfalseを返す。
638  {
639  byte[] text = System.Text.Encoding.UTF8.GetBytes(feature);
640  GCHandle handle = GCHandle.Alloc(text, GCHandleType.Pinned);
641  IntPtr input = handle.AddrOfPinnedObject();
642  int status = AiliaVoice.ailiaVoiceInference(net, input);
643  handle.Free();
644  if (status != 0){
645  if (debug_log){
646  Debug.Log("ailiaVoiceInference faield " + status);
647  }
648  return false;
649  }
650  status = AiliaVoice.ailiaVoiceGetWaveInfo(net, ref samples, ref channels, ref sampling_rate);
651  if (status != 0){
652  if (debug_log){
653  Debug.Log("ailiaVoiceGetWaveInfo faield " + status);
654  }
655  return false;
656  }
657 
658  uint count = samples * channels;
659  audio_data = new float [count];
660  handle = GCHandle.Alloc(audio_data, GCHandleType.Pinned);
661  IntPtr output = handle.AddrOfPinnedObject();
662  status = AiliaVoice.ailiaVoiceGetWave(net, output, count * sizeof(float));
663  handle.Free();
664  if (status != 0){
665  if (debug_log){
666  Debug.Log("ailiaVoiceGetWave faield " + status);
667  }
668  return false;
669  }
670 
671  audio_clip_name = feature;
672 
673  return true;
674  }

◆ OpenDictionary()

bool ailiaVoice.AiliaVoiceModel.OpenDictionary ( string  dict_path,
int  dict_type 
)
inline

辞書を指定します。

引数
dictionary_path辞書フォルダのパス名
dictionary_typeAILIA_VOICE_DICTIONARY_TYPE_*
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
165  {
166  int status = AiliaVoice.ailiaVoiceOpenDictionaryFile(net, dict_path, dict_type);
167  if (status != 0){
168  if (debug_log){
169  Debug.Log("ailiaVoiceOpenDictionaryFile faield " + status);
170  }
171  return false;
172  }
173  return true;
174  }

◆ OpenGPTSoVITSV1ModelFile()

bool ailiaVoice.AiliaVoiceModel.OpenGPTSoVITSV1ModelFile ( string  encoder,
string  decoder1,
string  decoder2,
string  wave,
string  ssl 
)
inline

GPT-SoVITS V1モデルを指定します。

引数
encoderonnxファイルのパス名
decoder1onnxファイルのパス名
decoder2onnxファイルのパス名
waveonnxファイルのパス名
sslonnxファイルのパス名
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
269  {
270  AiliaLicense.CheckAndDownloadLicense();
271 
272  int status = AiliaVoice.ailiaVoiceOpenGPTSoVITSV1ModelFile(net, encoder, decoder1, decoder2, wave, ssl);
273  if (status != 0){
274  if (debug_log){
275  Debug.Log("ailiaVoiceOpenGPTSoVITSV1ModelFile failed " + status);
276  }
277  return false;
278  }
279  return true;
280  }

◆ OpenGPTSoVITSV2ModelFile()

bool ailiaVoice.AiliaVoiceModel.OpenGPTSoVITSV2ModelFile ( string  encoder,
string  decoder1,
string  decoder2,
string  wave,
string  ssl,
string  chinese_bert,
string  vocab 
)
inline

GPT-SoVITS V2モデルを指定します。

引数
encoderonnxファイルのパス名
decoder1onnxファイルのパス名
decoder2onnxファイルのパス名
waveonnxファイルのパス名
sslonnxファイルのパス名
chinese_bertchinese-roberta.onnxファイルのパス名(nullの場合、中国語BERTを使用しない)
vocabvocab.txtファイルのパス名(nullの場合、中国語BERTを使用しない)
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
307  {
308  AiliaLicense.CheckAndDownloadLicense();
309 
310  int status = AiliaVoice.ailiaVoiceOpenGPTSoVITSV2ModelFile(net, encoder, decoder1, decoder2, wave, ssl, chinese_bert, vocab);
311  if (status != 0){
312  if (debug_log){
313  Debug.Log("ailiaVoiceOpenGPTSoVITSV2ModelFile failed " + status);
314  }
315  return false;
316  }
317  return true;
318  }

◆ OpenGPTSoVITSV2ProModelFile()

bool ailiaVoice.AiliaVoiceModel.OpenGPTSoVITSV2ProModelFile ( string  encoder,
string  decoder1,
string  decoder2,
string  ssl,
string  vits,
string  sv,
string  chinese_bert,
string  vocab 
)
inline

GPT-SoVITS V2-Proモデルを指定します。

引数
encoderonnxファイルのパス名
decoder1onnxファイルのパス名
decoder2onnxファイルのパス名
sslonnxファイルのパス名
vitsonnxファイルのパス名
svonnxファイルのパス名
chinese_bertchinese-roberta.onnxファイルのパス名(nullの場合、中国語BERTを使用しない)
vocabvocab.txtファイルのパス名(nullの場合、中国語BERTを使用しない)
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
389  {
390  AiliaLicense.CheckAndDownloadLicense();
391 
392  int status = AiliaVoice.ailiaVoiceOpenGPTSoVITSV2ProModelFile(net, encoder, decoder1, decoder2, ssl, vits, sv, chinese_bert, vocab);
393  if (status != 0){
394  if (debug_log){
395  Debug.Log("ailiaVoiceOpenGPTSoVITSV2ProModelFile failed " + status);
396  }
397  return false;
398  }
399  return true;
400  }

◆ OpenGPTSoVITSV3ModelFile()

bool ailiaVoice.AiliaVoiceModel.OpenGPTSoVITSV3ModelFile ( string  encoder,
string  decoder1,
string  decoder2,
string  ssl,
string  vq,
string  cfm,
string  bigvgan,
string  chinese_bert,
string  vocab 
)
inline

GPT-SoVITS V3モデルを指定します。

引数
encoderonnxファイルのパス名
decoder1onnxファイルのパス名
decoder2onnxファイルのパス名
sslonnxファイルのパス名
vqonnxファイルのパス名
cfmonnxファイルのパス名
bigvganonnxファイルのパス名
chinese_bertchinese-roberta.onnxファイルのパス名(nullの場合、中国語BERTを使用しない)
vocabvocab.txtファイルのパス名(nullの場合、中国語BERTを使用しない)
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
349  {
350  AiliaLicense.CheckAndDownloadLicense();
351 
352  int status = AiliaVoice.ailiaVoiceOpenGPTSoVITSV3ModelFile(net, encoder, decoder1, decoder2, ssl, vq, cfm, bigvgan, chinese_bert, vocab);
353  if (status != 0){
354  if (debug_log){
355  Debug.Log("ailiaVoiceOpenGPTSoVITSV3ModelFile failed " + status);
356  }
357  return false;
358  }
359  return true;
360  }

◆ OpenModel()

bool ailiaVoice.AiliaVoiceModel.OpenModel ( string  encoder,
string  decoder1,
string  decoder2,
string  wave,
string  ssl,
int  model_type,
int  cleaner_type 
)
inline

モデルを指定します。

引数
encoderonnxファイルのパス名
decoder1onnxファイルのパス名
postnetonnxファイルのパス名
waveonnxファイルのパス名
sslonnxファイルのパス名
model_typeAILIA_VOICE_MODEL_TYPE_*
cleaner_typeAILIA_VOICE_CLEANER_TYPE_*
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
201  {
202  AiliaLicense.CheckAndDownloadLicense();
203 
204  int status = AiliaVoice.ailiaVoiceOpenModelFile(net, encoder, decoder1, decoder2, wave, ssl, model_type, cleaner_type);
205  if (status != 0){
206  if (debug_log){
207  Debug.Log("ailiaVoiceOpenModelFile faield " + status);
208  }
209  return false;
210  }
211  return true;
212  }

◆ OpenTacotron2ModelFile()

bool ailiaVoice.AiliaVoiceModel.OpenTacotron2ModelFile ( string  encoder,
string  decoder1,
string  decoder2,
string  wave,
int  cleaner_type 
)
inline

Tacotron2モデルを指定します。

引数
encoderonnxファイルのパス名
decoder1onnxファイルのパス名
decoder2onnxファイルのパス名
waveonnxファイルのパス名
cleaner_typeAILIA_VOICE_CLEANER_TYPE_*
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
235  {
236  AiliaLicense.CheckAndDownloadLicense();
237 
238  int status = AiliaVoice.ailiaVoiceOpenTacotron2ModelFile(net, encoder, decoder1, decoder2, wave, cleaner_type);
239  if (status != 0){
240  if (debug_log){
241  Debug.Log("ailiaVoiceOpenTacotron2ModelFile failed " + status);
242  }
243  return false;
244  }
245  return true;
246  }

◆ SetModelType()

bool ailiaVoice.AiliaVoiceModel.SetModelType ( int  model_type)
inline

G2Pで使用するモデルタイプを設定します。

引数
model_typeAILIA_VOICE_MODEL_TYPE_*
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。

G2Pを単独で使用する際に、モデルファイルを与えずにモデルタイプを設定します。 OpenModelやOpenGPTSoVITSV3ModelFileを呼び出した場合は自動的に設定されます。

473  {
474  int status = AiliaVoice.ailiaVoiceSetModelType(net, model_type);
475  if (status != 0){
476  if (debug_log){
477  Debug.Log("ailiaVoiceSetModelType failed " + status);
478  }
479  return false;
480  }
481  return true;
482  }

◆ SetReference()

bool ailiaVoice.AiliaVoiceModel.SetReference ( AudioClip  ref_audio,
string  ref_text 
)
inline

リファレンス音声を設定します。

引数
ref_audio入力音声
ref_text入力音声に対応するテキスト
戻り値
成功した場合はAudioClip、失敗した場合はnullを返す。
600  {
601  float[] audio_data = new float[ref_audio.samples * ref_audio.channels];
602  ref_audio.GetData(audio_data, 0);
603 
604  GCHandle audio_handle = GCHandle.Alloc(audio_data, GCHandleType.Pinned);
605  IntPtr audio_input = audio_handle.AddrOfPinnedObject();
606 
607  byte[] text = System.Text.Encoding.UTF8.GetBytes(ref_text);
608  GCHandle text_handle = GCHandle.Alloc(text, GCHandleType.Pinned);
609  IntPtr text_input = text_handle.AddrOfPinnedObject();
610  int status = AiliaVoice.ailiaVoiceSetReference(net, audio_input, (uint)(ref_audio.samples * ref_audio.channels * 4), (uint)(ref_audio.channels), (uint)(ref_audio.frequency), text_input);
611  text_handle.Free();
612  audio_handle.Free();
613 
614  if (status != 0){
615  if (debug_log){
616  Debug.Log("ailiaVoiceSetReference faield " + status);
617  }
618  return false;
619  }
620 
621  return true;
622  }

◆ SetSampleSteps()

bool ailiaVoice.AiliaVoiceModel.SetSampleSteps ( int  steps)
inline

CFMのサンプリングステップ数を設定します。

引数
stepsサンプリングステップ数
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。
415  {
416  int status = AiliaVoice.ailiaVoiceSetSampleSteps(net, steps);
417  if (status != 0){
418  if (debug_log){
419  Debug.Log("ailiaVoiceSetSampleSteps failed " + status);
420  }
421  return false;
422  }
423  return true;
424  }

◆ SetSpeed()

bool ailiaVoice.AiliaVoiceModel.SetSpeed ( float  speed)
inline

音声合成の速度を設定します。

引数
speed速度(デフォルト1.0、0より大きい値)
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。

GPT-SoVITS V2およびV3で使用できます。V1では無効です。

443  {
444  int status = AiliaVoice.ailiaVoiceSetSpeed(net, speed);
445  if (status != 0){
446  if (debug_log){
447  Debug.Log("ailiaVoiceSetSpeed failed " + status);
448  }
449  return false;
450  }
451  return true;
452  }

◆ SetUserDictionary()

bool ailiaVoice.AiliaVoiceModel.SetUserDictionary ( string  dict_path,
int  dict_type 
)
inline

ユーザ辞書を指定します。

引数
dictionary_pathユーザ辞書ファイルのパス名
dictionary_typeAILIA_VOICE_DICTIONARY_TYPE_*
戻り値
成功した場合はtrue、失敗した場合はfalseを返す。

OpenDictionaryの前に呼び出す必要があります。

138  {
139  int status = AiliaVoice.ailiaVoiceSetUserDictionaryFile(net, dict_path, dict_type);
140  if (status != 0){
141  if (debug_log){
142  Debug.Log("ailiaVoiceSetUserDictionaryFile faield " + status);
143  }
144  return false;
145  }
146  return true;
147  }

このクラス詳解は次のファイルから抽出されました: