SoLA2-TechBlog

退屈な作業はプログラムに任せましょう!日々の作業に少し工夫を足すだけであなたの時間はもっとクリエイティブになる。

nicotalkを自分用にカスタマイズしてみよう! 【Part 2】

追加機能②「プレビュー機能の追加」

前回までの記事で、nicotalkの前半部分のカスタマイズを実施してきました。この記事では後半部分「プレビュー機能」の追加をしていきたいと思います。プレビュー機能と言っても色々な種類があると思います。取り急ぎ必要になるのは、台詞をその場でVOICEROIDに読んでもらう機能ですね。

音声プレビュー機能を作る

実はろくな技術検証もせずに作ります!なんて記事にしてしまったので、大いに後悔しています。というのもVOICEROIDを外部アプリケーションから操作することは割りと難しいのです。詳しくはVOICEROID+でSkypeメッセージ喋らせる(1) - 謎言語使いの徒然を参照してください。

という訳で作るのは諦めます!

でも音声プレビュー機能が必要なことに変わりは無いので、別の手段を用いて用意しましょう。上記でも述べたとおり、VOICEROIDを外部アプリケーションから操作する事は割りと難しいのです。ですが割りと不可能でもないのです。

私達の考える事は、大体先人の猛者達が挑戦してたりします。その全てが完全な形で見つかる事は無くとも、寄せ集め、組み合わせることでなんらかのヒントが得られる事もあります!

現に、ちょっと調べれば・・・VOICEROID+EXをコマンドラインからしゃべらせる [努力したWiki]のような素晴らしい試みをしているサイトが見つかるのです。こちらで開発されたアプリケーションは、コマンドラインからVOICEROIDの基本的な操作を可能にするそうです。

であれば、我々が作るべきは、エクセル(VBA)からコマンドラインを経由してこのアプリケーションを利用する部分だけで良い訳です。これらの仕組みを1から構築するとなると相当時間が必要になったでしょう。いやぁ非常に助かりました。

では!実際に作ってみましょうか。先ほどのサイトを確認すると、どうやら引数としてキャラ名(大文字のローマ字)と台詞を一緒に渡してあげることで、音声が返ってくるそうです。各キャラクタのサンプルコードがありますね。とても親切設計です。

ちなみに私が所有しているVOICEROIDは茜ちゃんと葵ちゃんなので、動作未検証だそうです。恐るおそるサンプルのコマンドを実行すると・・・正常に音声が返ってきました。素晴らしい。これで音声プレビューは9割完成したと言っていいでしょう。

ではExcelからこのソフトを呼び出すスクリプトを書いていきます。
ついでに現在選択中の行にある台詞及び台詞主名(大文字ローマ字)を渡すようにしました。台詞主名の大文字ローマ字に関しては後ほど台詞シートにて追加していきます。

Public Sub previewVoice() '(Ctrl&Shift&V)
    Dim objShell
    Set objShell = CreateObject("WScript.Shell")
    Dim activeRow As Integer
    activeRow = ActiveCell.Row
    
    Dim tgtText As String
    Dim tgtActor As String
    Dim cmdStr As String
    tgtText = ActiveSheet.Cells(activeRow, 7).Value
    tgtActor = ActiveSheet.Cells(activeRow, 17).Value
    cmdStr = "★\echoseika.exe -cv " & tgtActor & " " & tgtText '★にはパスを記入
    
    objShell.Run cmdStr, 0, True
    MsgBox tgtActor & " " & tgtText
End Sub

こんな感じです。エラー処理とかまったく考えていませんがとりあえず処理が終わったら、台詞の内容がダイアログに表示されるようにしました。またExcel機能で今書いたスクリプトを実行するショートカットを「Ctrl+Shift+V」に割り当てました。

では先ほど後回しにした台詞主名の大文字ローマ字についてですが、あまりいい案が思いつかないので力技です。まずは「調整シート」の適当なところにキャラ名と台詞主(大文字ローマ字)が対応するように表を作ります。
f:id:gootor3030:20170806230601p:plain

続いて「台詞シート」のQ列に、キャラ名(E列)に対応する台詞主(大文字ローマ字)を表示するようにします。
例)IF(ISERROR(VLOOKUP(E5,調整シート!$S$3:$T$4,2,FALSE)),"",VLOOKUP(E5,調整シート!$S$3:$T$4,2,FALSE))

これで準備は完了です。後は対応するVOICEROIDをあらかじめ起動し、音声プレビューを聞きたい行を選択して「Ctrl+Shift+V」を押すと、幸せになれます。おめでとう私、ありがとう私。

f:id:gootor3030:20170806231459p:plain

とはいえ改善の余地はまだまだあります。例えば、音声効果パラメータはプレビューに適応されないのです。こちらはもう少し時間のあるときにどうにかしたいとは思っていますが、台詞が想定した読み方で読まれるのかを確認するためには必要充分な機能になったので一旦完成とします。

次回に続く

プレビュー機能ですが、もう一つ作りたいと思います。「簡易プレビュー」機能です。動画編集ソフトを使ったことがある方にとっては、「範囲選択型の事前レンダリング機能」と言い換えた方がイメージ付き易いかもしれません。この機能は、音声効果パラメータ及び「間」も再現された状態で確認出来るようにします。

私にとっては、今後かなりの頻度で利用することになる機能なのでお楽しみに!