色んなデータ置き場。

棒読みちゃんカスタム備忘録

棒読みちゃんにVOICEROID・VOICEVOXを導入する時と
更にそれを利用して様々な機能をとりつけた時の話。
丁寧めに解説してみようと思います。

「なんで既存の放送にはこういう機能がないのだろう」と思ってとりつけたので、真似していただけるとうれしいです。
もっと洗練された方法があれば、もっといいですね。知識ないなりに力技でやってますので。


VOICEROID導入

まず、VOICEROIDを購入します。
当たり前のようですがこれは前提になります。フリーソフトでもなんでもありません。
自分が使っているのは「VOICEROID2 琴葉茜・葵」ですが、今から買うなら後継のA.I.VOICEなどを買った方がいいでしょう。
 多分このへん https://aivoice.jp/character/kotonoha/
結構なお値段になります。その割には機能微妙な部分もあったりはします。

VOICEROIDを購入して、棒読みちゃんも入れたら、基本的にはこのプラグイン「Voiceroid Talk Plus」を入れれば使えます。
 https://wangdora.jp/?plugin/VTP
ちゃんと入れば、棒読みちゃん上部の設定アイコンの右端に、「Voiceroid Talk Plusの設定」アイコンが表示されます。

導入したのはだいぶ前なので、注意点も忘れてしまいましたが、私は以下のように設定しています。
オン 「常に一人で読み上げる」「一緒に起動」「VOICEROID2エンジンを利用する」

VOICEROIDの特徴としては、以下のようなものが挙げられます。
動作が軽い … 10年前のエントリークラスPCで無理なく配信していました。VOICEVOXより圧倒的に軽い。
・絵が動く … 「VOICEROIDに台本を渡して読ませる」という構造になっているので、VOICEROIDのキャラクターが動きます。そのまま配信に映せます。
・棒読みちゃんの地声は変わらない … 上記と表裏一体で、SEや学習などの棒読み特有の機能を使った場合、VOICEROIDの声は使われません(学習内容自体は反映されます)。
・茜ちゃんが関西弁 … 貴重な関西弁ボイスなので、関西弁を使える人には非常に魅力的。

VOICEVOX導入

VOICEVOXは無料で使えます。
 https://voicevox.hiroshiba.jp/
ずんだもんが有名になりましたが、他にもかなりの数のキャラクターがおり、いろんな声を扱う事ができます。
ただし、一応それぞれに利用規約がありますので注意(現状、ほとんど差はない)。

棒読みちゃんにVOICEVOXを導入するには、現状、SAPI For VOICEVOXというものを使います。
 https://github.com/shigobu/SAPIForVOICEVOX/release...
現状、Setup32を、インストールフォルダを変更せずにインストールするのが正解です。
私は「64でもええやろ、インストールフォルダもC直下とか嫌や」と思って勝手にした結果、アンインストールして入れなおしました。

ちゃんと入れば、棒読みちゃんの声質一覧にVOICEVOXの連中が表示されるようになります。
モデルの順番はおそらく、VOICEVOXのインストール時期(バージョンでモデル数が増えてるので)やSAPIの設定などによって入れ替わります。
私はとりあえず、VOICEVOX Ver.0.14.8で全キャラクター突っ込みました。

VOICEVOXの特徴としては、以下のようなものが挙げられます。
無料 … なんといっても無料。
棒読みの地声が変わる … 棒読みちゃんの独自機能も使えます。棒読みちゃんで速度・音程・音量の変化もできます。
・動作が重い … 一回り上のスペックが要求されます。配信(OBS)そのものよりよほど重いです。
・絵は動かない … 棒読みちゃんでコントロールしてるので、VOICEVOX本体は見た目何も変わりません。喋ってるキャラの顔とか映せません。

VOICEROIDとVOICEVOXの併用

この2つを併用しようとすると、途端に思うようにならない事が増えます。
結論から言うと
「棒読みちゃんの声質は棒読みちゃんデフォルトから選ぶ(女性1など)」
「SEや教育などの際の声を変えたい場合、個別に変更する」
とうまくいきました。

棒読みちゃんの声質をVOICEVOXなどの音声に変更しても、VOICEVOX単体では機能します。
しかし、一度VOICEROIDに読ませると声が出なくなります。
台本自体はVOICEVOXに読ませており、CPU負荷を見るに音声変換もしているようですが、音は出ません。
文章+SE(逆順不可)などで強引に地声を出させると復帰しますが、VOICEROIDに読ませるとまた声が出なくなります。
デフォルトの声質にしておけば、このような問題は起こりません。

しかしデフォルトの声質にしてしまうと、当然、そのままではSEや教育時の声もデフォルトになってしまいます。
元々これらは棒読みちゃんの「タグ」でコントロールしているので、少し細工すればVOICEVOXの声にできます。

棒読みちゃんのタグ、正規表現編集(教育編)

棒読みちゃんの「辞書登録」の「タグ」の「正規表現」のところに、教育などに使う設定が最初から登録されています。
この「タグ」のところで、SEや声色指定を使えるようにできるわけですが、「正規表現」を使う事で少しだけ高度な事ができます。

例えば、最初から登録されている「教育(」について、以下のように書き足して置き換えます(誤字等による置き換え失敗が不安なら、修正後に新規追加した後、古い方を削除するといいでしょう)。
探索文字列は「教育(」のままでいいです。(この文字列を発見すると、正規表現で全文が洗い直され、置換後のテキストに置き換えられる、という仕組みです)
初期設定正規表現教育(([^=]*)=([^)]*))
置換後(Study $1=$2)
修正後正規表現(.*)教育(([^=]*)=([^)]*))(.*)
置換後(Voice 100XX)$1(Study $2=$3)$4
100XXのところは読ませたい声のIDに変えてください。
声のIDは、棒読みちゃんの「基本設定/システム/音声合成エンジン」から見る事ができます。
このIDナンバーはインストール環境で異なりそうなので、一概にどのIDが誰の声とは言えません。

ともかくこれで、教育時の音声を好きな音声に変える事ができるようになります。

正規表現について、少し説明すると
表現意味
([^=]*)=[^=]で「=以外の1文字」
その直後の*で「0回以上繰り返し」
これらを()で綴じて=をつける事で総じて
「=が出てくるまでの複数文字」と「=」を特定しています。
([^)]*))[^)]で「)以外の1文字」
その直後の*で「0回以上繰り返し」
これらを()で綴じて)をつける事で総じて
「)が出てくるまでの複数文字」と「)」を特定しています。
(Study $1=$2)「(Study xx=yy)」は教育の定型文です。
$1は()で綴じられたグループ1、$2はグループ2となります。
つまり正規表現から意訳すると
「教育します」「グループ1(=が出てくるまでの複数文字)」=「グループ2()が出てくるまでの複数文字)」となります。
(.*).で任意の一文字、*でそれの0回以上の繰り返しで、.*は任意の文字0〜複数となります。
これらを()で綴じる事で、任意の文字0〜複数のグループになり、置換後に呼び出せます。
つまるところ、最初の(.*)は「教育(xx=yy)」が出てくるまでの全文、最後の(.*)は出てきた後の全文となります。
(Voice 100XX)声色指定です。XX部分は好きな番号にしてください。
$1(Study $2=$3)$4前後に(.*)がついているので、その部分を入れます。
()で綴じられたグループが増えてる分、Studyのところの数字も増やす必要があります。

実例を書いてみます。

 じゃあ、とりあえず教育(枝豆=ずんだもち)してみるのだ

このコメントは、初期状態では以下のように置換されます。

 じゃあ、とりあえず(Study 枝豆=ずんだもち)してみるのだ

実際に読まれる時はさらに、(Study XX=YY)が「基本設定/配信者向け機能/タグ/Study(教育)」の書式に従って読み替えられますが、とりあえず横に置きます。
()で閉じられた単語を$1$2という形で残しつつ、「教育()」の部分を辞書登録コマンドの「(Study =)」に置き換えています。「教育」という単語そのものは最終的には消えています。
また、教育()以外の部分にはノータッチです。

変更後はこのように置換されます。ずんだもんノーマルがID10009だとします。

 (Voice 10009)じゃあ、とりあえず(Study 枝豆=ずんだもち)してみるのだ

(.*)を使って前後の文章を$1$4として残しつつ、その前に最初に(Voice 10009)を付け足しています。
教育用の単語はナンバリングがずれて$2$3となっていますが、それ以外は一緒です。
形式的には全体を置換しています。(ここまで書いて$4は別に要らない気がした……)

ここまでできれば、忘却の方も変えておきましょう。
こちらの方が簡潔なので、説明は省きます。
初期設定正規表現忘却(([^)]*))
置換後(Forget $1)
修正後正規表現(.*)忘却(([^)]*))(.*)
置換後(Voice 100XX)$1(Forget $2)$3
必要なら同様にして、速度・音程・音量なども変えておくといいでしょう。
ただしこれらは、優先度を0など低くしておいた方がいいと思います。

棒読みちゃんのタグ、正規表現編集(SE編)

棒読みちゃんでSEを鳴らすには
・「基本設定」「配信者向け機能」「タグ」「Sound/SoundW(再生)」の各種設定をする(特にフォルダ)
・設定したフォルダに音声ファイルを置く(wavが確実かな)
・音声ファイルを鳴らすタグを設定する
・実際にそのタグが含まれる本文が読み上げられる
というステップが必要になります。

一番シンプルなのは、タグの単純置換で次のように設定することです。
探索文字列	おめでとう!
置換後		(Sound おめでとう!)
これで「おめでとう!」というコメントは「(Sound おめでとう!)」に置換され、「おめでとう!.wav」が再生されます。

正規表現を使うといろいろと楽ができます。
探索文字列	
正規表現	(ぼちぼちね|おめでとう!|そうだね)
置換後		(Sound $1)
探索文字列を空白にすると、無条件で正規表現の検索がなされます。
「|」はいわゆるorみたいなもので、これで区切ればどれでも反応します。
$1は前項で説明した通り、正規表現で()で綴じたグループを再利用できます。

つまり、これで
「ぼちぼちね」「おめでとう!」「そうだね」といった単語が含まれていれば、それぞれ
「(Sound ぼちぼちね)」「(Sound おめでとう!)」「(Sound そうだね)」に置換されて
「ぼちぼちね.wav」「おめでとう!.wav」「そうだね.wav」が再生される事になります。
(ただこの場合、例えば「ぼちぼちねおめでとう!」というコメントが来た場合、SEになるのは「おめでとう!」だけになるので、分けて登録してもいいかもしれません)

探索文字列	ぶっ
正規表現	ぶっ(殺|ころ)して(おくれ)?
置換後		(Sound ぶっ殺しておくれ)(Volume 0)ぶっ殺しておくれぇ(Volume 100)
?をつけると、手前の部分があってもなくても反応するようになります。この場合(おくれ)。
つまりこの正規表現にマッチする本文は
「ぶっ殺して」「ぶっころして」「ぶっ殺しておくれ」「ぶっころしておくれ」の4通りになります。
一見、(おくれ)?は不要に見えるかもしれませんが、これがないとSE再生後に「おくれ」と読み上げられてしまいます。

SE再生後「(Volume 0)ぶっ殺しておくれぇ(Volume 100)」と付ける事で、音量ゼロでセリフを読み上げています。
これによって読み上げ時間に空白を作る事ができ、SEに続けて文章が入力されていた場合、スムーズに読まれます。
 ぶっ殺して!頼む!
とコメントされた場合、以下のような処理になります。
 ぶっ殺しておくれ.wavを再生しつつ、「ぶっ殺しておくれぇ」と読む分≒ぶっ殺しておくれ.wavの再生時間だけ読み上げが無音になり、SE再生が終わった頃に「頼む!」と読まれます。
先述の$1にも使えます。次の段落のように。

ここまで出来たら、SEと同時に書かれた文章を任意の声にするのも簡単です。
前項と同じ要領で、正規表現の前後に(.*)を書き足して、置換後にボイス指定と、前後分のグループ文章を書き足せばいいわけです。
探索文字列	
正規表現	(.*)(ぼちぼちね|おめでとう!|そうだね)(.*)
置換後		(Voice 100XX)$1(Sound $2)(Volume 0)$2(Volume 100)$3
これで任意のボイスで再生しつつ、SEを鳴らし、SE分の空白も作れるようになりました。
  これは難しそうだねっとり行こう
とコメントした場合、このように置換されることになります。
  (Voice 100XX)これは難し(Sound そうだね)(Volume 0)そうだね(Volume 100)っとり行こう

特定のコメント時に読み上げを変える

ここまでは前座でした。
ここからが作者の言いたい事になります。

語尾が「のだ」だった場合、ずんだもんが読み上げる

正規表現を使えば、この程度は簡単にできます。
探索文字列	のだ
正規表現	(.*)のだ$
置換後		(Voice 100XX)$1のだ
正規表現の最後にある$は、行末である事を意味します。
つまり「なのだよ」では反応せず、本当に最後が「のだ」で終わる場合だけ反応します。
100XXの部分はちゃんとずんだもんの棒読みIDにしてください。
これでも十分機能します。

しかし、このままでは「のだ!」とか「のだ?」とか「のだwwww」とか「のだー!」とかには反応できません。
なのでその辺に対応すると、次のような設定が考えられます。
探索文字列	のだ
正規表現	(.*)のだ(あ*|ぁ*|ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		(Voice 100XX)$1のだ$2$3
これで
 アホなのだぁあぁあぁーーー!?!?!wwwwww」
みたいなアホみたいなコメントでも、ずんだもんが反応するようになります。

正規表現の*は0回以上の繰り返しで、?は手前があってもなくてもいい、という意味になります。
(あ)*?は「あが0以上あるかも」という意味で、(あ|ぁ|ー|〜)*?は「あorぁorーor〜が0以上あるかも」という意味になります。
最終的に(あ*|ぁ*|ー*|〜*)*?は$2、(w*|?|!|、|。)*?は$3という形で置換後の文章にも残ります。
マッチングだけ考えれば(あ|ぁ|ー|〜)*?などでもよさそうですが、そうすると「あああああ」とか「wwwww」でも最後の1つしか反映されません。別にいいかもしれませんが。

という事で先ほどのアホみたいなコメントは、次のように変換されます。
  (Voice 100XX)アホなのだーーーwwwwww
(あ*|ぁ*|ー*|〜*)*?の部分で最終的に記憶してくれるのは最後のマッチングのみで、この場合は「ーーー」となります。「ぁあぁあぁ」とかは切り捨てられます。
(w*|?|!|、|。)*?部分も同様で、「!?!?!」は切り捨てられ、残るのは「wwwwww」だけです。
ここで (あ|ぁ|ー|〜)*?(w|?|!|、|。)*? としていた場合、それぞれ残るのは「ー」「w」だけとなります。
」に関しては、正規表現には含まれているので入っていても反応できますが、置換後にはまったく継承されていないので跡形なく消えます。
最後に$が入っているので、語尾以外ののだに反応する事はありません。
「のだ」以降の正規表現は$まで全部、0個でもいいので、シンプルに「アホなのだ」でも問題なく反応します。
じゃあ、教育してSE鳴らして語尾がのだだったらどうなるの
全部適用されます。
その結果誰が読むかというと、VOICEVOX(棒読み内)の場合は最後に指定した声になります。
適用の順番は、優先度が高い方からになります。

例えば次のようなコメントがあったとします。
 そうだね教育(バカ=アホ)なのだ
今までの設定を残していると、これにマッチングする正規表現は3つあります。
優先度は特にいじっていなかったとして、高い方からVoiceIDは01・02・03とします。
優先度		100
正規表現	(.*)教育(([^=]*)=([^)]*))(.*)
置換後		(Voice 10001)$1(Study $2=$3)$4
優先度		2
正規表現	(.*)のだ(あ*|ぁ*|ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		(Voice 10002)$1のだ$2$3
優先度		0
正規表現	(.*)(ぼちぼちね|おめでとう!|そうだね)(.*)
置換後		(Voice 10003)$1(Sound $2)(Volume 0)$2(Volume 100)$3
まず優先度100の教育が適用されます。
 (Voice 10001)そうだね(Study バカ=アホ)なのだ
次に優先度2の、のだが適用されます。
 (Voice 10002)(Voice 10001)そうだね(Study バカ=アホ)なのだ
最後に優先度0の、SEが適用されます。
 (Voice 10003)(Voice 10002)(Voice 10001)(Sound そうだね)(Volume 0)そうだね(Volume 100)(Study バカ=アホ)なのだ
結果、どうなるかというと
 声質変更を3回やった後、SEそうだねを流し、変更後のボイスで教育のアナウンスと「なのだ」が読まれる
結果的に声は、優先度が最も高い教育の10001になります。
ずんだもんに読ませたい場合は「のだ」の優先度を上げるといいでしょう。
ただ、教育より優先度が高い辞書登録は教育用のワードに悪影響を与える可能性があるので、あまり勧められません。(この「のだ」登録自体は影響ないと思いますが)

これらとは別に
検索文字列	めたん)
置換後		(Voice 10004)
などの個別の声色変更を設定していた場合、こちらの声になる可能性があります(わざわざ正規表現で(.*)などを使っていなければ)。
例えば先ほどのコメントの前に めたん) とついていた場合
 (Voice 10003)(Voice 10002)(Voice 10001)(Voice 10004)(Sound そうだね)(Volume 0)そうだね(Volume 100)(Study バカ=アホ)なのだ
となるので、最終的に読み上げるのはめたんになります。
めたん)の優先度がいくつであろうがこうなります。(また、単純置換で設定していた場合、適用順は正規表現より後になります)
これは他の正規表現は (.*) を利用しているので適用順の影響をモロに受けていたのに対して、めたん)は本文の一部を変更する、という変換対象の違いによるものです。

また、VOICEROIDの場合は原則、最初の声色が適用されて、後の声色コマンドはただの文章として読まれてしまいます。
この辺と格闘するのが次の項目となります。

関西弁っぽいコメントの場合、茜ちゃんが読み上げる

ここから話はVOICEROIDの話になります。
棒読みちゃんサイドでいじるのは原則、単語の方の正規表現となります。

VOICEROIDへの声質の受け渡しは、文頭にコマンドを入れる事で成り立っています。
  あかね)あおい)葵)茜)どうなるんや!?
と入力した場合、あかね)の声で
  あおい)葵)茜)どうなるんや!?
と読まれる事になります。
なので先ほどの、 (Voice 10003)(Voice 10002)(Voice 10001)(Voice 10004) みたいなダラダラした記述はなくす必要があります。

ここから、ふだんは葵ちゃん(標準語)に読ませてるけど、関西弁っぽい時だけ「あかね)」コマンドで読ませる事を目標にしていきます。

いきなりですが具体的に関西弁をどう判定するかは棚上げにして、上記の問題を先に解決します。
あかね)に関しては単純です。
関西弁判定があった時に文頭に「あかね)」を足して、最後にたまった「あかね)あかね)あかね)あかね)あかね)…」を1つにすればいいのです。
優先度		17
検索文字列	
正規表現	(あかね(\)|))){2,}
置換後		あかね)
優先度17は、後々設定する関西弁判定より下位です。
なので関西弁判定を済ませた後、たまったあかね)あかね)あかね)を処理できます。
(\)|))は、)か)ってこと。半角と全角、どちらでもいいという事です。
{2,}は2回以上の繰り返しを意味します。全部まとめて置換します。

しかし関西弁っぽいコメントであったとしても、本文中で他のボイスが指定されている場合はそちらを優先すべきです。
優先度		16
検索文字列	
正規表現	^あかね\)(.{1,6}?(\)|)))
置換後		$1
正規表現の ^あかね\) は、文頭に「あかね)」がある事を意味します。優先度的に、先ほどのあかね処理後になります。
.{1,6}?は、.=何か文字が、{1,6}?=1〜6あるという事。私が登録している声質コマンドは最長が6文字なので、最大6文字にしています(この場合の?は{}?特有で、最短マッチの意味になります)。
(.{1,6}?(\)|)))はつまり、コメントに「あおい)」などと書かれていた場合、その部分を意味します。(書かれてなければマッチしないので、この辞書は無視されます)
そして置換後は$1なので、この部分しか残らず、手前にある「あかね)」は消えます。
もし「あかね)あかね)」であった場合も、手前の「あかね)」だけ消えて後ろの「あかね)」が残るので問題ありません。

 あおい)ほんま関西弁やねん

こういうコメントがあった場合、関西弁判定されて
 あかね)あかね)あおい)ほんま関西弁やねん
となるかもしれませんが、優先度17によってあかね)は統一され、更にこの辞書によって
 あおい)関西弁やねん
と、一周して元に戻り、コメントの意図する通りにあおい)コマンドの声が出ます。

これで大体、どういう構造にするかは決まったので、あとは「あかね)」をつける関西弁基準を適当に作ればいいという事になります。
とりあえず私が設定したのは以下の通りです。
優先度はすべて22。別に多少上下しても構いませんが、ここで紹介する正規表現をすべて登録する場合、問題が起こる可能性があります。

検索文字列	
正規表現	(.*)(かりまっか|そない|せや|そや|ほな|けったい|あかん|アカン|ほんま|ホンマ|関西電気保安協会|さいなら|しゃーな|しゃあな|てまう|マクド$|マクド[^ナ]|おます|ほかさ|ほかし|ほかす|ほかせ|ほかそ|なんやて)(.*)
置換後		あかね)$1$2$3
このワードが入っていれば無条件で関西弁判定する一群。汎用化しづらい単語はとりあえず突っ込んでおく。網羅しづらく、たまに増えてる。

検索文字列	や
正規表現	(.*)(やな|やね|やで|やわ|やろ|やろか|ろや|ーや|やの|しやす|でやす|[一-龠]や|[ア-ン]や|んでや)(あ*|ぁ*|え*|ぇ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		あかね)$1$2$3$4$5
語尾付近に「や」がつくケース。
[一-龠]は漢字ほぼ全部、[ア-ン]はカタカナ全部を示す。
(あ*|ぁ*|え*|ぇ*)*?以降の部分は、語尾のブレのカバー。実質的に$2が判定部分。

検索文字列	ん
正規表現	(.*)(ねん|てん|へん|やん|んや|んで|んかい)(で|し|よ|な|の|け|か)?(あ*|ぁ*|い*|ぃ*|え*|ぇ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		あかね)$1$2$3$4$5$6
語尾付近に「ん」がつくケース。
$3の部分も重要な役割を果たしており、「ねんで」「へんの」「やんけ」などが含まれている。

検索文字列	わ
正規表現	(.*)(わな|んわ|いわ)(あ*|ぁ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		あかね)$1$2$3$4$5
語尾付近に「わ」がつくケース。

検索文字列	ちゃう
正規表現	(.*)(ちゃう)(で|し|よ|な|ね|の|ん)?(か)?(あ*|ぁ*|い*|ぃ*|え*|ぇ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?
置換後		あかね)$1$2$3$4$5$6$7
「ちゃう」がつくケース。実は語尾に限ってない。
「ちゃうんか」などに対応するため、$が多い。

検索文字列	な
正規表現	(.*)(がな|でんな|なはれ|かいな)(あ*|ぁ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?
置換後		あかね)$1$2$3$4$5$
「な」がつくケース。実は語尾に限ってない。単に忘れてるだけな気がするが、多分問題ない。

検索文字列	は
正規表現	(.*)(はる|はった|はったん)(で|し|よ|な|の|わ|か)?(あ*|ぁ*|い*|ぃ*|え*|ぇ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?
置換後		あかね)$1$2$3$4$5$6
語尾付近に「は」がつくケース。実質的に「はる」の変化形用。
$3必須なのがポイントで、「春」「張る」などとは区別している。「してはる」とかは区別困難なので放棄。
「はったんやなあー」とか「はらへん」とかは「や」「ん」等で対応しているので不要。

検索文字列	で
正規表現	(.*)(るで|いで|たで)(え*|ぇ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		あかね)$1$2$3$4$5
語尾付近に「で」がつくケース。これも語尾じゃないと誤爆する。
「んで」は「ん」にあるので不要。こういうのがややこしい。

検索文字列	でっ
正規表現	(.*)(でっ)(せ|しゃろ|か)(ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		あかね)$1$2$3$4$5
語尾付近に「でっ」がつくケース。$3必須なので誤爆しにくい。

検索文字列	まっ
正規表現	(.*)(まっ)(か|せ|しゃろ)(あ*|ぁ*|え*|ぇ*)*?(ー*|〜*)*?(w*|?|!|、|。)*?」?$
置換後		あかね)$1$2$3$4$5$6
語尾付近に「まっ」がつくケース。やはり$3必須なので誤爆しにくい。

これでそれなりに関西弁に反応するようになったと思います。
「してはる」の例のように、正規表現で判定するには限界を感じる関西弁も多いので、完全な対応は無理だと思います。

リスナーが自分の声を設定できるようにする(コテハン利用)

私はリスナー側としては、コテハン登録とかはどうでもよくて可能な限り登録しないんですが、自分の声を設定できるなら別です。
ですがそういう放送は見かけなかったので(最近はビームマンPなど、実現してる放送もありますね)、とても残念に思っていました。

この設定にはコテハン機能を利用するので、コテハン機能のあるコメントビューアでないと使えません。
具体的にはマルチコメントビューア、ニコニココメントビューアなどですね。
わんコメなどは実装の予定もないそうなので、使いにくいと思います。

わんコメなどのコテハン機能のないビューアでも、放送者が手動でリスナーに名前をつければ同じ事はできると思います。
が、リスナー側にしてみれば、一々そんな申告はしたくないと思いますので、あまり勧められないと思います。

ここでの目標は、次の例のような仕様にする事です。
・普通にコメントすると、葵ちゃんが読む
・語尾や関西弁に反応して声が変わる(前述)
・リスナーが「あかね)コテハン」などと登録していると、その声で読む
・コテハン登録していようが、コメントの中で「茜姉)」等と書けばその声を優先する
・ユーザー名そのものは読まない
設定したのはかなり前なので解説に抜けがあるかもしれませんが、設定例を示していきます。

コメントビューアの設定

まずこっちから始めます。
棒読みと連携して読み上げられるようにするまでの設定とかは流石に省略します。
また、これ以降は私が使っているマルチコメビュの例で記していきますが、ニコニココメビュでも同様の事はできたはずです。

重要なのは、コテハンに敬称をつけさせる事です。
コメントビューアから棒読みちゃんに送られるメッセージは、ユーザー名が存在する場合
 ユーザー名 敬称 本文
という順番になります。
つまり敬称は、ユーザー名と本文の区切りとして用いる事ができます。

そこで敬称に、名前や本文に使われる事はなさそうな文字を入れます。
例えばタイ語のอออとか入れておけば、まず使われる事はないと思います(マジで知らないのでタイ語なら普通かもしれないが多分大丈夫でしょう)。
そうすればこれを区切りとして使う事ができます。
この区切りは秘密にしておきましょう。

棒読みちゃんの設定

以降、อออだと文字化けしたので、区切り文字は 回回回 として記していきます。実際には変えてください。
マルチコメビュの場合、間にスペースが入るのでスペースごと変換します。

今回は「ユーザー名のうち、声指定は残す」「ユーザー名自体は消す」「区切りも消す」というのが目標となります。
多少非効率な気がしますが、分かりやすくケースごとにやっていきます。
4パターンのうちどれか1つの処理がされる仕組みです。

優先度		33
検索文字列	回回回
正規表現	^(.{1,6}?()|\)))(.*?)回回回 (.{1,6}?()|\)))(.*)
置換後		$4 $6
正規表現の^は文頭を表します。途中から見ない。
(.{1,6}?()|\)))は先ほどの茜ちゃんでも出てきたように、「ずんだ)」「あかね)」などのコマンド特定です。
コマンドと区切りの回回回 までの間は(.*?)で特定しておきます。
区切りの回回回 の直後、再び(.{1,6}?()|\)))を探し、残りは(.*)でまとめます。

この正規表現がひっかかるのはつまり、コテハンにもコメントにも声指定があるケースです。
なので区切り前の$1〜$3は無視して、本文内容だけにします。
$5は$4に含まれている()|\))の部分なので、要りません。
……これ、次の32に統合していい気がしますね。

優先度		32
検索文字列	回回回 
正規表現	^(.*?)回回回 (.{1,6}?()|\)))(.*)
置換後		$2 $4
本文中に声指定がある場合です。
これも先ほどと同じように、本文だけにしてしまいます。

優先度		31
検索文字列	回回回 
正規表現	^(.{1,6}?()|\)))(.*?)回回回 (.*)
置換後		$1 $4
名前に声指定がある場合です。
名前の声指定部分の$1と、本文の$4だけを出力します。
括弧だけの$2と、ユーザー名の$3は消します。

優先度に気を付けてください。
本文中に声指示がある場合は、優先度33や32で処理されているはずなので、名前の声指定を使っているわけです。
もし優先度34以上だった場合、名前の声で、本文の声指定が台本として読まれてしまいます。

優先度		30
検索文字列	回回回 
正規表現	^(.*?)回回回 
置換後		
何の指定もない場合、区切り以前を抹消します。
この場合は本文は検索すらせず、手を付けません。

どのケースでも、置換後には区切りが消えています。なので1つしか処理されません。
これで目標通りの声指示になったはずです。

あかね)あおい)あかね)あおい)とか入れてきた場合についてはノーケアです。ケアする必要はないでしょう。

VOICEROIDとVOICEVOXを併用するとどうなるのか

最初の方で何度か書いたように、VOICEROIDは棒読みちゃんの地声として使う事はできず、棒読みちゃんの機能と連動できるのはVOICEVOXの方です。
そして棒読みちゃんの声質を変える指示は、棒読みちゃんの機能です。
つまりVOICEROIDとVOICEVOX両方の声の指示をした場合、棒読みちゃん(VOICEVOX含む)の声を使う事になります。

とはいえ想定通りに、コテハンや本文の最初に声指示をしている分には目標通りの挙動になります。
ずんだ)回回回 あかね)これやったら茜ちゃんの声になるし
あかね)回回回 ずんだ)これだったらずんだもんの声になるのだ

ずんだ)回回回 この場合でもずんだもんの声になるんやで!
関西弁判定されていても茜ちゃんは出てこない(正常)。「あかね)」とか読まれたりもしないので安心。
あかね)回回回 しかしこの場合はなぜかずんだもんの声になるのだ!
「語尾がのだ」による声質変化指示が優先されてしまう。
ずんだ)回回回 あかね)さすがにこれは茜ちゃんの声になるのだ!
コメントの指示は優先される。

回回回 あかね)けどな、あかんのはずんだ)こういう場合は後半だけがずんだもんの声になるのだ
この場合、あかね部分は棒読みちゃんの地声になってしまう。しかも「あかね)」までしっかり読む。

こうして書き直してみると修正の余地がある気がしますが、とりあえずこれでコメントが面白くなればいいと思います!

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます