SeikaSay2 コマンドは AssistantSeika を利用するためのインタフェースプログラムです。Windows Communication Foundation (WCF)を利用しています。
コマンド | SeikaSay2.exe |
---|---|
実行場所 | AssistantSeikaが稼働するPC上 |
条件 | AssistantSeikaが稼働している事 |
その他 | -async 指定時は音声保存できません |
cidが2001のVOICEROID2話者をseikasay2で発声させる最少の記述は以下となります。
seikasay2 -cid 2001 -t "これは音声発声のテストです"
その他オプションは以下のようになります。
オプション | 説明 |
---|---|
-list | 使用可能な話者の一覧(CID、話者名)を表示します。 |
-cid CID | 話者の番号 CID を指定します。 |
-async | SeikaSay2.exeでのみ使用可能。非同期で発声させます。(発声終了を待たない) 音声保存指定は無効となります。 |
-params | -cid で指定する話者のパラメタ情報(デフォルト)を表示します。 |
-current | -cid で指定する話者のパラメタ情報(現在の設定)を表示します。 |
-save WaveFile | WaveFile で示すファイルに音声データ(Wav形式)を書き出します。絶対パスでの指定をしてください。 |
-savepath Path | 標準入力時およびファイル入力時、Path で示すフォルダに音声データ(Wav形式)を書き出します。 そのフォルダの下にファイル名 「“SAY”+数字連番_cid+“.wav”」で保存します。フォルダは絶対パスで指定してください。 |
-volume P | 音量 に Pを指定します。 |
-speed P | 話速(速さ) に Pを指定します。 |
-pitch P | 高さ に Pを指定します。 |
-alpha P | 声質 に Pを指定します。 |
-intonation P | 抑揚 に Pを指定します。 |
-emotion eP P | 感情パラメタ eP に P を設定します。 |
-ob | OverBannerに発声テキストを送ります。このオプションは OverBannerを実行しているときに有効です。 |
seikasay2コマンドに指定するオプションは -list を除き、-cid を必ず最初に指定します。
次にオプション -t, -stdin, -f のいずれかのオプションが有効になっている必要があります。
コマンド | 内容 |
---|---|
seikasay2 -cid 2001 -t “発声しましたか?” “これは音声発声のテストです。” | “発声しましたか?これは音声発声のテストです。” を発声する。 |
seikasay2 -cid 2001 -stdin | ※標準入力から入力されたテキストで発声する。 |
seikasay2 -cid 2001 -f words.txt | words.txt の内容を1行ずつ発声する。UTF-8 BOM無しのテキストファイル。 |
cidはAssistantSeikaの話者一覧でも確認できますし、-list オプションで確認する事もできます。
この環境では2001が琴葉茜を指し、2008がついなちゃん(標準語)、1701が京町セイカ+EX、3001がさとうささら、5001が鳴花ヒメを指しています。
F:\AssistantSeika\sandbox>seikasay2 -list cid speaker ----- --------------------------- 1701 VOICEROID+ 京町セイカ EX 1702 VOICEROID+ 民安ともえ EX 1704 VOICEROID+ 東北ずん子 EX 2001 琴葉 茜 2002 琴葉 葵 2007 伊織 弓鶴 2008 ついなちゃん(標準語) 2009 ついなちゃん(関西弁) 2050 京町セイカ(v1) 2051 民安ともえ(v1) 2052 結月ゆかり(v1) 2053 東北ずん子(v1) 2100 京町セイカ(v1) - どよーん 5001 鳴花ヒメ 5002 鳴花ミコト 3001 さとうささら 3002 すずきつづみ 3003 タカハシ 3004 ONE ----- --------------------------- F:\AssistantSeika\sandbox>
音声合成製品それぞれで指定可能なオプションと指定する値が異なるので注意してください。
簡単な範囲チェックはしていますが、例えば VOICEROID2 のオプション -speed で 0.559 なんて指定した場合はたぶんエラーになるので、あまりイレギュラーな指定はしないでください。順次修正していきます。
オプションの数値範囲。
オプション | VOICEROID2 | VOICEROID+EX | A.I.VOICE | CeVIO CS | CeVIO AI | SAPI | 棒読みちゃん | ガイノイドTalk |
---|---|---|---|---|---|---|---|---|
-volume | 0.00 ~ 2.00 | 0.00 ~ 2.00 | 0.00 ~ 2.00 | 0 ~ 100 | 0 ~ 100 | 0 ~ 100 | 0 ~ 100 | 0.00 ~ 2.00 |
-speed | 0.50 ~ 4.00 | 0.50 ~ 4.00 | 0.10 ~ 5.00 | 0 ~ 100 | 0 ~ 100 | -10 ~ 10 | 50 ~ 200 | 0.50 ~ 4.00 |
-pitch | 0.50 ~ 2.00 | 0.50 ~ 2.00 | 0.10 ~ 5.00 | 0 ~ 100 | 0 ~ 100 | - | 50 ~ 200 | 0.50 ~ 2.00 |
-alpha | - | - | - | 0 ~ 100 | 0 ~ 100 | - | - | - |
-intonation | 0.00 ~ 2.00 | 0.00 ~ 2.00 | 0.00 ~ 5.00 | 0 ~ 100 | 0 ~ 100 | - | - | 0.00 ~ 2.00 |
-emotion | 0.00 ~ 1.00 | - | - | 0 ~ 100 | 0 ~ 100 | - | - | - |
※A.I.VOICE範囲は環境設定で「音声効果値の入力範囲を拡張する」にチェックを入れた状態
VOICEROID2ではスタイル、CeVIOでは感情・コンディションと説明されている、感情のパラメタを指定するオプションが -emotion になります。
感情パラメタには名前がついています。この名前をそのまま指定する事になります。cid=3001 がCeVIO CSさとうささらだった場合、
記述 | 説明 |
---|---|
seikasay2 -cid 3001 -emotion “元気” 50 -t “さとうささらは元気です” | CeVIO さとうささら の元気パラメタを指定 |
seikasay2 -cid 3001 -emotion “哀しみ” 50 -t “さとうささらは哀しいです” | CeVIO さとうささら の哀しみパラメタを指定 |
seikasay2 -cid 3001 -emotion “クール” 100 -t “さとうささらはクールなのです” | CeVIO すずきつずみ のクールパラメタは指定しても無効 |
seikasay2 -cid 3001 -emotion “元気” 0 -emotion “哀しみ” 100 -t “さとうささらはとても哀しいのです” | CeVIO さとうささら の元気・哀しみパラメタを指定 |
seikasay2 -cid 2001 -emotion “喜び” 1.00 -t “茜ちゃん元気ー!” | VOICEROID2 琴葉茜 の喜びパラメタを指定 |
seikasay2 -cid 2001 -emotion “怒り” 1.00 -t “茜ちゃん激オコー!” | VOICEROID2 琴葉茜 の怒りパラメタを指定 |
seikasay2 -cid 2001 -emotion “クール” 1.00 -t “茜ちゃん超クール” | CeVOI すずきつづみ のクールパラメタは指定しても無効 |
seikasay2 -cid 2001 -emotion “悲しみ” 0.7 -emotion “怒り” 0.3 -t “茜ちゃんしんみり” | VOICEROID2 琴葉茜 の悲しみ・怒りパラメタを指定 |
話者が対応していない感情パラメタを適用することはできません。たとえば すずきつづみ の感情パラメタ“クール”をさとうささらに指定しても有効になりません。さとうささらは“クール”に対応していないからです。
東北イタコの感情パラメタ“セクシー”を琴葉茜に指定してもセクシーボイス茜ちゃんにはなりません。琴葉茜は“セクシー”に対応していないからです。
利用可能な感情パラメタは、SeikaSay2コマンドの -params オプションで確認できます。
cidが3001のさとうささらは、元気,普通,怒り,哀しみ、の4つの感情パラメタを持っています。
F:\AssistantSeika\sandbox>seikasay2 -cid 3001 -params cid:3001 --------------------------------- effect : volume = 50 [0.0~100.0, step 1.00] effect : speed = 50 [0.0~100.0, step 1.00] effect : pitch = 50 [0.0~100.0, step 1.00] effect : alpha = 50 [0.0~100.0, step 1.00] effect : intonation = 50 [0.0~100.0, step 1.00] emotion : 元気 = 100 [0.00~100.0, step 1.00] emotion : 普通 = 0 [0.00~100.0, step 1.00] emotion : 怒り = 0 [0.00~100.0, step 1.00] emotion : 哀しみ = 0 [0.00~100.0, step 1.00] --------------------------------- F:\AssistantSeika\sandbox>
cidが2001の琴葉茜は、喜び,怒り,悲しみ、の3つの感情パラメタを持っています。
F:\AssistantSeika\sandbox>seikasay2 -cid 2001 -params cid:2001 --------------------------------- effect : volume = 1 [0~2, step 0.01] effect : speed = 1.3 [0.5~4, step 0.01] effect : pitch = 1 [0.5~2, step 0.01] effect : intonation = 1 [0~2, step 0.01] effect : shortpause = 150 [80~500, step 0.01] effect : longpause = 370 [100~2000, step 0.01] emotion : 喜び = 0 [0~1, step 0.01] emotion : 怒り = 0 [0~1, step 0.01] emotion : 悲しみ = 0 [0~1, step 0.01] --------------------------------- F:\AssistantSeika\sandbox>
cidが1701の京町セイカ+EXは、感情パラメタを持っていません。
F:\AssistantSeika\sandbox>seikasay2 -cid 1701 -params cid:1701 --------------------------------- effect : volume = 1.00 [0.0~2.0, step 0.01] effect : speed = 1.00 [0.5~4.0, step 0.01] effect : pitch = 1.00 [0.5~2.0, step 0.01] effect : intonation = 1.00 [0.0~2.0, step 0.01] --------------------------------- F:\AssistantSeika\sandbox>
オプション -async を指定すると、独立した製品であれば非同期にSeikaSay2コマンドを実行することができます。
この例では、
で非同期に実行させています。前半は同期実行、公判が非同期実行です。
seikasay2 -cid 1700 -t "かえるのうたが" seikasay2 -cid 2004 -t "かえるのうたが" seikasay2 -cid 3000 -t "かえるのうたが" seikasay2 -cid 5000 -t "かえるのうたが" seikasay2 -cid 1700 -t "きこえてくるよ!" seikasay2 -cid 2004 -t "きこえてくるよ!" seikasay2 -cid 3000 -t "きこえてくるよ!" seikasay2 -cid 5000 -t "きこえてくるよ!" pause seikasay2 -cid 1700 -async -t "かえるのうたが" seikasay2 -cid 2004 -async -t "かえるのうたが" seikasay2 -cid 3000 -async -t "かえるのうたが" seikasay2 -cid 5000 -async -t "かえるのうたが" seikasay2 -cid 1700 -async -t "きこえてくるよ!" seikasay2 -cid 2004 -async -t "きこえてくるよ!" seikasay2 -cid 3000 -async -t "きこえてくるよ!" seikasay2 -cid 5000 -async -t "きこえてくるよ!" pause
-stdin が指定される場合、標準入力からの入力と判断されます。以下はWindowsで作成したSJISテキストファイルtalk.txtに記述された2行「夜更かしは」「身体に悪いですよ。」を発声します。
F:\AssistantSeika\sandbox>type talk.txt 夜更かしは 身体に悪いですよ。 F:\AssistantSeika\sandbox>type talk.txt | seikasay2 -cid 3003 -stdin F:\AssistantSeika\sandbox>
引数に -savepath オプションを付与すると、入力した1行単位で音声保存ができます。生成されたテキストファイルは utf-8エンコーディングになっています。
F:\AssistantSeika\sandbox>type talk.txt | seikasay2 -cid 3003 -savepath F:\AssistantSeika\sandbox -stdin F:\AssistantSeika\sandbox>dir SAY* ドライブ F のボリューム ラベルは Seagate Expansion Drive です ボリューム シリアル番号は 8C5A-8A40 です F:\AssistantSeika\sandbox のディレクトリ 2020/05/02 19:12 17 SAY000001_3003.txt 2020/05/02 19:12 68,842 SAY000001_3003.wav 2020/05/02 19:12 29 SAY000002_3003.txt 2020/05/02 19:12 139,402 SAY000002_3003.wav 4 個のファイル 208,290 バイト 0 個のディレクトリ 2,144,332,976,128 バイトの空き領域 F:\AssistantSeika\sandbox>
-f オプションでファイルを指定するとそのファイルの1行毎を発声します。-savepath オプションで音声が保存されます。以下はWindowsで作成したUTF-8のテキストファイルtalkutf8.txtを指定し音声保存させた例です。
Active code page: 65001 F:\AssistantSeika\sandbox>type talkutf8.txt 夜更かしは 身体に悪いですよ。 F:\AssistantSeika\sandbox>seikasay2 -cid 3002 -savepath F:\AssistantSeika\sandbox -f talkutf8.txt 夜更かしは 身体に悪いですよ。 F:\AssistantSeika\sandbox>dir SAY* Volume in drive F is Seagate Expansion Drive Volume Serial Number is 8C5A-8A40 Directory of F:\AssistantSeika\sandbox 2020/05/02 19:16 17 SAY000001_3002.txt 2020/05/02 19:16 74,134 SAY000001_3002.wav 2020/05/02 19:16 29 SAY000002_3002.txt 2020/05/02 19:16 138,520 SAY000002_3002.wav 4 File(s) 212,700 bytes 0 Dir(s) 2,144,332,759,040 bytes free F:\AssistantSeika\sandbox>
CeVIOの制御には公式に提供されている .NET連携API を使っています。
このAPIを使うと発声させるテキストの文字数がCeVIO CSで100文字、CeVIO AIで500文字に制限されてしまいます。
制限を超えた文字数のテキストを指定すると警告ダイアログが表示され処理が継続されません(ダイアログのOKボタンを押すことで継続されます)
そのため、CeVIO CSに与えるテキストが100文字を超えた場合 AssistantSeika 20201003/u 以降では 101文字以降を削除して適用します。
CeVIO AIに与えるテキストが500文字を超えた場合 AssistantSeika 20210621/u 以降では 501文字以降を削除して適用します。
例えば、SeikaSay2コマンドから以下のようなテキストをCeVIO CSで発声させてみます。
SeikaSay2 -cid 3001 -t 寿限無、寿限無、五劫の擦り切れ、海砂利水魚の、水行末・雲来末・風来末、 喰う寝る処に住む処、藪ら柑子の藪柑子、パイポ・パイポ・パイポのシューリンガン、 シューリンガンのグーリンダイ、グーリンダイのポンポコピーのポンポコナの、長久命の長助
※実際には -t 以降を改行、空白無しの1行で指定しています
発声されるのは “寿限無、寿限無、五劫の擦り切れ、海砂利水魚の、水行末・雲来末・風来末、喰う寝る処に住む処、藪ら柑子の藪柑子、パイポ・パイポ・パイポのシューリンガン、シューリンガンのグーリンダイ、グーリンダイのポンポコ” の100文字までになります。
長文を読ませる用途においてこの制限は結構きついものがあります。 そのため、発声テキストを制限文字数内で分割して与える方法を用意しました。
ここでは、発声テキストを以下のように3分割します。
SeikaSay2コマンドでの指定は以下のようになります。今度はすべてのテキストが発声できたと思います。
※AssistantSeika 20210621/u 以降に同梱の SeikaSay2/SeikaSay2N コマンドを使ってください。
SeikaSay2 -cid 3001 -t "寿限無、寿限無、五劫の擦り切れ、海砂利水魚の、水行末・雲来末・風来末、喰う寝る処に住む処、藪ら柑子の藪柑子、" "パイポ・パイポ・パイポのシューリンガン、シューリンガンのグーリンダイ、" "グーリンダイのポンポコピーのポンポコナの、長久命の長助"
※実際には -t 以降を改行無しの1行で指定しています
-t オプションで指定するテキストを適宜空白で区切ります。※この例で分割したテキストをダブルクオートで囲んでいるのは分割単位を明確にするためです。
分割した各テキストに100文字/500文字(CS/AI)を超えているものがあれば、AssistantSeika はそのテキストの101文字/501文字(CS/AI)以降を削除して適用します。
なお、この振る舞いは
の時だけ有効です。
音声保存時にチェック「音声保存時に再生デバイスをキャプチャする」が入っていない場合は、指定されたテキストの先頭100文字/500文字(CS/AI)までが対象になります。
オプション -save、-savepath を使う際の注意。
指定するフォルダ名、ファイル名は絶対パスで指定してください。音声保存処理は AssistantSeikaが実行するので、相対パスの場合、AssistantSeika 基準で保存先が決められてしまいます。