Ubuntu Weekly Recipe

第886回AIボイスチェンジャーであるSeed-VCで自分の声を変えてみよう

生成AIでも人気のある機能のひとつが「音声合成」です。今回はゼロショットで(つまり事前学習の必要なく)任意の参照音声に変換できる「Seed-VC」をUbuntuで動かしてみましょう。

図1 Web UIやCLIから、マイクやアップロードしたファイルの音声データを、別の声に置き換えてくれる

Seed-VCについて

AIを利用した音声関係では、特に活発に開発が進んでいるのが音声認識と、今回紹介する音声合成です。どちらも十分に実用的な性能になっており、すでに製品化されているサービス等を使っている読者も多いでしょう。

第877回のリアルタイム文字起こしをローカルマシンで実現できるWhisperLiveKitを使ってみようで紹介した、WhisperLiveKitもそんなツールのひとつです。WhisperLiveKitでは入力された音声を認識し、文字情報へ起こすことに特化したツールでした。文字に起こしてしまえばあとは翻訳したり、字幕にしたり、別の音声で読み上げたりとさまざまな活用が考えられます[1]

今回紹介するSeed-VCは、音声合成を目的としたツールです。ある入力された音声(Source Audio)に対して、参考となる音声(Reference Audio)をベースに変換し、別の人の声として音声データを生成します。単純に言うとボイスチェンジャーです。

ボイスチェンジャーのツールはすでに多数存在しますが、Seed-VCは次の特徴を持っています。

  • 事前の学習をせずとも音声変換できること
  • GPUを使えばリアルタイムに近い速度で変換できること
  • 音声データから直接変換できること
  • ローカルで動かせること
  • CLIのツールが充実していること
  • オープンソースライセンスで提供されていること

いずれもほかの音声合成ソフトウェアでも備えている特徴ではありますが、すべてを備えたものとなると、それなりに限定されます。しかも変換品質も高いため、昨年に登場した当初も話題になりました。登場してからそこそこ時間が経ってしまってはいますが、今でも十分に使えるツールですので、Ubuntuで使う方法を改めて紹介しましょう。

ちなみにデモページが用意されています。まずは使ってみたいのであれば、インストールの前に触れてみると良いでしょう。

Seed-VCのインストール

Seed-VCはPythonソフトウェアですので、その流儀に従ってインストールすることになります。また、CPUだけで動かすには遅いためNVIDIA製のGPUも必要です。VRAMサイズについては明記されていませんが、少なくとも8GiB程度のVRAMがあれば問題なく動作しました。

NVIDIAのドライバーがインストール済みであるという前提で、追加で以下のソフトウェアをインストールしておきましょう。

$ sudo apt install nvidia-cuda-toolkit ffmpeg build-essential python3-dev git

nvidia-cuda-toolkitはSeed-VCがCUDAを使うために必要です。ffmpegは音声変換のためにインストールしていますが、Web UIを使いたいだけなら不要な可能性があります。build-essentialとpython3-devは、一部のPythonパッケージをインストールする際に必要です。gitは後ほど使用します。

Seed-VCは「Python 3.10」での動作確認が行われています。しかしながらPython 3.10が採用されているのはUbuntu 22.04 LTSですし、より新しいUbuntuではより新しいPythonが採用されています。今回はUbuntu 25.10の上にuvコマンドを使ってPython 3.10の環境を構築することにしましょう。なお、UbuntuにおけるPythonの環境構築方法については、第850回のUbuntuにおけるシステムPythonと、Pythonの仮想環境を使い分ける方法も参考にしてください。

uvコマンドのインストール自体は簡単で、次のコマンドを実行するだけです。

$ curl -LsSf https://astral.sh/uv/install.sh | sh
downloading uv 0.9.7 x86_64-unknown-linux-gnu
no checksums to verify
installing to /home/ubuntu/.local/bin
  uv
  uvx
everything's installed!

$ file ~/.local/bin/uv
/home/ubuntu/.local/bin/uv: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=ed2da6f0b5b8218a687ae0de0527beda96a9b077, stripped

上記により~/.local/bin/以下にuvコマンドがインストールされました。ただし、~/.local/bin/は初期状態だと実行パスが通っていません。つまり普通にuvと実行しても、コマンドが見つからないエラーになります。

実はUbuntuでログイン時に評価される~/.profileには、次の設定が存在します。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

ログイン時に~/.local/bin/が存在すれば、自動的に実行パスを通してくれるのです。よってuvをインストールしたあとは、ログインしなおすだけで実行パスが通ってくれます。もしログアウトするのが面倒であれば、. ~/.profileを実行して、再読み込みさせると良いでしょう。

次にSeed-VCのソースコードを取得して、Python 3.10用の仮想環境を構築します。

$ git clone https://github.com/Plachtaa/seed-vc.git
$ cd seed-vc

$ uv python install 3.10
Installed Python 3.10.19 in 808ms
 + cpython-3.10.19-linux-x86_64-gnu (python3.10)

$ uv python pin 3.10
Pinned `.python-version` to `3.10`

$ uv venv
Using CPython 3.10.19
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate

uv python installでPython 3.10のバイナリを指定してインストールできます。uv pyton pinで、このPython 3.10を使うように指定しています。ちなみにインストールされているPythonのバージョンはuv python listで確認できます。Python 3.10が~/.local/share/uv/python以下にインストールされていることがわかるでしょう。

uv venvでSeed-VC用の環境を構築しています。従来のvenv<venv dir>bin/activateを使って環境に入る手順が必要になりますが、uv venvで構築しておけば、あとはuvコマンド経由で何かを利用する限り、自動的にこのactivateを肩代わりしてくれるので便利です。

さて、Seed-VCに必要なPythonパッケージを追加することにしましょう。本家の手順ではpip -r install requirements.txtを実行することになっていますが、これもuvコマンドで肩代わりできます[2]

実際に実行してみましょう。

$ uv pip install -r requirements.txt
error: Expected `--hash`, found `"--pre"` at requirements.txt:1:7
$ head -1 requirements.txt
torch --pre --index-url https://download.pytorch.org/whl/nightly/cu126

どうやら一行目でエラーになってしまうようです。本来pipの(requirements.txtの)書式としては、--pre--index-urlをこのように書くことはできません。できないはずなのですが、通常のpipはこれをエラーとすることなく処理してしまいます。それに対してuvはより厳密にチェックしているため、上記記述だとエラーになってしまうようです。

対応方法としていくつかの手順が存在するものの、今回は「PyTorch関連パッケージは、PyTorchのリポジトリにあるCUDA版をインストールしたい」ということなので、ここだけ手作業で対応します。PyTorch以外はrequirements.txtからインストールします。

$ uv pip install --prerelease allow --index-url https://download.pytorch.org/whl/nightly/cu126 torch torchvision torchaudio
$ uv pip show torch | grep Version
Version: 2.10.0.dev20251102+cu126

$ sed -i 's/^torch/#torch/' requirements.txt
$ uv pip install -r requirements.txt

1行目でPyTorch関連パッケージを個別にインストールしています。uv pip show torchでバージョンが「cuXXX」になっていたらCUDA版のバージョンになっていることがわかります。

それ以外のパッケージはrequirements.txtからインストールしたいため、torchで始まるパッケージをコメントアウトした上でuv pip installでインストールします。

これで準備完了です。

Seed-VCのWeb UIを動かしてみる

さて、Web UIを起動してみましょう。Seed-VCには用途に応じて複数のWeb UIスクリプトが用意されています。

  • app_vc.py:V1ベースで音声を変換するWeb UI
  • app_svc.py:V1ベースでの歌声に特化して音声を変換するWeb UI
  • app_vc_v2.py:V2ベースで音声を変換するWeb UI
  • app.py:上記をすべて試せるWeb UI

README.mdによるとV1はよりリアルタイム性にすぐれており、V2はより元の話者の特徴を抑えるのに適しているようです。

今回は事前学習せずに使えれば良いため、app.pyを使うことにします。ちなみにapp.pyのみは事前学習データなどをコマンドラインオプションから渡せません。

uvコマンドでは、次の方法でapp.pyを起動できます。

$ uv run app.py --enable-v2 --enable-v1
Loading V2 models...
(中略)
Loading weights from nvidia/bigvgan_v2_22khz_80band_256x
Creating V1 interface...
* Running on local URL:  http://127.0.0.1:7860

最初の実行時はHugginge Faceから数GiB程度のモデルデータをダウンロードしますので注意してください。VRAMは起動しただけで2.4GiB程度を使用しました。

画面にも表示されているように、http://127.0.0.1:7860にアクセスしましょう。

図2 変換元・参照元の音声データをマイクから入力、もしくはファイルアップロードし、Submitボタンを押せば変換されるというシンプルなUI

Source Audioが変換したい音声です。基本的には自分の声をマイクから入力するか、録音済みの音声ファイルをアップロードします。Reference Audioが変換にあたって参照したい音声です。1秒から25秒までの音声データを渡すことになります。25秒以上のデータをアップロードしても問題ありませんが、変換時は25秒までしか使われません。音声を切り出すUIも用意されていますので、必要に応じて調整しましょう。

設定パラメーターはいくつかありますが、最初のうちは初期値で問題ないでしょう。参考までにV2のパラメーターは次のとおりです。

  • Diffusion Steps:ステップ数を増やすほど品質は向上するが遅くなる。30から50くらいが推奨
  • Length Adjust:音声の速度を調整する、小さいとゆっくりになり、大きいと早口になる
  • Intelligibility CFG Rate:発音の明瞭さを調整する
  • Similarity CFG Rate:話し方を参照音声にどこまで近づけるか調整する
  • Top-p:出力時の多様性を調整する
  • Temperature:出力のランダムさを調整する
  • Repetition Penalty:音の繰り返しを抑制する
  • convert style/emotion/accent:アクセントや感情の変化も適用する
  • anonymization only:参照音声を無視して、平均的な声に変換する

「Diffusion Steps」「Similarity CFG Rate」はわかりやすく変化します。⁠convert sytle」は手元だとあまり期待通りの結果になりませんでしたが、これは自分の声か使った文章の問題の可能性もあります。

準備ができたら「Submit」ボタンを押してください。すぐに変換が始まります。

図3 スクリーンショットだとメインでCPUを表示しており、いくつかのコアで使用量が増えているのは主に変換の事前準備等が該当する。サイドペインの一番下が、NVIDIAのGPUでそちらは変換開始からずっと使用率が100%となっている。一個上は内蔵GPUで、こちらはただの画面の描画を行っているだけだ

GPUを使う場合は、おおよそリアルタイムで変換してくれます。つまり1分間の音声データを変換するなら1分間ぐらい必要です。

図4 変換結果が画面に表示された

出力先は2種類あります。

  • Stream Output Audio:最初の30秒を変換したら表示される
  • Full Output Audio:すべての音声を変換したら表示される

Streamのほうは30秒ぐらい変換した時点で再生ボタンが表示されます。その状態で再生すると、変換が進むごとに音声チャンクが末尾へと追加されるので、変換の完了を待つことなく確認が可能です。どちらも変換が完了したら、右上のボタンから変換後の音声ファイルをダウンロードできます。

たとえば今回だと次のようなマシンを使って変換してみました。

Machine MINISFORUM MS-A2
CPU AMD Ryzen 9 9955HX 16C/32T
Memory DDR5-5600 128GiB
GPU RTX A1000 8GiB
OS Ubuntu 25.10 LTS

参照音声として、⁠つくよみちゃん」が無料公開しているつくよみちゃんコーパス(CV.夢前黎)を使っています。

このコーパスファイルにはzipでアーカイブされた多数のwavファイルが保存されています。そこで、1ファイルのみを取り出し「Reference Audio」にアップロードしました。

$ unzip -p tyc-corpus1.zip \
  'つくよみちゃんコーパス Vol.1 声優統計コーパス(JVSコーパス準拠)/01 WAV(収録時の音量のまま)/VOICEACTRESS100_001.wav'
  > tsukuyomi01.wav

この状態で変換した結果が次のとおりです。

seed_sim1.mp3:Similarity CFG Rateを1にした例
seed_ds100.mp3:Diffusion Stepsを100まで増やした例
seed_convert_ds50_sim1.mp3:convert styleにチェックをいれて、Diffusion Stepsを50、Similarity CFG Rateを1にした例
seed_anon.mp3:anonymization onlyにチェックをいれた例

最初の2ファイルは、元データの訛り、つっかえ、読み間違いをそのまま維持しつつ変換されていることがわかるでしょう。3番目はあまりうまく変換できませんでした。元データからして抑揚のない喋り方だったのでそのあたりも影響している可能性があります。最後はどっかで聞いたことのあるおっさんの声になっています。雑音が多いのはマイクの問題です。

リアルタイム変換ツールを使ってみる

Web UIでは「アップロードした音声データを変換する」ため、⁠リアルタイム変換」とは言えない作りになっていました。一般的に「ボイスチェンジャー」と言えば、そうではなくマイクに入力したデータをそのまま変換する様子を想像するでしょう。

Seed VCにはそれ用のGUIアプリケーションの実装も用意されています。ただしこれを使うためにはサウンドデバイスをコントロールするライブラリが必要です。Ubuntuの場合は次のパッケージをあらかじめインストールしてください。

$ sudo apt install libportaudio2

GUIアプリケーションを起動するには、次のように実行します。

$ uv run real-time-gui.py
図5 やぼったい感じのGUIアプリケーションが起動した

使い方はWeb UIと大差ありません。⁠Load reference audio」に参照元となる音声ファイルを指定します。⁠Sound Device」では入力マイクと、出力デバイスをそれぞれ指定します。ちなみに「Use device sampling rate」を指定しないとデバイスによってはうまく動かないことがありますので、注意してください。

あとは「Start Voice Conversion」ボタンを押してから、マイクに向かって何か喋るだけです。1秒前後ぐらい遅れて、変換された声が聞こえてくることでしょう。

おすすめ記事

記事・ニュース一覧