LoginSignup
2
1

More than 1 year has passed since last update.

PythonからCeVIO AIの外部連携インターフェイスを叩く

Posted at

勉強がてらCeVIO AIの外部連携インターフェイスを叩くラッパーを作ってみました。
pip install sasawrapperでインストールできます。)

これを作った時の備忘録です。

PythonでCOMコンポーネントを使う

COMコンポーネントの形で公開されているのでこれを使用します。

PythonからCOMコンポーネントを使用するにはpywin32を使用します。
pipでインストールします。

pip install pywin32

COMコンポーネントを読み込む

CeVIOの外部インターフェースのコンポーネントは2つあるのでそれぞれ読み込み、インスタンスを作成します。
service_controlは制御機能、talker2はトーク機能です。

import win32com.client
service_control = win32com.client.Dispatch("CeVIO.Talk.RemoteService2.ServiceControl2V40")
talker2 = win32com.client.Dispatch("CeVIO.Talk.RemoteService2.Talker2V40")

実際に操作する

制御機能

CeVIO AIを起動する

service_control.StartHost(False)

バージョンを確認する

print(service_control.HostVersion)
8.1.34.0

CeVIO AIに終了を要求する

service_control.CloseHost(0)

トーク機能

予めCeVIO AIを起動する

service_control.StartHost(False)

キャストを確認する

string_array = talker2.AvailableCasts
print([string_array.At(i) for i in range(string_array.Length)])
['さとうささら']

キャストを設定する

talker2.Cast = "さとうささら"

音量を設定する

talker2.Volume = 60

感情を確認する

component_array = talker2.Components
print([component_array.At(i).Name for i in range(component_array.Length)])
['元気', '普通', '怒り', '哀しみ']

感情を設定する

component_array.ByName("元気").Value = 0
component_array.ByName("普通").Value = 0
component_array.ByName("怒り").Value = 50
component_array.ByName("哀しみ").Value = 50

再生する

text = "こんにちは"
talker2.Speak(text).Wait()

音素のデータを取得する

phoneme_data_array = talker2.GetPhonemes(text)
result = []
for i in range(phoneme_data_array.Length):
    phoneme_data = phoneme_data_array.At(i)
    result.append((phoneme_data.StartTime, phoneme_data.EndTime, phoneme_data.Phoneme))

print(result)
[(0.0, 0.005, 'sil'), (0.005, 0.125, 'k'), (0.125, 0.20500000000000002, 'o'), (0.20500000000000002, 0.25, 'N'), (0.25, 0.34500000000000003, 'n'), (0.34500000000000003, 0.4, 'i'), (0.4, 0.51, 'ch'), (0.51, 0.5700000000000001, 'i'), (0.5700000000000001, 0.635, 'w'), (0.635, 0.78, 'a'), (0.78, 0.905, 'sil')]

おまけ:sasawrapperを使って呼び出す

バージョンを確認する

import sasawrapper
print(sasawrapper.get_cevioai_version())
8.1.34.0

キャストの情報を確認する

print(sasawrapper.get_cast_info())
{'さとうささら': ['元気', '普通', '怒り', '哀しみ']}

再生する

sasawrapper.speak("こんにちは", volume=60, cast="さとうささら", emotion={"怒り":50,"哀しみ":50})

音素のデータ(モノフォンラベル)を取得する

print(sasawrapper.get_monophone_label("こんにちは", volume=60, cast="さとうささら", emotion={"怒り":50,"哀しみ":50}))
0 50000 sil
50000 1250000 k
1250000 2050000 o
2050000 2500000 N
2500000 3450000 n
3450000 4000000 i
4000000 5100000 ch
5100000 5700000 i
5700000 6350000 w
6350000 7800000 a
7800000 9050000 sil
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1