📝 この記事は forge.workstyle.tech に掲載した記事の転載です。
声の特徴をスライダーで決めて、元の音声を好きな声に変換するツール「Voice Canvas」を作りました。
誰もが手軽に好きな声を作れることを目指しています。
コードはMITライセンスのOSSとして公開しました。現在はβ版です。
GPUがなくても動きますが、CPUでの変換は1回に1〜数分かかります。
Voice Canvasでできること
Voice Canvasは、元の音声の話す内容・テンポ・抑揚を保ち、声質を変えるアプリです。声の高さや温かさなど、8つの特徴をスライダーで設定します。グラフの点を動かして調整することもできます。
元の音声は、文章をVOICEVOXに読ませる、その場でマイク録音する、音声ファイルを読み込む、の3通りです。手元に音声がなくても、同梱のサンプル音声を使えます。VOICEVOXは読み上げソフトです。Voice Canvasには含まれないため、読み上げを使う場合は別途インストールします。
声の設定を変えて変換すると、その結果は「テイク」として右側に並びます。テイクは変換結果のひとつです。設定の違いを見ながら再生できるので、同じ元の音声で声を聴き比べられます。仕上げでは、話すスピードやピッチの揺らぎを調整してWAVで保存できます。これらの調整は、再変換しなくても掛け直せるようにしました。
最初から使える声の材料「アンカー」は69人分です。アンカーとは、声づくりの手本になる実在の話者の音声です。スライダーの設定に近い人を最大4人まで自動で選び、声を混ぜます。自分で録音や音声ファイルを加えることもできます。追加できるのは8秒以上の音声です。
そのほか、素材ツールでは動画から音声を取り出したり、BGMや雑音を除いたり、音声をカット・結合したりできます。素材ツールの機能は、アンカーに登録する音声を整えるときにも使えます。
声の材料を混ぜる仕組み
「年齢感」や「温かさ」のスライダーを動かすと、Voice Canvasはその値に近いアンカーを探しにいく仕組みです。年齢感は話者の年代ラベル、性別は重みを2倍にして近さを計算し、上位のアンカーを最大4人選びます。
次に、選んだ話者のベクトルを混ぜた値と、それぞれの12秒の音声を手本にしてSeed-VCが声質を変換します。最後に話すスピードとピッチの揺らぎを調整します。調整は変換をやり直さずに行えます。出力される音声はWAVです。
実在の話者の声を使うため、材料の扱いには気を配りました。利用条件が明確なCommon Voice日本語の45人分と、JVNV(日本語感情音声コーパス)の4人×6感情、計24人分を同梱しています。前者はCC0、後者はCC BY-SA 4.0です。JVNVは出典表示が必要です。
作るときに大変だったこと、工夫したこと
スライダーの値を、どう声にするか
最初の壁は、スライダーの値を実際の変換にどう結びつけるか、でした。値をそのまま音声へ反映できるわけではありません。そこで、声の特徴を持つアンカーを材料にする方式にしました。
設定に近いアンカーを自動で選び、最大4人分を混ぜてからSeed-VCに渡します。利用者が材料を一人ずつ選ばなくても、スライダーを動かして変換すれば違いを試せます。アンカーを自分で増やせるので、手元の材料しだいで、作れる声の幅も広がるはずです。
「何種類の声が作れるか」は数値では測っていません。スライダーは連続した値を取りますが、変換結果の似かたなどを記事に出せる形で評価したわけではありません。まずは実際に設定を変え、テイクを並べて聴き比べる使い方にしています。
CPUでも動く。そのぶん、変換には時間がかかる
GPUがなくても使えるようにしています。ただし、CPUでの変換は軽くありません。開発環境で測ったところ、標準モデル・既定設定では3.5秒の音声に約2分、10秒の音声に約3分半かかりました。スレッド数を増やしても速くなりませんでした。
ステップ数を減らす設定では、2.5秒の音声が約70秒でした。ただし、品質への影響は測っていません。この記事の手順では、まず既定設定で試します。最初の変換を始めたら、右側に経過時間が表示されるので、そのまま待ってください。CPUでも動くことと、すぐに結果が出ることは別です。待ち時間をあらかじめ伝えることも、使い始める人への案内として必要だと考えました。
アンカーの登録条件を見直す
アンカーを追加するときは、音声の長さや録音品質などを確認します。当初は15秒以上であることや品質の条件を厳しく見て、条件に届かない音声を不採用にしていました。しかし、このままでは追加の入口が狭くなります。
そこで、不採用にするのは「8秒未満」と「話し声が見つからない」場合だけにしました。一人の声か、録音品質は目安に届かなくても登録し、「注意」を表示します。注意の理由を見て、必要なら素材ツールでBGMや雑音を除けます。利用者が素材を確認しながら判断できるよう、門前払いになる条件を絞りました。
WindowsからVOICEVOXへつながらなかった
Windowsでも動かせるよう、Windows 11のWSL2(Windows上でLinuxを動かす仕組み)で確認しました。最初は、WSL内のVoice CanvasからWindows側のVOICEVOXにつながりませんでした。WSLの既定ネットワークでは、WSL内からWindowsの 127.0.0.1 に届かないためです。
READMEにWSLのネットワークをミラーモードにする手順を追加しました。Windowsのユーザーフォルダーにある .wslconfig に設定を書き、WSLを再起動すると接続できます。後の手順で設定例を示します。VOICEVOXを使わず、サンプル音声や録音、音声ファイルから始めてもかまいません。
インストール直後の迷いを減らす
起動しても、声の材料や元の音声がなければ最初の変換へ進めません。そこで、アンカー69人分を初回起動時に自動展開し、サンプル音声も入れました。VOICEVOXがない場合は、録音・ファイル・サンプル音声を使う案内が表示されます。
画面の配置は3案を比べました。元の音声、声の設定、新しい声を左から並べる3列の作業台にしています。次に何をすればよいかを、画面の流れから追えるようにしました。
開発の作業の多くはClaude CodeやCodexに任せています。READMEとマニュアルの初稿はCodexが作り、画面の文言やマニュアルはyomiyasuで推敲しました。私は仕様や素材の条件を決め、動作を確認しながらまとめています。
インストールして、最初の声を作る
ここからは、アプリを起動してサンプル音声を変換するまでを案内します。まずは読み上げソフトを使わずにサンプル音声から始めれば、VOICEVOXの準備は後回しで大丈夫です。
先に知っておくこと
動作確認済みの環境はMac・Linuxと、Windows 11のWSL2(Ubuntu 22.04)です。WindowsのPowerShellではREADMEどおりに動きません。Windowsの場合は、WSL2のUbuntuを開いて、その中でコマンドを実行してください。
必要なのはPython 3.10、Node.js 20以上、gitです。Pythonの venv は、このアプリ用に依存パッケージを分けて入れる仕組みです。初回起動時にはモデル約3.2GBを自動取得します。BGM除去を使う場合は約80MBが追加で必要です。ダウンロードが終わるまでネットワーク接続を保ってください。
Mac・Linuxで起動する
ターミナルを開き、次のコマンドでリポジトリを取得します。
git clone https://github.com/maccotaro/voice-canvas.git voice-canvas && cd voice-canvas
確認:ターミナルの作業場所が voice-canvas になっていれば準備できています。
続いて、Seed-VC(声質変換の仕組み)を取得してください。
git clone https://github.com/Plachtaa/seed-vc external/seed-vc
確認:external/seed-vc が作られ、取得処理が完了すればOKです。
Python 3.10で仮想環境を作ります。
python3.10 -m venv .venv-seedvc
確認:エラーが出ずにコマンドが終わればOKです。venv は、このプロジェクト用のPython環境を指します。
必要なパッケージをインストールします。
.venv-seedvc/bin/pip install -r service/voice-canva/requirements.txt
確認:インストールの最後まで進み、コマンドが終了すればOKです。時間がかかる場合があります。
推論サービスを起動します。推論サービスは、音声変換の計算を行う部分です。
bash scripts/start-backend.sh
確認:初回はモデルの取得が始まります。完了後、別のターミナルから http://127.0.0.1:8770/health を開いて確認します。
別のターミナルを開き、同じリポジトリのフォルダーへ移動してWeb画面を起動してください。
bash scripts/start-web.sh
確認:起動メッセージが表示されたらブラウザーで http://localhost:3010 を開いてください。Voice Canvasの画面が表示されれば起動完了です。
Windows 11ではWSL2で起動する
WSL2は、Windows上でUbuntuなどのLinux環境を動かす仕組みです。Windows 11とWSL2(Ubuntu 22.04)で動作を確認しています。まずUbuntuを開いてください。以下のコマンドはUbuntuのターミナルに入力します。
必要なパッケージをインストールします。
sudo apt update
sudo apt install -y git build-essential python3.10-venv python3.10-dev
確認:インストールが終わり、プロンプトに戻ればOKです。python3.10-venv は仮想環境に、build-essential と python3.10-dev は一部パッケージのビルドに使います。
Node.js 20以上もWSL内に用意します。Windows側のNode.jsが混ざると起動できないことがあるため、どちらを使っているか確かめておきましょう。
which node
確認:表示されたパスがWSL内のLinuxのものならOKです。Windows側のパスが出たら、WSL内のNode.jsを使う設定にしてください。
以降のリポジトリ取得、Seed-VC取得、仮想環境の作成、パッケージのインストール、バックエンドとWebの起動は、上のMac・Linuxのコマンドと同じです。すべてUbuntuのターミナルで実行します。
文章を読み上げるためにWindows版VOICEVOXを使う場合は、WSL側のネットワーク設定も必要です。Windowsのユーザーフォルダーに .wslconfig を作成し、次を記載します。
[wsl2]
networkingMode=mirrored
PowerShellでWSLを停止してから、Ubuntuを開き直します。
wsl --shutdown
確認:WSL内で起動したVoice CanvasからVOICEVOXに接続できればOKです。wsl --shutdown は起動中のWSLの作業も止めるため、先に保存してください。接続できない場合は、アプリの「VOICEVOXが見つかりません」の案内にある「つなぐ」を押します。VOICEVOXなしで進める場合は、サンプル音声を使えます。
最初のテイクを作る
ブラウザーで http://localhost:3010 を開いてください。最初は同梱アンカーが自動で展開されます。声の設定に使えるアンカーが69人分あれば準備できています。
まず「元の音声」からサンプル音声を選んでください。手元に録音がある場合は、音声ファイルを入れてもかまいません。文章を読み上げるときはVOICEVOXを起動し、文章を入力して「読み上げる」を押します。
確認:左側の音声欄が「OK」になれば、元の音声を用意できています。「未設定」のままなら、サンプル音声を選び直してください。
中央の声の設定で、8つの特徴から気になるスライダーを動かします。最初はひとつだけ変えてみると、設定と結果を見比べやすくなります。
確認:スライダーとレーダーチャートが連動して動けばOKです。声の設定は、変換前に何度でも調整できます。
「この声に変換する」を押します。
確認:右側の「新しい声」に経過時間が表示され、処理が終わってテイクが1つ増えれば成功です。CPUでは数分かかることがあります。画面を閉じずに待ってください。
テイクを選んで再生します。別のスライダー値で再度変換すると、結果がもうひとつ並びます。
確認:右側に複数のテイクが並び、それぞれを再生できれば聴き比べは完了です。気に入ったテイクを選び、「仕上げて書き出す」からWAVで保存できます。
困ったとき
変換ボタンが押せない場合は、左の元の音声欄を見てください。「未設定」なら、音声がまだ入っていません。文章や話者を変更したときも前の読み上げ音声は使えなくなるため、もう一度「読み上げる」を押します。
「アンカーが足りません」と表示された場合、使用中のアンカーが3人未満です。アンカー管理で外したアンカーを戻すか、新しい音声を追加してください。
VOICEVOXが見つからない場合は、VOICEVOXを開いたまま「つなぐ」を押します。WindowsのWSL2でVoice Canvasを動かしている場合は、上の .wslconfig の設定を確認してください。読み上げを使わずに続ける場合は、録音・音声ファイル・サンプル音声を選べます。
マイクを使えない場合は、ブラウザーのマイク使用を許可してください。動画を読み込めない場合は、ブラウザーが再生できる形式かを確認します。素材トレイの音声はページを移っても残りますが、再読み込みすると消えます。残したい音声はカードから保存してください。
操作の詳しい説明は、アプリ右上の「使い方」から開けるマニュアルにもあります。
ライセンスと素材について
Voice CanvasのコードはMITライセンスです。Seed-VCはGPL-3.0のためリポジトリには同梱せず、実行時に取得します。Seed-VCを含むDockerイメージを配布する場合は、GPL-3.0に従ってください。モデルの重みもリポジトリには含めず、初回に自動取得します。
同梱アンカーはCommon VoiceとJVNVから用意しました。JVNVの素材や、それを使った試聴音声を改変・再配布するときはCC BY-SA 4.0に従い、出典を表示してください。Common Voiceについては、話者の身元を特定しないでください。VOICEVOXを元の音声に使った場合は、使用したキャラクターのクレジットを表記し、各キャラクターの利用規約を確認してください。
声を追加する場合は、本人の同意がある録音など、使ってよい音声を登録してください。再合成できる分析データは保存せず、12秒の参照音声と話者ベクトル、統計値を扱います。
Voice Canvasはβ版です。使い方とライセンスの詳細は、リポジトリのREADMEとマニュアルをご覧ください。
リポジトリ: https://github.com/maccotaro/voice-canvas


