🙀

Google Colab + VOICEVOXで音声自動生成を詊す

に公開

お久しぶりです前回は山田孝匘ずムロツペシの顔を孊習なしで分類できないか詊しおいたしたね。
https://zenn.dev/opamp/articles/73126cf8c0135d

今回はVOICEVOXず呌ばれる音声自動生成ツヌルで遊んでいきたいず思いたす玆䜙曲折も䜵せおご芧ください・・・

事の経緯

お昌䌑みにTwitterをしおいるず、こんなツむヌトが目に。
https://twitter.com/witch_kazumin/status/1517595023503917056

・・・これは遊ぶしかない業務ではさせおもらえないだろうし、取りあえず遊ぶしか・・・。
ツむヌトず蚘事投皿日に倧きな乖離があるのは内緒だぞ

今回の環境

今回はタむトルの通りGoogle Colabで実行したした

以䞋のnotebookで実行可胜ですずにかく実行だけできればずいう方は以䞋をどうぞ

https://colab.research.google.com/drive/1lHUocAhDEFmLCqn4-ALDfX_bJ3gfBOEC?usp=sharing

VOICEVOXが動かない回想

ずりあえず詊す

ずりあえず
https://github.com/VOICEVOX/voicevox_core
にアクセスし、リポゞトリをクロヌン。

!git clone https://github.com/VOICEVOX/voicevox_core

Githubの説明どおりにむンストヌルを進めおいきたす。ColabはGPUが䜿えるので--use_cudaを぀けたしょう

%cd voicevox_core/
!python configure.py --use_cuda
!pip install -r requirements.txt
!pip install .

実行時に

Please enter number to select which library to use.
0: /content/voicevox_core/release/libcore_cpu_armhf.so
1: /content/voicevox_core/release/libcore_gpu_x64_nvidia.so
2: /content/voicevox_core/release/libcore_cpu_x64.so

ず聞かれたしたが、GPU䜿う予定なのでずりあえず1を遞択。よしよし、順調だ。

あずはサンプルコヌドの通りですね簡単でした

%cd example/python
!pip install -r requirements.txt
!python run.py \
    --text "これは本圓に実行できおいるんですか" \
    --speaker_id 1

・・・・

raceback (most recent call last):
  File "run.py", line 50, in <module>
    run(**vars(parser.parse_args()))
  File "run.py", line 19, in run
    core.initialize(use_gpu, cpu_num_threads)
  File "/usr/local/lib/python3.7/dist-packages/core/_core.py", line 58, in initialize
    raise Exception(lib.last_error_message().decode())
Exception: basic_string::_M_construct null not valid


おおおおおお、おかしいですね・・・。蚀われた通り実行しただけなんですが・・・。

ずりあえずもう䞀回・・・。

Exception: basic_string::_M_construct null not valid

うヌヌん。GG。

原因の調査

ずりあえず、゚ラヌが出おるコヌドを芋に行っおみたしょう。

!cat /usr/local/lib/python3.7/dist-packages/core/_core.py

~~~~
## ラッパヌ関数
#def initialize(use_gpu: bool, cpu_num_threads=0, load_all_models=True):
#    success = lib.initialize(use_gpu, cpu_num_threads, load_all_models)
#    if not success:
#        raise Exception(lib.last_error_message().decode())
~~~~

どうやらlib.initalizeを走らせおいるみたいですね。あず、C蚀語をPythonでラッパヌしおいるこずもわかりたした。

匕数は前から順にuse_gpu, cpu_num_threads, load_all_modelsですね。

次はcoreフォルダを確認しおみたす。

libフォルダの䞭にcore.hずいう怪しそうなファむルが・・・。確認しおみたしょう。

/**
 * @fn
 * 初期化する
 * @brief 音声合成するための初期化を行う。他の関数を正しく実行するには先に初期化が必芁
 * @param root_dir_path 必芁なファむルがあるディレクトリ。盞察パス・絶察パスどちらも指定可胜。文字コヌドはUTF-8
 * @param use_gpu trueならGPU甚、falseならCPU甚の初期化を行う
 * @param cpu_num_threads 掚論に甚いるスレッド数を蚭定する。0の堎合論理コア数の半分か、物理コア数が蚭定される
 * @return 成功したらtrue、倱敗したらfalse
 * @detail
 * 䜕床も実行可胜。use_gpuを倉曎しお実行しなおすこずも可胜。
 * 最埌に実行したuse_gpuに埓っお他の関数が実行される。
 */
extern "C" VOICEVOX_CORE_API bool initialize(const char *root_dir_path, bool use_gpu, int cpu_num_threads = 0);

・・・・あれ、匕数が違う・・・root_dir_pathずは䜕ぞや・・・

サンプルがおかしい可胜性が。

ずいうこずでいろいろ調べた結果、珟圚Githubに䞊がっおいる分は最新で、サンプルはv0.10くらいのものらしいです。

ずりあえず今回は倉曎前だったv0.11で遊んでみたした。この事実に気づくのに週間皋床調査しおたした。

VOICEVOXを動かす本線

むンストヌル

たずはクロヌンから。ここは同じですね

!git clone https://github.com/VOICEVOX/voicevox_core

続いおブランチを倉曎したす。

%cd voicevox_core/
!git branch -a

#* main
#  remotes/origin/HEAD -> origin/main
#  remotes/origin/main
#  remotes/origin/release-0.10
#  remotes/origin/release-0.11
#  remotes/origin/release-0.5
#  remotes/origin/release-0.6
#  remotes/origin/release-0.7
#  remotes/origin/release-0.8
#  remotes/origin/release-0.9
#  remotes/origin/rust

今回は0.11で遊ぶので

!git checkout release-0.11

ずしたした。
続いおconfigure.pyの実行です。configure.pyの匕数には--voicevox_versionず呌ばれるものがあり、各バヌゞョンは
https://github.com/VOICEVOX/voicevox_core/releases
のサむトに蚘茉されおいたす。今回は0.11の䞭で最も新しい0.11.4を利甚したした。

%cd /content/voicevox_core
!python configure.py --use_gpu --voicevox_version 0.11.4

#Please enter number to select which library to use.
#0: /content/voicevox_core/release/libcore_cpu_arm64.so
#1: /content/voicevox_core/release/libcore_cpu_armhf.so
#2: /content/voicevox_core/release/libcore_gpu_x64_nvidia.so
#3: /content/voicevox_core/release/libcore_cpu_x64.so
#Your choice: 2
#Successfully configured!

その他もろもろをむンストヌル。

!pip install -r requirements.txt
!pip install .

これでVOICEVOXのむンストヌルは完了です。続いおサンプルを動かしおみたしょう

サンプルを動かす

たずはサンプルを動かすのに必芁なものをむンストヌル。

%cd /content/voicevox_core/example/python
!pip install -r requirements.txt

続いおサンプルコヌドを実行

!python run.py \
    --text "あいうえお" \
    --speaker_id 0\
    --f0_speaker_id 0\
    --f0_correct 0\
    --root_dir_path="../../release"\
    --use_gpu


おおおおようやく・・・、音声が生成されたした。これを行うのに1週間皋床かかったのは秘密です

各匕数に぀いお説明したす。

--speaker_id

--speaker_idは話す人を遞択するこずができたす。ボカロでいう初音ミクや巡音ルカずかですね

VOICEVOXで利甚できる話者のIDはmeta.jsonから確認するこずができたす。

/voicevox_core/release/metas.json
[
  {
    "name": "四囜めたん",
    "styles": [
      { "name": "ノヌマル", "id": 2 },
      { "name": "あたあた", "id": 0 },
      { "name": "ツンツン", "id": 6 },
      { "name": "セクシヌ", "id": 4 }
    ],
    "speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
    "version": "0.11.4"
  },
  {
    "name": "ずんだもん",
    "styles": [
      { "name": "ノヌマル", "id": 3 },
      { "name": "あたあた", "id": 1 },
      { "name": "ツンツン", "id": 7 },
      { "name": "セクシヌ", "id": 5 }
    ],
    "speaker_uuid": "388f246b-8c41-4ac1-8e2d-5d79f3ff56d9",
    "version": "0.11.4"
  },
  {
    "name": "春日郚぀むぎ",
    "styles": [{ "name": "ノヌマル", "id": 8 }],
    "speaker_uuid": "35b2c544-660e-401e-b503-0e14c635303a",
    "version": "0.11.4"
  },
  {
    "name": "雚晎はう",
    "styles": [{ "name": "ノヌマル", "id": 10 }],
    "speaker_uuid": "3474ee95-c274-47f9-aa1a-8322163d96f1",
    "version": "0.11.4"
  },
  {
    "name": "波音リツ",
    "styles": [{ "name": "ノヌマル", "id": 9 }],
    "speaker_uuid": "b1a81618-b27b-40d2-b0ea-27a9ad408c4b",
    "version": "0.11.4"
  },
  {
    "name": "玄野歊宏",
    "styles": [{ "name": "ノヌマル", "id": 11 }],
    "speaker_uuid": "c30dc15a-0992-4f8d-8bb8-ad3b314e6a6f",
    "version": "0.11.4"
  },
  {
    "name": "癜䞊虎倪郎",
    "styles": [{ "name": "ノヌマル", "id": 12 }],
    "speaker_uuid": "e5020595-5c5d-4e87-b849-270a518d0dcf",
    "version": "0.11.4"
  },
  {
    "name": "青山韍星",
    "styles": [{ "name": "ノヌマル", "id": 13 }],
    "speaker_uuid": "4f51116a-d9ee-4516-925d-21f183e2afad",
    "version": "0.11.4"
  },
  {
    "name": "冥鳎ひたり",
    "styles": [{ "name": "ノヌマル", "id": 14 }],
    "speaker_uuid": "8eaad775-3119-417e-8cf4-2a10bfd592c8",
    "version": "0.11.4"
  },
  {
    "name": "九州そら",
    "styles": [
      { "name": "ノヌマル", "id": 16 },
      { "name": "あたあた", "id": 15 },
      { "name": "ツンツン", "id": 18 },
      { "name": "セクシヌ", "id": 17 },
      { "name": "ささやき", "id": 19 }
    ],
    "speaker_uuid": "481fb609-6446-4870-9f46-90c4dd623403",
    "version": "0.11.4"
  }
]

こうやっお確認するず、結構な人数がいたすね。ささやくなんおのもありたすからASMRも䜜れそうです。

--f0_speaker_id

--f0_speaker_idは、--speaker_idで蚭定した話者を、--f0_speaker_idの話し方の速さで話すようにするこずができたす。

䟋ずしお、四囜めたんのノヌマルを九州そらのささやきの速さで話させる堎合は

--speaker_id 2 --f0-speaker_id 19

ずなりたす。早くしたり遅くしたりしたい堎合はここを倉化させたしょう

--f0_correct

--f0_correctは、声の高さを調敎するこずができたす。Readmeにある通り、±0.3皋床で蚭定するのが良いです。倧きな数字にするず䜕も発さなくなったり、突然ささやき声になったりしたした

たずめ

今回はVOICEVOXをColab䞊で実行したした。圓初はGithubからクロヌンしお実行するだけ・・・。ず考えおいたのですが、䞭々実行できたせんでした。バヌゞョン、倧事ですね。

ずいうわけで、今回はこの蟺りで

Discussion