VB.NETでCeVIO AI トークエディタに喋らせる為のソースコード

入力文字読み上げソフトCeVIO AI トークボイスと、CeVIO AI トークエディタを、プログラムからAPIを使用して喋らせたいかた向けのソースコードをVB.NET(Visual Basic)で作ってみました。

C#のサンプルコードは、CeVIO AIのユーザーズガイドページでサンプルソースコードが配布されていますが、VB.NETのサンプルコードはなかったのでここで公開します。
Visual Stadio2022でコーディングし、動作確認までしました。


VB.NET(VisualBasic)で新規作成する際の注意点

VB.NETとCeVIO AIをAPIで連携させる為には、.NET Framework4.8が必要なので、VB.NETで新規作成する際の上の画面では、フォームアプリケーション(.NET Framework)を選びます。


次の画面で、プロジェクトに名前をつけたり、ソースコードを保存するフォルダを選択する画面が出ますが、フレームワークのバージョンは4.8を選びます。
ここは後からでも変更できますが、最初から4.8を選ぶ方が楽です。


dllの参照設定をする

CeVIO AIと連携する為のdllを選択する画面
VB.NETで新規プロジェクトが起動したら、上部メニューからプロジェクト(P)を選び、参照の追加(R)で、参照マネージャーを起動させます。
左から参照を選び、右下の参照(B)を選び、

C:¥Program Files¥CeVIO¥CeVIO AI¥CeVIO.Talk.RemoteService2.dll

上記のフォルダからCeVIO.Talk.RemoteService2.dllを選択します。(CeVIO AI トークエディタがインストールされていればあるはずです。)

これをすることでCeVIO AI公式が用意したAPIを使う準備が整います。


VB.NETでCeVIO AIに喋らせる為にソースコード

上の手順を正しくおこなっているのが前提で、Form1にButtonを貼り付けて、下のソースコードをソースコードエディタに貼り付け、実行してボタンを押すだけで、すぐに動いて喋ります。


Imports CeVIO.Talk.RemoteService2 Public Class Form1 '******************************************************************* 'プロジェクト(P)から参照の追加(R)で、 'C:\Program Files\CeVIO\CeVIO AI\CeVIO.Talk.RemoteService2.dll 'を追加すること '******************************************************************* Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim wCeVIOTalker As Talker2 = New Talker2 Dim wState As SpeakingState2 Dim wTalker_Name() As String 'PCにインストールされているCeVIO AI話者の名前一覧 Dim wLp As Integer 'Longではダメ 必ずIntegerを使用する(相手のdllに合わせる) '=============================================================== 'CeVIO AI Talk Editor を起動する 'Falseを指定することで、起動していなければ起動し、起動していれば何もしない '=============================================================== ServiceControl2.StartHost(False) '=============================================================== 'PCにインストールされている話者一覧を文字型配列に取得 '=============================================================== wTalker_Name = Talker2.AvailableCasts '文字型配列で受け取る '=============================================================== 'パラメーターをセット '50をセットするとCeVIO AI トークエディタ右側の縦スライダーの真ん中に該当する模様 '=============================================================== With wCeVIOTalker 'wCeVIOTalkerのコーディングを省略 ex).Castは wCeVIOTalker.Castのこと .Cast = wTalker_Name(0) '誰に喋らせるのか正式名義を入れる 夏色花梨など名前を固定で漢字でセットしても良い .Volume = 50 '大きさ(0~100) .Speed = 50 '速さ(0~100) .Tone = 50 '高さ(0~100) .Alpha = 50 '声質(0~100) .ToneScale = 50 '抑揚(0~100) '=========================================================== '感情値をセットする '各パラメーター0から100でセットする 'CeVIO AI トークエディタ同様 複数指定可能の模様です。 '=========================================================== wLp = 0 Do Until wLp = .Components.Count '感情の件数分回す Select Case .Components(wLp).Name '←話者に対する感情名 Case "嬉しい" .Components(wLp).Value = 0 '嬉しいの感情値をセット Case "普通" .Components(wLp).Value = 100 '普通の感情値をセット Case "怒り" .Components(wLp).Value = 0 '怒りの感情値をセット Case "哀しみ" .Components(wLp).Value = 0 '哀しみの感情値をセット Case "落ち着き" .Components(wLp).Value = 0 '落ち着きの感情値をセット Case "元気" .Components(wLp).Value = 0 '元気の感情値をセット(さとうささら、タカハシ) Case "へこみ" .Components(wLp).Value = 0 'へこみの感情値をセット(タカハシ) Case "喜び" .Components(wLp).Value = 0 '喜びの感情値をセット(すずきつづみ) Case "クール" .Components(wLp).Value = 0 'クールの感情値をセット(すずきつづみ) Case "照れ" .Components(wLp).Value = 0 '照れの感情値をセット(すずきつづみ) Case "ひそひそ" .Components(wLp).Value = 0 'ひそひその感情値をセット(すずきつづみ) Case "泣き" .Components(wLp).Value = 0 '泣きの感情値をセット(双葉湊音) Case "人見知り" .Components(wLp).Value = 0 '人見知りの感情値をセット(双葉湊音) Case "幼い" .Components(wLp).Value = 0 '幼いの感情値をセット(双葉湊音) Case "あおり" .Components(wLp).Value = 0 'あおりの感情値をセット(ユニちゃん) Case "甘々" .Components(wLp).Value = 0 '甘々の感情値をセット(ユニちゃん) End Select wLp = wLp + 1 Loop End With '=============================================================== '今現在、CeVIO AIは喋れる状態なのかチェック 'True:CeVIO AIが暇 False:CeVIO AIが今動いてるから無理 '=============================================================== If ServiceControl2.IsHostStarted = True Then '=============================================================== '喋らせたい言葉をセットして、喋り終わるまでそれぞれ待つ '=============================================================== wState = wCeVIOTalker.Speak("こんにちは") wState.Wait() '喋り終わるまで待つ wState = wCeVIOTalker.Speak("こんばんは") wState.Wait() '=============================================================== 'wavファイルへ書き出し ' 第1引数:wavファイルへ保存したいセリフ(String型) ' 第2引数:保存したいパスをファイル名まできちんとセットする(String型) ' 出力形式はサンプリングレート48kHz, ビットレート16bit, モノラル固定の模様 ' 同名ファイルがある場合は上書き保存される模様 '=============================================================== 'If wCeVIOTalker.OutputWaveToFile("ちょっと!触らないでよ!", "d:\test\a.wav") = True Then 'wavファイル保存成功 'Else 'wavファイル保存失敗 'End If End If '=============================================================== 'CeVIO AI Talk Editor を終了する '=============================================================== ServiceControl2.CloseHost() End Sub End Class
詳しい解説は、コメントに書いてあるので読んでいただけると幸いです。
ソースコードを実行し、ボタンを押すとCeVIO AIトークエディッタが起動し、しゃべって、CeVIO AIが終了します。
CeVIO AIを終了させるソースコードをコメントアウトすれば、終了しないこともできます。

Wavファイルの保存

wavファイルへの出力ソースコードは、最初からコメントアウトしているので、使用したい場合はソースを有効化して、保存するファイルパスとファイル名の部分だけきちんと指定すれば、読み上げ文字のWavファイルへの出力も可能でした。

読ませる時のパラメーターの設定について

大きさ、速さ、高さ、声質、抑揚のパラメーターと、感情パラメーターは0から100で設定する必要があり、50を設定することで、トークエディタ画面の右側の縦のスライダーの各パラメーターの真ん中に設定していることになるようです。

ちなみに、トークボイスにIAやOИEを使っている場合は、感情パラメーターがNormalなど英語なので、追記してください。

上のソースでは、怒りや嬉しい等に設定する数値を固定で代入していますが、話者の感情の名前を読み込み、画面に表示させて、利用者に値を入力させて、値をセットするのが普通になるのかなと思います。
話者によって、感情の名前が違うので、話者を選ばせ、その話者に該当する感情名を表示させ、感情値を入力させる流れになるのが、ちょっと面倒ですね。

話者が2人以上インストールされている場合

話者を2人以上インストールしている場合は、話者の配列(上のソースだとwTalker_Name)に複数人名前が入るので、それをリストボックスやプルダウンボックスに表示させて、ユーザーに選択させるみたいな扱いになると思います。
最終的には、上のソースで.castの所に、小春六花や夏色花梨、さとうささら、等の話者が入ればOKなので、個人で使用するアプリなら固定で代入でもいけます。


タイトルとURLをコピーしました