コマンドプロンプトからVOICEROIDを喋らせる

2021/12/08に公開

概要

VOICEROIDって良いですよね。
Discordの会話でぜひ使いたい!でも喋らせるたびに再生ボタンをいちいちクリックするのは面倒くさい...。

そこで、コマンドプロンプトからテキストを入力してエンターを押すだけでVOICEROIDに喋らせられるプログラムを書いてみました。

https://youtu.be/lLiiS1caMhM

仕組み

プログラム側からは SeikaSay2 コマンド経由で AssistantSeika へメッセージを送り、AssistantSeika を通じて VOICEROID を喋らせます。そのため、予め AssistantSeika のインストールが必要になります。

https://hgotoh.jp/wiki/doku.php/documents/voiceroid/assistantseika/interface/cli/cli-002

ディレクトリ構成

AssistantSeika フォルダにある「SeikaSay2」フォルダをそのまま入れておきます。プログラム自体は vc.js に書きました。

/
| - SeikaSay2
| - vc.js

コード

node.js で雑に実装しました。
やってることは seikasay2 コマンドにテキストを渡しているだけです。

const readline = require('readline');

function question(question) {
    const readlineInterface = readline.createInterface({
      input: process.stdin,
      output: process.stdout
    });
    return new Promise((resolve) => {
      readlineInterface.question(question, (answer) => {
        resolve(answer);
        readlineInterface.close();
      });
    });
};

async function inputMessage() {
    return await question('> ')
}

function speak(talkMessage) {
    // cidはキャラクターによって異なります
    const command = process.cwd() + '/SeikaSay2/seikasay2 -cid 2004 -t ' + talkMessage;
    require('child_process').exec(command, { encoding: 'Shift_JIS' }, (err, stdout, stderr) => {})
}

(async () => {
    while (true) {
        const message = await inputMessage();
        speak(message);;
    }
})();

使い方

  • コマンドプロンプトから本フォルダまで移動
  • node vc.js で起動
  • テキストを入力してエンターで発声
  • ctrl + c でプログラム終了

Discord等で使うには

VB CABEL のような仮想オーディオデバイスに音声を流して、それを Discord のマイク入力にすることで利用することが出来ます。

https://vb-audio.com/Cable/

ちなみに VB-Audio VoiceMeeter banana を使うと自分の声と VOICEROID の声を同時に流すことも出来ますが、VoiceMeeter banana の解説は量が多いのでググってみて下さい。

https://vb-audio.com/Voicemeeter/banana.htm

まとめ

楽しかったです。

Discussion