Google Colab + VOICEVOXã§é³å£°èªåçæã詊ã
ãä¹ ãã¶ãã§ãïŒååã¯å±±ç°ååŒãšã ãããšã·ã®é¡ãåŠç¿ãªãã§åé¡ã§ããªãã詊ããŠããŸãããã
ä»åã¯VOICEVOXãšåŒã°ããé³å£°èªåçæããŒã«ã§éãã§ãããããšæããŸãïŒïŒçŽäœæ²æã䜵ããŠã芧ãã ããã»ã»ã»ïŒ
äºã®çµç·¯
ãæŒäŒã¿ã«TwitterãããŠãããšããããªãã€ãŒããç®ã«ã
ã»ã»ã»ããã¯éã¶ãããªãïŒæ¥åã§ã¯ãããŠããããªãã ããããåããããéã¶ããã»ã»ã»ã
ãã€ãŒããšèšäºæçš¿æ¥ã«å€§ããªä¹é¢ãããã®ã¯å
ç·ã ã
ä»åã®ç°å¢
ä»åã¯ã¿ã€ãã«ã®éãGoogle Colabã§å®è¡ããŸããïŒ
以äžã®notebookã§å®è¡å¯èœã§ãïŒãšã«ããå®è¡ã ãã§ããã°ïŒãšããæ¹ã¯ä»¥äžãã©ããïŒ
VOICEVOXãåããªãïŒåæ³
ãšãããã詊ã
ãšãããã ã«ã¢ã¯ã»ã¹ãããªããžããªãã¯ããŒã³ã
!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ãšåŒã°ãããã®ããããåããŒãžã§ã³ã¯
ã®ãµã€ãã«èšèŒãããŠããŸããä»åã¯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ãã確èªããããšãã§ããŸãã
[
{
"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