Compare commits

...

1335 Commits

Author SHA1 Message Date
github-actions[bot]
d9d890975a
@mallocfree009 has signed the CLA from Pull Request #1504 2025-05-17 10:32:01 +00:00
wok
8043fce1ce READMEファイルを更新し、v.2.0.78-betaの新機能とバグ修正を追加しました。 2025-05-16 01:33:01 +09:00
wok
3677f6e268 RTX 5090に関する新機能を追加し、各言語のREADMEファイルを更新しました。 2025-05-03 04:06:57 +09:00
wok
0318700981 update 2025-02-16 01:26:08 +09:00
wok
66cbbeed1a update 2024-11-15 04:10:35 +09:00
wok
b262d28c10 update 2024-11-13 02:01:48 +09:00
wok
38a9164e5c update 2024-11-08 23:26:14 +09:00
wok
e472934bb4 update 2024-11-08 12:34:18 +09:00
wok
6129780229 fix typo 2024-10-08 20:10:41 +09:00
wok
e821960c59 Merge branch 'master' of github.com:w-okada/voice-changer 2024-10-08 14:54:33 +09:00
wok
fa77d69bed update 2024-10-08 14:54:30 +09:00
w-okada
7ab6a63a67
Merge pull request #1347 from QweRezOn/master
Add Russian Readme File
2024-09-15 08:01:23 +09:00
github-actions[bot]
763a6a0763
@QweRezOn has signed the CLA from Pull Request #1347 2024-09-13 17:04:56 +00:00
QweRez
dfbc95bd61
Update README_ru.md 2024-09-13 20:03:50 +03:00
QweRez
33387bd351
Update README.md 2024-09-13 20:02:44 +03:00
QweRez
b02c4f48c3
Create README_dev_ru.md 2024-09-13 20:02:19 +03:00
QweRez
006b9d575c
Update README_dev_en.md 2024-09-13 19:59:08 +03:00
QweRez
4ebcd670e7
Update README_en.md 2024-09-13 19:57:30 +03:00
QweRez
0b5daf162b
Create README_ru.md
add ru
2024-09-13 19:56:56 +03:00
wok
11b5deecb8 update 2024-08-27 09:29:07 +09:00
wok
fd849db239 update 2024-08-21 10:29:31 +09:00
wok
6d9e735883 update 2024-08-18 23:13:17 +09:00
wok
b5d3e5f066 update 2024-08-07 19:51:20 +09:00
wok
a75f87e433 update 2024-08-06 23:47:11 +09:00
wok
285615d67c update 2024-08-01 11:01:20 +09:00
wok
eef8395205 update 2024-07-27 18:14:50 +09:00
wok
465ab1ff23 update 2024-07-21 02:29:03 +09:00
wok
1f51581ae3 update 2024-07-20 05:37:14 +09:00
wok
87b547e724 update 2024-07-20 02:32:21 +09:00
wok
3b83221cec update 2024-07-20 02:30:06 +09:00
wok
f79855f8b2 update 2024-07-10 23:54:40 +09:00
wok
1952c76533 update 2024-06-30 17:07:52 +09:00
wok
92f0b1aaf5 update 2024-06-30 16:17:10 +09:00
wok
ebea9d2692 update 2024-06-29 07:07:58 +09:00
wok
a91ef76b64 update 2024-06-29 07:06:55 +09:00
wok
0cd7f69931 update 2024-06-29 07:05:57 +09:00
wok
b350812083 update 2024-06-29 07:05:30 +09:00
wok
80ccc0b1d7 update 2024-06-29 07:03:40 +09:00
wok
cc60c7adfb update 2024-06-29 07:03:11 +09:00
wok
d61f6b8e99 update 2024-06-29 07:02:35 +09:00
wok
7adc1f1cf5 update 2024-06-29 07:02:04 +09:00
wok
7e177ee84c update 2024-06-29 07:01:26 +09:00
wok
51046638d6 update 2024-06-29 07:00:57 +09:00
wok
2522d44f13 update 2024-06-29 07:00:30 +09:00
wok
018cab3ded update 2024-06-29 07:00:01 +09:00
wok
a1714878a7 update 2024-06-29 06:59:34 +09:00
wok
23b69ba121 update 2024-06-29 06:56:19 +09:00
wok
9f6903e4e9 update 2024-06-29 06:48:05 +09:00
wok
4c59ab5431 update 2024-06-24 03:49:37 +09:00
wok
33d74e8e73 Merge branch 'master' of github.com:w-okada/voice-changer 2024-06-24 03:47:52 +09:00
wok
5f1ca7af51 update 2024-06-24 03:47:25 +09:00
github-actions[bot]
56a5094881
@Nick088Official has signed the CLA from Pull Request #1241 2024-06-15 16:27:47 +00:00
wok
cde810a9d0 add cuda question 2024-06-12 05:01:52 +09:00
wok
73bb47f745 update 2024-06-10 20:09:30 +09:00
wok
349d268189 update 2024-06-05 18:39:35 +09:00
wok
3a8cbb07de update 2024-06-03 20:57:28 +09:00
github-actions[bot]
800285f2cd
@vitaliylag has signed the CLA from Pull Request #1224 2024-06-01 03:14:09 +00:00
github-actions[bot]
d3add2561d
@mrs1669 has signed the CLA from Pull Request #1171 2024-04-04 10:53:26 +00:00
w-okada
621ad25a8a
Merge pull request #1153 from deiteris/harden-security
Harden web server security
2024-04-02 16:04:02 +09:00
Yury
8dd8d7127d Refactor and add origin check to SIO 2024-03-18 22:52:46 +02:00
Yury
ce9b599501 Improve allowed origins input and use set 2024-03-17 16:26:55 +02:00
github-actions[bot]
28fc541891
@deiteris has signed the CLA from Pull Request #1153 2024-03-16 22:24:48 +00:00
Yury
cf2b693334 Harden web server security 2024-03-17 00:11:16 +02:00
w-okada
11672e9653 Merge branch 'master' of github.com:w-okada/voice-changer 2024-03-05 23:47:48 +09:00
w-okada
a42051bb40 update 2024-03-05 23:45:46 +09:00
w-okada
aa620e1cf0
Merge pull request #1141 from richardhbtz/patch-1
Misspelling "trouble"
2024-03-04 10:35:17 +09:00
w-okada
22bd9e3d7c Merge branch 'master' of github.com:w-okada/voice-changer 2024-03-04 10:33:56 +09:00
w-okada
6e774a1458 v.1.5.3.18 2024-03-04 10:33:16 +09:00
Richard Habitzreuter
0e2078a268
Misspelling "trouble" 2024-02-29 16:58:06 -03:00
github-actions[bot]
51233e0cbe
@brandonkovacs has signed the CLA from Pull Request #1137 2024-02-29 02:05:13 +00:00
w-okada
2ac5ec9feb update 2024-02-28 23:23:22 +09:00
w-okada
bc6e8a9c08 update 2024-02-28 23:08:49 +09:00
w-okada
39e0d0cfd6 update 2024-02-21 08:54:39 +09:00
w-okada
a1a3def686 Merge branch 'master' into v.1.5.3 2024-02-21 08:25:58 +09:00
w-okada
67804cad3c
Merge pull request #1092 from tg-develop/master
Bugfix FCPE
2024-02-21 08:25:25 +09:00
w-okada
ce8f843746 Merge branch 'master' into v.1.5.3 2024-02-21 08:22:36 +09:00
Tobias
0b954131b4 Bugfix FCPE 2024-01-21 14:02:35 +01:00
w-okada
927bba6467
Merge pull request #1077 from icecoins/master
implement of the fcpe in RVC
2024-01-18 06:32:12 +09:00
icecoins
8f230e5c45
Update FcpePitchExtractor.py 2024-01-12 02:28:17 +08:00
github-actions[bot]
41238258ba
@icecoins has signed the CLA from Pull Request #1077 2024-01-11 14:05:09 +00:00
icecoins
1cf9be54c7
undo modification 2024-01-11 22:02:36 +08:00
icecoins
303a15fef3
implement fcpe 2024-01-11 21:10:44 +08:00
icecoins
04f93b193f
implement fcpe 2024-01-11 21:09:57 +08:00
icecoins
fbf69cda19
implement fcpe 2024-01-11 21:08:47 +08:00
icecoins
8e42927880
implement fcpe 2024-01-11 21:07:38 +08:00
icecoins
4e254e42f7
implement fcpe 2024-01-11 21:07:03 +08:00
icecoins
cc72b93198
implement fcpe 2024-01-11 21:05:57 +08:00
icecoins
cc4783b85c
implement fcpe 2024-01-11 21:04:54 +08:00
icecoins
5fd31999e7
implement fcpe 2024-01-11 21:04:15 +08:00
icecoins
9f9e7016e2
Update GUI.json 2024-01-11 21:03:41 +08:00
icecoins
b96ba86be3
Update README.md 2024-01-11 21:00:50 +08:00
icecoins
98ee26e353
Update README.md 2024-01-11 20:58:49 +08:00
icecoins
e8244d61b7
Update README.md 2024-01-11 20:57:50 +08:00
github-actions[bot]
87d2382828
@sonphantrung has signed the CLA from Pull Request #1063 2024-01-04 08:20:51 +00:00
github-actions[bot]
03caf942b2
@Poleyn has signed the CLA from Pull Request #1057 2024-01-01 17:42:14 +00:00
w-okada
b215f3ba84 Modification:
- Timer update
  - Diffusion SVC Performance monitor
2023-12-21 04:11:25 +09:00
w-okada
0f0225cfcd update 2023-12-03 03:31:27 +09:00
w-okada
afb13bf976 bugfix: macos model_stati_dir 2023-12-03 02:50:51 +09:00
w-okada
06b8cf78d1 bugfix:
- clear setting
improve
  - file sanitizer
chage:
  - default input chunk size: 192.
    - decided by this chart.(https://rentry.co/VoiceChangerGuide#gpu-chart-for-known-working-chunkextra)
2023-12-03 02:02:28 +09:00
w-okada
c2b979a05f Merge branch 'master' of github.com:w-okada/voice-changer 2023-11-29 06:07:18 +09:00
w-okada
4a967c0b80 update 2023-11-29 05:42:58 +09:00
w-okada
ceb7d88cd9 update 2023-11-29 05:18:53 +09:00
w-okada
17597fdaab Add chihaya_jinja_sample
Web Edition improvement(16k test)

bugfix:
- merge slot
- servermode append error
2023-11-29 00:30:52 +09:00
w-okada
702d468d2f
Merge pull request #896 from hinabl/master
Added Auto Sampling Rate
2023-11-27 11:59:57 +09:00
Hina
f3d19fe95f
Removed Test dir
Finished test
2023-11-27 10:35:21 +08:00
Hina
69e81c4587 Added "some" weights.gg support on upload cell 2023-11-27 10:33:32 +08:00
github-actions[bot]
6ab743a2e2
@shdancer has signed the CLA from Pull Request #1017 2023-11-24 07:26:00 +00:00
w-okada
b24c781a72 async internal process 2023-11-23 16:44:23 +09:00
Hina
be3eb4033d Added Audio Notification 2023-11-23 15:43:02 +08:00
w-okada
0e7c0daebc refactor webedition flag 2023-11-23 08:10:29 +09:00
w-okada
3aa86f1e5a update 2023-11-23 07:54:35 +09:00
w-okada
08b3f25f0b Improve Device Detection 2023-11-23 07:53:14 +09:00
w-okada
ecf1976837 Standard Edtion avoid load process.js 2023-11-23 06:46:12 +09:00
w-okada
6fd61b9591 improve web edition gui 2023-11-23 06:20:54 +09:00
Hina
a216d4bc9d Kaggle Notebook | Public W-okada Voice Changer . | Version 2 2023-11-22 12:25:21 +08:00
Hina
935d817f6f Moved To new Link 2023-11-22 12:23:31 +08:00
w-okada
b895bdec4f WEB Edition icon bugfix 2023-11-22 10:06:38 +09:00
w-okada
a5c665c275 update 2023-11-22 07:10:44 +09:00
w-okada
82de23bb1a WIP:WebEdition GUI Improve 2023-11-22 07:10:34 +09:00
w-okada
ab837561d9 WIP:WEB version control 2023-11-22 05:53:15 +09:00
w-okada
14c73a71d2 ・モデルキャッシュ対応
・upkey対応
・モデル一覧追加
2023-11-21 23:10:43 +09:00
Hina
3e39b99ed7 Made Upload By Link smaller 2023-11-21 21:11:46 +08:00
Hina
df49eac1da Added Scuffed weights.gg model import (only works with model upload to huggingface) 2023-11-21 19:25:56 +08:00
w-okada
b8640f1f5a tooltip z-index 2023-11-21 11:45:38 +09:00
w-okada
db9e02cf09 add warmup progress 2023-11-21 11:45:27 +09:00
w-okada
f529331698
Merge pull request #1006 from tg-develop/AMD-Linux-Setup
Added guide for AMD Linux Setup
2023-11-21 04:03:11 +09:00
w-okada
3186e4322b Merge branch 'master' of github.com:w-okada/voice-changer 2023-11-20 07:43:53 +09:00
w-okada
6bda815669 WIP LLVC 2023-11-20 07:42:07 +09:00
w-okada
c2b031efa5 v.1.5.3.17 2023-11-20 05:38:46 +09:00
w-okada
d44119f9bf Beatrice Speaker graph
WIP: Web version
2023-11-19 22:28:38 +09:00
w-okada
079043ff6a beatrice speaker graph 2023-11-19 20:20:48 +09:00
github-actions[bot]
b6e743f032
@tg-develop has signed the CLA from Pull Request #1006 2023-11-18 10:51:21 +00:00
tg-develop
818f2470e3 Added guide for AMD Linux Setup 2023-11-18 11:49:31 +01:00
Hina
f36138d64e Update 2023-11-14 17:45:58 +08:00
Hina
1da0717a45 Fixed Kaggle Realtime VoiceChanger 2023-11-14 17:05:24 +08:00
w-okada
f15289ad98 WIP:WEBver 2023-11-14 08:17:27 +09:00
w-okada
958b03bd5a bugfix: timer update 2023-11-14 05:39:07 +09:00
Hina
218872ba75
Make Kaggle Realtime Voice Changer 2023-11-13 19:59:42 +08:00
Hina
53ea4cef57 Cleaned Some Cells 2023-11-13 01:25:20 +08:00
w-okada
85dfaff25f bugfix rest 32bit -> 16bit 2023-11-13 00:38:43 +09:00
w-okada
dadab1ad13 Experimental LLVC 2023-11-12 23:10:58 +09:00
w-okada
1e68e01e39 add handling setSinkID 2023-11-11 00:05:40 +09:00
Hina
da9e6aaf6b Removed "Under Construction" 2023-11-10 21:55:42 +08:00
w-okada
a35551906a update 2023-11-08 21:15:31 +09:00
w-okada
ca1cf9ed21 update 2023-11-08 21:11:22 +09:00
w-okada
b69496c0f3 update 2023-11-08 19:59:24 +09:00
w-okada
d03132d2ab bugfix: beatrice load 2023-11-08 19:54:13 +09:00
w-okada
3512bbb1eb Merge branch 'master' into v.1.5.3 2023-11-04 17:19:03 +09:00
w-okada
e563094714 update 2023-11-04 14:14:18 +09:00
w-okada
b32754134f update 2023-11-04 05:48:06 +09:00
w-okada
0bf927a43f update 2023-11-04 04:52:37 +09:00
w-okada
f6a3e98765 update 2023-11-04 04:46:19 +09:00
w-okada
4f7969176f update 2023-11-04 04:34:43 +09:00
w-okada
6272936e14 update 2023-11-04 04:29:28 +09:00
w-okada
2c8597d742 update 2023-11-04 04:22:24 +09:00
w-okada
56e26d438e WIP: Beatrice 2023-11-04 03:29:54 +09:00
w-okada
e62a140698 WIP:Internal version 2023-11-04 01:41:51 +09:00
Hina
ee827731b6 Merged Google Drive with Clone and install 2023-11-03 11:31:03 +08:00
Hina
5de0630bb4 Added Google Colab on version text 2023-11-03 11:01:48 +08:00
Hina
6d20b3dad2 Updated to Rafa's latest Voice Changer Colab 2023-11-03 10:17:57 +08:00
w-okada
b624999636
Merge pull request #978 from qlife1146/master
韓国語翻訳、誤字修正、内容追加
2023-11-03 10:27:39 +09:00
w-okada
4f534a2c44 update 2023-11-03 10:17:45 +09:00
Luca Park
eb30f9a4e1 韓国語翻訳、誤字修正 2023-11-03 03:41:16 +09:00
Hina
497c7c0678 Created using Colaboratory 2023-11-02 21:54:22 +08:00
w-okada
a3160c12af
Merge pull request #976 from qlife1146/master
韓国語翻訳追加
2023-11-02 10:52:19 +09:00
github-actions[bot]
59c80ca856
@qlife1146 has signed the CLA from Pull Request #976 2023-11-02 01:46:14 +00:00
Luca Park
23be190e21 파일 추가(U)
trouble_shoot_communication_ko.md
tutorial_rvc_ko_latest.md
tutorial_monitor_consept_ko.md

파일 제목 수정
tutorial_rvc_en_1_5_3_7.md -> tutorial_rvc_en_1_5_3_7.md
전각 숫자에서 반각 숫자로 수정
tutorial_device_mode.md -> tutorial_device_mode_ja.md
더 넓은 번역 제공을 위해 제목에 언어 추가

파일 내용 수정 1: 전부 tutorial_device_mode -> tutorial_device_mode_ja 링크 수정
tutorial_rvc_en_1_5_3_1.md
tutorial_rvc_en_1_5_3_3.md
tutorial_rvc_en_1_5_3_7.md
tutorial_rvc_ja_1_5_3_1.md
tutorial_rvc_ja_1_5_3_3.md
tutorial_rvc_ja_1_5_3_7.md

파일 내용 수정 2: 언어 추가
tutorial_rvc_en_latest.md
tutorial_rvc_ja_latest.md

파일 내용 수정 3: VCClient -> VC Client
tutorial_rvc_en_1_5_3_7.md
tutorial_rvc_en_latest.md
tutorial_device_mode_ja.md
tutorial_monitor_consept_ja.md
tutorial_rvc_ja_1_5_3_7.md
tutorial_rvc_ja_latest.md
trouble_shoot_communication_ja.md

파일 내용 수정 4: 맞춤법 claer -> clear
tutorial_rvc_en_latest.md
tutorial_rvc_ja_latest.md
2023-11-02 03:31:20 +09:00
Hina
f86bee6768 Fixed libportaudio missing 2023-11-01 22:18:42 +08:00
Hina
65cde67b49 Using Rafa's Install 2023-11-01 13:00:22 +08:00
Hina
5c84c4cb91 Removed packages from requirements that are not needed or already installed (first batch) 2023-10-30 19:49:54 +08:00
Hina
6094be47f2 Updated Credits and Info 2023-10-25 10:31:14 +08:00
w-okada
ba96930432
Update issue.yaml 2023-10-14 04:28:43 +09:00
Hina
c0db39990d Background WEEEE 2023-10-13 19:18:07 +08:00
w-okada
acc0130e7c update 2023-10-09 16:39:20 +09:00
w-okada
35e1fc38cd update 2023-10-09 14:40:31 +09:00
w-okada
9b39111f46 update rmvpe checkpoint 2023-10-09 14:24:56 +09:00
w-okada
70ba5d9f24 Merge branch 'master' into v.1.5.3 2023-10-09 12:15:55 +09:00
w-okada
782d003a91 update 2023-10-09 12:15:03 +09:00
w-okada
c834d181a6
Update question.yaml 2023-10-08 02:20:45 +09:00
w-okada
16873a9175
Update issue.yaml 2023-10-05 10:56:38 +09:00
w-okada
a13747b64f
Update issue.yaml 2023-10-05 10:55:55 +09:00
w-okada
2b9a497eb0 update 2023-10-05 10:53:58 +09:00
Hina
22b0f83992 Created using Colaboratory 2023-10-04 00:12:43 +08:00
Hina
ae52548113 Removed localtunnel 2023-10-03 16:48:48 +08:00
Hina
bfd7f5cef7 Created using Colaboratory 2023-09-29 00:55:14 +08:00
Hina
8d3a0f8c73 Created using Colaboratory 2023-09-29 00:44:13 +08:00
Hina
889874ecaf
Added Auto Sampling Rate
The Model Uploader Colab Cell is probably more buggy now but it works....
2023-09-28 19:18:21 +08:00
w-okada
cfe2e6afd1 add internal callback 2023-09-28 04:19:41 +09:00
w-okada
265705f087 get model info snipet 2023-09-27 02:25:09 +09:00
w-okada
b4b1001b70 separate rest client 2023-09-27 02:24:44 +09:00
w-okada
92ab1a627c
Merge pull request #892 from hinabl/master
Upload Model In Colab
2023-09-27 01:41:12 +09:00
github-actions[bot]
e3fafd5775
@hinabl has signed the CLA from Pull Request #892 2023-09-26 16:38:38 +00:00
Hina
5061113bdd
Update Hina_Modified_Realtime_Voice_Changer_on_Colab.ipynb 2023-09-25 19:54:08 +08:00
Hina
166b8adb62
Update Hina_Modified_Realtime_Voice_Changer_on_Colab.ipynb 2023-09-25 19:52:57 +08:00
Hina
abcfb93964
Update Hina_Modified_Realtime_Voice_Changer_on_Colab.ipynb 2023-09-25 19:50:50 +08:00
Hina
d5d6bd8910
Colab Version 2023-09-25 19:48:18 +08:00
w-okada
3ef54e979b apply code formatter 2023-09-25 13:25:07 +09:00
w-okada
acc44fb83f delete unused files 2023-09-25 11:23:57 +09:00
w-okada
d5e914634d delete unused files 2023-09-25 11:22:15 +09:00
w-okada
25cba16e5f Merge branch 'master' of github.com:w-okada/voice-changer 2023-09-23 03:28:43 +09:00
w-okada
1de21cde0c update 2023-09-23 03:19:01 +09:00
w-okada
0878f8f2f4 update 2023-09-23 01:23:57 +09:00
w-okada
61b725a853 add 16k(Experimental) 2023-09-23 00:55:19 +09:00
w-okada
ee6ba8ee90 disable unrecommended fodet on directml ver 2023-09-22 01:06:02 +09:00
w-okada
7febd37198 change default f0det to onnx_rmvpe 2023-09-22 00:50:09 +09:00
w-okada
654de69533 update 2023-09-21 09:28:41 +09:00
github-actions[bot]
051c59955b
@aeongdesu has signed the CLA from Pull Request #856 2023-09-16 12:13:12 +00:00
github-actions[bot]
66ebd8554a
@jonluca has signed the CLA from Pull Request #847 2023-09-14 21:10:32 +00:00
w-okada
4071115f7a
Merge pull request #844 from Rafacasari/master
Colab Updated + Kaggle Added
2023-09-14 19:40:07 +09:00
Rafa
f39a0831c5
Kaggle Update 2023-09-14 03:02:49 -03:00
Rafa
eb8cd25409
Kaggle Update 2023-09-14 03:01:27 -03:00
Rafa
074ac43acd
Create Kaggle_RealtimeVoiceChanger.ipynb 2023-09-14 02:59:50 -03:00
Rafa
8e56ecfcec
Update Realtime_Voice_Changer_on_Colab.ipynb 2023-09-14 02:50:45 -03:00
w-okada
71860e7b45
Merge pull request #832 from InsanEagle/master
Google Colab dependencies fix
2023-09-13 11:08:03 +09:00
w-okada
a4d41a6a07
Merge pull request #818 from Rafacasari/master
GITHUB: Added FAQ and re-work on Issues Template
2023-09-13 11:07:38 +09:00
github-actions[bot]
d60b492730
@InsanEagle has signed the CLA from Pull Request #832 2023-09-12 15:58:25 +00:00
InsanEagle
f191d1e029
Update Realtime_Voice_Changer_on_Colab.ipynb 2023-09-12 18:28:06 +03:00
InsanEagle
8d877b914a
Update Realtime_Voice_Changer_on_Colab.ipynb 2023-09-12 18:27:06 +03:00
InsanEagle
f7e3377d95
Update Realtime_Voice_Changer_on_Colab.ipynb 2023-09-12 17:20:41 +03:00
InsanEagle
dab44c804f
Update requirements.txt 2023-09-12 17:00:08 +03:00
InsanEagle
38fb8aa32f
Update requirements.txt 2023-09-12 16:47:19 +03:00
InsanEagle
3b5844ba10
Update requirements.txt 2023-09-12 16:43:58 +03:00
Rafa
0f2698fb6c
Update FAQ.md 2023-09-10 05:37:56 -03:00
Rafa
320ba88720
Update question.yaml 2023-09-10 05:00:12 -03:00
Rafa
30cbc75304
Update issue.yaml 2023-09-10 04:59:17 -03:00
Rafa
f0f3dad6c4
Update issue.yaml 2023-09-10 04:57:33 -03:00
Rafa
f750f17ceb
Update issue.yaml 2023-09-10 04:55:29 -03:00
Rafa
f64ce2b7b8
Update issue.yaml 2023-09-10 04:53:16 -03:00
Rafa
49ab9e80cb
Update issue.yaml 2023-09-10 04:49:45 -03:00
Rafa
ff22dd4b7c
Update issue.yaml 2023-09-10 04:44:50 -03:00
Rafa
e3bca2c49b
Update issue.yaml 2023-09-10 04:43:23 -03:00
Rafa
7df36f5a72
Update issue.yaml 2023-09-10 04:42:25 -03:00
Rafa
a2501c245f
Update issue.yaml 2023-09-10 04:40:14 -03:00
Rafa
8838ce757c
Update issue.yaml 2023-09-10 01:33:53 -03:00
Rafa
3fbc3f67d2
Update issue.yaml 2023-09-10 01:33:41 -03:00
Rafa
a8f4a71327
Update issue.yaml 2023-09-10 01:33:27 -03:00
Rafa
dd85f99545
Update issue.yaml 2023-09-10 01:32:59 -03:00
Rafa
cd857f4daa
Create FAQ.md 2023-09-10 01:30:57 -03:00
Rafa
6df24ad762
Update issue.yaml 2023-09-10 01:20:48 -03:00
Rafa
ba1823cad5
Update question.yaml 2023-09-10 01:20:21 -03:00
Rafa
26741a5ccc
Update issue.yaml 2023-09-10 01:20:03 -03:00
Rafa
afa1d60ed4
Update issue.yaml 2023-09-10 01:18:25 -03:00
Rafa
9784766ca2
Create question.yaml 2023-09-10 01:17:07 -03:00
Rafa
3a954f3dea
Update feature-request.yaml 2023-09-10 01:14:16 -03:00
Rafa
c594f279ae
Update feature-request.yaml 2023-09-10 01:13:09 -03:00
Rafa
ce6429bf3a
Update issue.yaml 2023-09-10 00:52:58 -03:00
Rafa
749e9540e3
Update feature-request.yaml 2023-09-10 00:52:27 -03:00
Rafa
5e82d3153a
Update feature-request.yaml 2023-09-10 00:49:21 -03:00
Rafa
7ea35044d0
Create feature-request.yaml 2023-09-10 00:45:09 -03:00
w-okada
6f8710fd50 improve onnx 2023-09-10 05:48:34 +09:00
w-okada
8e822c16e3 onnx improvement 2023-09-06 08:21:12 +09:00
w-okada
80a5ba91b8 WIP onnx improve 2023-09-06 08:04:39 +09:00
w-okada
93480636a3 update 2023-09-06 06:44:24 +09:00
w-okada
83543c20bc Merge branch 'master' into v.1.5.3 2023-09-05 18:53:07 +09:00
w-okada
eac95a1a5c
Merge pull request #789 from Rafacasari/master
new version of colab
2023-09-05 18:52:19 +09:00
Rafa
9e8ba81379
new version of colab 2023-09-03 20:44:22 -03:00
w-okada
219e10e4c9 update 2023-09-03 18:34:41 +09:00
w-okada
e736bcbbda update 2023-08-27 11:26:18 +09:00
w-okada
48d673227c update 2023-08-26 21:20:45 +09:00
w-okada
c4a6d0456a update 2023-08-26 20:50:23 +09:00
w-okada
1544c15627 update 2023-08-26 19:59:09 +09:00
w-okada
82caea452a update 2023-08-26 19:57:39 +09:00
w-okada
6a32c05c7e update 2023-08-26 19:50:06 +09:00
w-okada
7b0472bb64 update 2023-08-26 19:48:51 +09:00
w-okada
ea5cc27b2e bugfix pass through 2023-08-26 17:23:52 +09:00
w-okada
f40056bed3 Merge branch 'master' into v.1.5.3 2023-08-26 16:48:44 +09:00
w-okada
3ea542a01c Colaboratory を使用して作成しました 2023-08-26 16:48:00 +09:00
w-okada
0ecea3d2c4 Colaboratory を使用して作成しました 2023-08-26 16:47:11 +09:00
w-okada
35dc987657 Colaboratory を使用して作成しました 2023-08-26 16:41:58 +09:00
w-okada
c3d0cddecf Merge branch 'master' into v.1.5.3 2023-08-26 16:40:28 +09:00
w-okada
66c4d8f076 Colaboratory を使用して作成しました 2023-08-26 16:40:09 +09:00
w-okada
d9c659de0e Colaboratory を使用して作成しました 2023-08-26 16:39:24 +09:00
w-okada
4fe21c7f34 Merge branch 'master' into v.1.5.3 2023-08-26 16:36:54 +09:00
w-okada
71e91be293 Colaboratory を使用して作成しました 2023-08-26 16:32:39 +09:00
w-okada
43920fda4c handle pipeline initialization 2023-08-26 16:01:30 +09:00
w-okada
fa6944ce9e update 2023-08-26 15:11:04 +09:00
w-okada
8312189942 exp: update docker_folder 2023-08-26 14:40:30 +09:00
w-okada
9c89b53626 overwrite model 2023-08-26 14:18:54 +09:00
w-okada
78af3b7fff rmvpe 2023-08-26 13:48:03 +09:00
w-okada
8974bf78d2 skip pass through confirmation 2023-08-26 12:32:12 +09:00
w-okada
e8e339bd7e log update 2023-08-14 11:23:53 +09:00
w-okada
786c88cd06 update log control 2023-08-14 11:08:31 +09:00
w-okada
db3b079a97 update timer 2023-08-13 19:29:07 +09:00
w-okada
9fe14f94e2 reactor 2023-08-13 18:55:50 +09:00
w-okada
46ff05b04f Colaboratory を使用して作成しました 2023-08-11 02:05:06 +09:00
w-okada
4a98b80cbf
Merge pull request #683 from Rafacasari/master
Google Colab Support
2023-08-11 01:52:49 +09:00
w-okada
c4e73cee95
Merge pull request #674 from Eidenz/master
Update docker build to v.1.5.3.12
2023-08-11 01:52:05 +09:00
Rafa
7d28bb575c
i'm dumb 2023-08-10 09:18:36 -03:00
Rafa
a9dcefc772
Update 2023-08-10 08:46:16 -03:00
github-actions[bot]
26fdca22ae
@Rafacasari has signed the CLA from Pull Request #683 2023-08-10 11:43:35 +00:00
Rafa
183b109844
Google Colab Support 2023-08-10 08:41:27 -03:00
w-okada
b96a996071 update 2023-08-10 17:36:52 +09:00
w-okada
1132ba1ac0 bugfix: unknwon lib 2023-08-09 19:37:04 +09:00
w-okada
af49a25a9c Merge branch 'master' of github.com:w-okada/voice-changer 2023-08-09 19:24:54 +09:00
w-okada
6ceb514b19 update 2023-08-09 19:23:52 +09:00
github-actions[bot]
3223b1ab27
@Eidenz has signed the CLA from Pull Request #674 2023-08-09 09:45:39 +00:00
Eidenz
addd60a2f8
update(Dockerfile) upgrade to v.1.5.3.12 2023-08-09 11:42:04 +02:00
Eidenz
11219c11f6
Merge branch 'w-okada:master' into master 2023-08-09 11:41:11 +02:00
w-okada
6aa06851d3 bugfix: server mode change chunk
cause tune change
2023-08-09 18:22:18 +09:00
w-okada
19e664cc8d Bugfix: blank icon 2023-08-09 17:20:22 +09:00
w-okada
638619b3b4 pass through dialog 2023-08-09 17:11:03 +09:00
w-okada
50f963ff6b Beatrice 2023-08-09 16:55:59 +09:00
w-okada
5b43daa705
Merge pull request #661 from w-okada/v.1.5.3
Merge pull request #659 from w-okada/master
2023-08-07 20:23:10 +09:00
github-actions[bot]
fbb88ab1f3
@w-okada has signed the CLA from Pull Request #661 2023-08-07 11:22:40 +00:00
github-actions[bot]
dc523737e8
Creating file for storing CLA Signatures 2023-08-07 11:21:18 +00:00
w-okada
e382052366 update 2023-08-07 20:20:01 +09:00
w-okada
b66f793bc9 update 2023-08-07 20:18:39 +09:00
w-okada
04902c4dcb update 2023-08-07 20:17:03 +09:00
w-okada
b5d413fcda update 2023-08-07 20:12:20 +09:00
w-okada
8b27cba4ba
Merge pull request #659 from w-okada/master
tess
2023-08-07 20:08:14 +09:00
github-actions[bot]
f65d9dc439
@w-okada has signed the CLA from Pull Request #659 2023-08-07 11:07:14 +00:00
w-okada
e33958cfda
Merge pull request #658 from w-okada/v.1.5.3
update
2023-08-07 20:05:15 +09:00
w-okada
932037a841 update 2023-08-07 20:01:45 +09:00
github-actions[bot]
3333c4d127
Creating file for storing CLA Signatures 2023-08-07 11:01:35 +00:00
w-okada
e741ce9906 update 2023-08-07 20:01:16 +09:00
w-okada
14ed0a8db6 update 2023-08-07 19:59:14 +09:00
w-okada
c53ea6d50b update 2023-08-07 19:58:45 +09:00
w-okada
d1f9a2d5bc update 2023-08-07 19:54:54 +09:00
w-okada
df2406bae8 update 2023-08-07 19:54:12 +09:00
w-okada
23efe5fd11 update 2023-08-07 19:36:20 +09:00
w-okada
592235f312 update 2023-08-07 19:34:38 +09:00
w-okada
a4b7bfe479 update 2023-08-07 19:24:23 +09:00
w-okada
cc0917dab3 add cla assitantce 2023-08-07 19:16:08 +09:00
w-okada
ccdc98f9c2 add license 2023-08-07 10:59:39 +09:00
w-okada
56944ad594 improve gui 2023-08-06 09:57:58 +09:00
w-okada
1ba260e9b8 update 2023-08-06 09:37:20 +09:00
w-okada
9a3e730ec5 remove unused comment 2023-08-06 07:56:37 +09:00
w-okada
fa0c0cbceb Feature: pass through 2023-08-06 07:44:20 +09:00
w-okada
ff21c8130e bugfix: diffusionsvc sample 2023-08-06 07:09:32 +09:00
w-okada
38d7ec8c4f update 2023-08-06 05:46:13 +09:00
w-okada
3e78db4318 update 2023-08-06 05:43:36 +09:00
w-okada
e18138b5d6 skipdiffusion 2023-08-06 04:50:42 +09:00
w-okada
6d4c138821 remove slotindex from json 2023-08-05 13:24:11 +09:00
w-okada
db97441380 remove slotindex from json 2023-08-05 12:33:31 +09:00
w-okada
c08099a512 refactor: remove filename from merge req 2023-08-05 03:05:54 +09:00
w-okada
aef9d2c34b bugfix: merge model 2023-08-05 03:02:43 +09:00
w-okada
8b5eb32047 bugfix: 200slot gui 2023-08-04 12:20:04 +09:00
w-okada
2777896bb0 update slot design 2023-08-04 11:09:15 +09:00
w-okada
55f9604ba1 update 2023-08-04 07:26:46 +09:00
w-okada
7b82f021d8 change localhost -> 127.0.0.1 2023-08-04 06:53:57 +09:00
w-okada
7ac8a9497d update 2023-08-04 04:39:17 +09:00
w-okada
5dc66d1156 bugfix: not in cache data(gain) 2023-08-03 18:50:14 +09:00
w-okada
1ef2fd543d improve: cli default 2023-08-03 10:46:25 +09:00
w-okada
c9e994c3b6 improve: amd gpu list 2023-08-03 10:21:42 +09:00
w-okada
51906ba4f1 improve: separate gain between out/monitor 2023-08-03 09:56:32 +09:00
w-okada
0e878edc1e improve: add monitor to client mode 2023-08-03 05:15:05 +09:00
w-okada
2b08e47377 update 2023-08-03 03:45:44 +09:00
w-okada
4b2d3bb334 Merge branch 'master' into v.1.5.3 2023-08-03 03:44:45 +09:00
w-okada
b4555a6beb
Merge pull request #603 from JustSxm/master
Typo in EN "Chage Icon" -> "Change Icon"
2023-08-03 03:44:12 +09:00
w-okada
839755e82f improve: tune server device mode 2023-08-03 03:41:23 +09:00
w-okada
4abbe0839e update 2023-08-03 01:19:21 +09:00
JustSxm
778268d898
Typo 2023-07-30 16:04:56 -04:00
w-okada
fee9354ea6 update 2023-07-29 23:15:04 +09:00
w-okada
f48ad3755e update 2023-07-29 23:10:01 +09:00
w-okada
755511ed5c update 2023-07-29 07:35:11 +09:00
w-okada
09f9c00b02 update 2023-07-29 06:44:09 +09:00
w-okada
cdff7cc7f4 skip diffusion svc sample on mac 2023-07-29 05:21:06 +09:00
w-okada
6720fc5f08 disable voras on mac 2023-07-29 04:53:00 +09:00
w-okada
172e3f7a1d skip diffusionsvc on mac 2023-07-29 04:24:36 +09:00
w-okada
73203a13e3 increase slot size200 2023-07-28 01:05:54 +09:00
w-okada
b86e15a79f experimental: remove torch audio 2023-07-28 00:45:51 +09:00
w-okada
cacd127c76 Experimental: remve torchaudio from rvc 2023-07-28 00:41:19 +09:00
Eidenz
2a10d19cd5
Update Dockerfile 2023-07-27 12:22:14 +02:00
w-okada
3d2f5ad0da Experimental: eliminate torchaudio from rvc 2023-07-27 15:45:54 +09:00
w-okada
074a0a4530 update 2023-07-27 09:56:30 +09:00
w-okada
bf01337ce3 update 2023-07-27 09:56:20 +09:00
w-okada
347963c0f5 update 2023-07-27 08:49:52 +09:00
w-okada
bf742d86c1 update 2023-07-27 05:12:26 +09:00
w-okada
4e13ec3d6b update 2023-07-27 04:40:14 +09:00
w-okada
dd01e81e45 update 2023-07-27 04:38:54 +09:00
w-okada
9de74281f6 RMVPE:
different device bug, not finding root caused yet.
2023-07-27 04:12:58 +09:00
w-okada
f96b4c2414 logger, handle creating pipeline exception 2023-07-27 04:06:25 +09:00
w-okada
d2a2826a82 add log 2023-07-26 17:10:29 +09:00
w-okada
2e84fa7407 add logger 2023-07-26 17:04:55 +09:00
w-okada
3c54b6bd2b Bugfix: remove unefficient message 2023-07-25 22:59:41 +09:00
w-okada
8cd41a62a8 Bugfix: load sample rvc model 2023-07-24 22:31:05 +09:00
w-okada
98d104cbf2 update 2023-07-24 00:32:11 +09:00
w-okada
7200896940 improve: handle unhandled exception 2023-07-23 23:56:37 +09:00
w-okada
a8a392b20d bugfix: mps for rmvpe 2023-07-23 23:01:35 +09:00
w-okada
7ab7dba5c8 bugfix: initialize gpu 2023-07-23 21:19:45 +09:00
w-okada
f98d4a38e0 improve: launch sequence 2023-07-23 19:39:52 +09:00
w-okada
ff0a80362a update 2023-07-23 07:36:52 +09:00
w-okada
11756788aa improve:onnx export 2023-07-23 07:20:48 +09:00
w-okada
20e7a472be gui improvement 2023-07-22 13:23:43 +09:00
w-okada
acab6644f7 update 2023-07-22 12:18:04 +09:00
w-okada
ec4f62f54a
Merge pull request #514 from Eidenz/master
Update docker to v.1.5.3.10
2023-07-22 00:05:50 +09:00
Eidenz
5afe932126
update(start_docker.sh) added RMVPE 2023-07-21 16:58:00 +02:00
Eidenz
857ce5b90d
update(Dockerfile) version up and lock numpy 2023-07-21 16:57:07 +02:00
w-okada
6394314d25 update 2023-07-21 23:34:29 +09:00
w-okada
2ee83c7239 update 2023-07-21 23:33:32 +09:00
w-okada
3b2fcc9805 update 2023-07-21 22:02:33 +09:00
w-okada
c0448db0ec update 2023-07-21 21:05:16 +09:00
w-okada
d3e49efd69 add sample diffusion svc 2023-07-21 18:25:28 +09:00
w-okada
a0e890a438 update 2023-07-21 07:16:44 +09:00
w-okada
cc5d3305fe update 2023-07-19 22:42:04 +09:00
w-okada
a6b1f093e1 bugfinx: mps not support float64 2023-07-19 22:08:56 +09:00
w-okada
43a1583731 WIP: screen capture 2023-07-19 19:41:56 +09:00
w-okada
7e4eed04e6 TEST: screen capture2 2023-07-19 19:17:31 +09:00
w-okada
ba9b5de461 TEST: screen capture 2023-07-19 18:49:50 +09:00
w-okada
72702ee70a WIP: vocoder 2023-07-19 10:20:30 +09:00
w-okada
1d54687577 RVC: RMVPE support 2023-07-18 23:02:06 +09:00
w-okada
257d99e355 improve: directml device id 2023-07-18 09:43:17 +09:00
w-okada
87a10c8e11 Improve: Change inefficient processes 2023-07-18 08:36:21 +09:00
w-okada
0957fbc923 bugfix:
diffusion svc server mode silence front value
2023-07-18 08:29:17 +09:00
w-okada
b559582dc4 bugfix WIP: server device mode 2023-07-17 22:21:58 +09:00
w-okada
371e1b8cac Diffusion SVC:
pitch extractor sr is changed from fixed(16k) to audio sampl rate
2023-07-17 21:03:53 +09:00
w-okada
e8aeb1eaa7 update dev start command 2023-07-17 09:21:35 +09:00
w-okada
b133364b77 remove unused comment 2023-07-17 09:18:29 +09:00
w-okada
e6a3ae241d add DiffSinger Community Vocoders link 2023-07-17 09:10:31 +09:00
w-okada
022fda0aa6 WIP: diffusion svc model slot info 2023-07-17 08:20:41 +09:00
w-okada
37468e3cc9 WIP: Diffusion svc refining: auto speaker id detect 2023-07-17 07:41:32 +09:00
w-okada
b9429c7655 WIP: diffusion svc refining 2023-07-17 07:21:06 +09:00
w-okada
9eef8fcb11 WIP: refactor 2023-07-15 23:39:02 +09:00
w-okada
33e156ef9a WIP: DiffusionSVC 2023-07-15 23:24:37 +09:00
w-okada
2c4503ade8 WIP:diffusion svc config 2023-07-15 18:35:11 +09:00
w-okada
01291dc4e3 WIP: configure diffusion svc 2023-07-15 10:01:42 +09:00
w-okada
3ffacaed97 WIP: RMVPE 2023-07-15 09:34:29 +09:00
w-okada
7d7702bb79 WIP: RMVPE 2023-07-15 09:17:19 +09:00
w-okada
333e66786d WIP: cprep onnx 2023-07-15 06:07:33 +09:00
w-okada
485a747d55 WIP:crepe 2023-07-15 05:57:20 +09:00
w-okada
8339e72ef5 WIP dio 2023-07-15 05:47:06 +09:00
w-okada
8a2df2dbb4 WIP: dio 2023-07-15 05:40:40 +09:00
w-okada
02eadeeaa3 WIP: pitch extractor 2023-07-15 05:30:07 +09:00
w-okada
6a09338af5 WIP: Pitch extractor refactoring 2023-07-15 04:53:38 +09:00
w-okada
a69c89255b WIP: Volume Extaractor torch 2023-07-15 04:45:27 +09:00
w-okada
a1db94c0af WIP: first communication confirmation 2023-07-14 13:54:08 +09:00
w-okada
fbabfed566 WIP: remove comments 2023-07-14 04:28:03 +09:00
w-okada
5bf1202215 WIP: diffusion svc rt badf0 2023-07-14 03:33:04 +09:00
w-okada
9c829ac91a import diffusion svc core 2023-07-13 00:59:48 +09:00
w-okada
ad013bf4d3 update 2023-07-10 04:05:10 +09:00
w-okada
4c9e61bb35 update 2023-07-10 03:46:19 +09:00
w-okada
852b3c021c update docker id 2023-07-10 03:25:55 +09:00
w-okada
ae3587a615 update docker 2023-07-10 03:18:51 +09:00
w-okada
e897512ee1 Improvement:
- handling unknown model slot
2023-07-10 02:27:51 +09:00
w-okada
f55f1f2938 update 2023-07-09 13:27:19 +09:00
w-okada
065e23d5e3 update 2023-07-09 08:42:28 +09:00
w-okada
728e7bcca1 improve:
MMVCv15: max chunksize for onnx
2023-07-09 05:19:30 +09:00
w-okada
514ae768b7 Merge branch 'master' into v.1.5.3 2023-07-09 04:38:28 +09:00
w-okada
cda99da5b4
Merge pull request #434 from nadare881/crepe_bugfix
delete padding
2023-07-09 04:37:49 +09:00
nadare
816798e8b5 delete padding 2023-07-09 03:36:37 +09:00
w-okada
01a916d2dd Improve:
- keep f0 detector
2023-07-09 02:35:06 +09:00
w-okada
aca23038bb bugfix: input media file recover old setting 2023-07-08 20:05:35 +09:00
w-okada
b1d361aaae update 2023-07-08 19:49:00 +09:00
w-okada
6fb00c7d91 Improve: show onnx device 2023-07-08 19:07:41 +09:00
w-okada
bde95029b3 Bugfix: RVC fallback 2023-07-08 19:02:44 +09:00
w-okada
130ae7e398 update 2023-07-08 17:18:28 +09:00
w-okada
8ecc64d9a1 update 2023-07-08 07:13:24 +09:00
w-okada
29c5bb0299 update 2023-07-08 06:13:04 +09:00
w-okada
f27562f182 Bugfix:
new model add
2023-07-08 06:12:49 +09:00
w-okada
cb9043ffd4 Merge branch 'master' into v.1.5.3 2023-07-08 05:09:41 +09:00
w-okada
dc9401ff0f
Merge pull request #424 from nadare881/master
hotfix: protectありの時特定のchunksizeでバグっていたので修正
2023-07-08 05:06:30 +09:00
w-okada
9ca73928ef Bugfix
- server device mode chuttering
2023-07-08 05:06:07 +09:00
w-okada
eba5da7970 Improvement:
onnx on/off
2023-07-08 03:45:02 +09:00
w-okada
caa8c99f14 New Feature:
- contentvec onnx
2023-07-08 03:18:23 +09:00
nadare
d4f80eeaa8 Merge https://github.com/w-okada/voice-changer 2023-07-07 08:57:23 +09:00
nadare
66049c3c06 hotfix protectありの時特定のchunksizeでバグっていたので修正 2023-07-07 08:56:25 +09:00
w-okada
900525e584 Merge branch 'master' into v.1.5.3 2023-07-07 04:13:40 +09:00
w-okada
0825f5eee0
Merge pull request #416 from nadare881/master
hotfix: RVCquality=highの時のバグを修正
2023-07-07 03:58:06 +09:00
w-okada
0bd7bfafc5 Refctoring
- embedder type from enum to Literal
2023-07-07 03:56:45 +09:00
w-okada
89a06b65ec Refctor
- change enum to typealias
2023-07-07 02:23:20 +09:00
w-okada
d5561c2212 New Feature:
- Add Crepe Full/Tiny (onnx)
 - remove test connect for local
Refactor:
 - RVC: comment out module importer
2023-07-07 02:17:29 +09:00
w-okada
099f82cc60 Improve: server info include python info 2023-07-06 10:21:24 +09:00
nadare
171360b757
Merge branch 'w-okada:master' into master 2023-07-06 05:54:39 +09:00
nadare
81fe3cd6a0 hotfix: RVCquality=highの時のバグを修正 2023-07-06 05:53:46 +09:00
w-okada
1367bbb611 updat 2023-07-05 09:48:57 +09:00
w-okada
764e4e9c5d update 2023-07-05 09:23:55 +09:00
w-okada
1449a71087 GUI Improvement: when server device host api changed, auto select none 2023-07-05 07:36:44 +09:00
w-okada
e07300fe70 Debug(test): force sampling rate 2023-07-05 05:22:46 +09:00
w-okada
6e18b42c51 update 2023-07-05 03:05:51 +09:00
w-okada
3b1a984e23 update 2023-07-05 02:35:15 +09:00
w-okada
adb8371089
Merge pull request #392 from nadare881/autospeaker
speakerの自動検知
2023-07-04 17:08:32 +09:00
w-okada
fa07de80fb
Merge pull request #371 from nadare881/RVC_improve
リアルタイム特化推論の追加
2023-07-04 17:05:11 +09:00
w-okada
3742642128 Merge branch 'v.1.5.3' 2023-07-04 10:21:02 +09:00
w-okada
f86910b089 update 2023-07-04 10:20:54 +09:00
w-okada
8ae4990f74 Merge branch 'master' of github.com:w-okada/voice-changer 2023-07-04 09:26:49 +09:00
w-okada
1dc46df84b update 2023-07-04 09:26:07 +09:00
nadare
d0224a5e50 speakerの自動検知 2023-07-04 06:50:58 +09:00
w-okada
70956fafeb
Merge pull request #380 from markpaul099/patch-1
EN Readme to EN tutorial
2023-07-02 22:14:18 +09:00
MarKPauL
c34e9ccefb
Update 2023-07-02 20:51:41 +08:00
w-okada
127e2db94f update 2023-07-02 04:50:42 +09:00
w-okada
403026ea52 update 2023-07-02 04:45:44 +09:00
w-okada
8c12dd0127 update 2023-07-02 04:30:20 +09:00
w-okada
bad81448e2 update 2023-07-02 04:17:50 +09:00
w-okada
07d26d3125 Bugfix:
- server device mode: filter for monitor is not work
2023-07-02 03:03:33 +09:00
w-okada
2f0289f1c7 update 2023-07-02 02:04:26 +09:00
w-okada
2ffc38154b update 2023-07-02 02:01:38 +09:00
w-okada
c48ac96104 update 2023-07-01 19:11:58 +09:00
w-okada
cd3f272271 update 2023-07-01 18:17:29 +09:00
nadare
7b251339f1 fix pitch 2023-07-01 17:13:44 +09:00
nadare
5a5f7feefd inferenceの高品質化+高速化 2023-07-01 16:45:25 +09:00
w-okada
02359b9f4f Merge branch 'master' into v.1.5.3 2023-07-01 15:54:45 +09:00
w-okada
75668e1534 Bugfix:
- device output recorder button is showed in server device mode.
Feature:
 - server device monitor
Improve:
 - default uvicorn error log
2023-07-01 14:57:57 +09:00
nadare
92cd384486 draft commit 2023-07-01 12:06:14 +09:00
w-okada
fd17bb59c8
Merge pull request #369 from moritzbrantner/patch-1
fixed typo
2023-07-01 05:17:56 +09:00
moritzbrantner
790c688ace
fixed typo 2023-06-30 20:55:48 +02:00
w-okada
b051d08ae0 update 2023-06-29 22:19:33 +09:00
w-okada
f3ba60f4e1 update 2023-06-29 21:45:21 +09:00
w-okada
809019634d Bugfix:
- onnx export
Documentation
 - notice for AMD user to use DirectML Version
2023-06-29 17:44:53 +09:00
w-okada
03f5697809 update 2023-06-29 13:38:19 +09:00
w-okada
f0cdb45f32 -bugfix: server device mode sampling rate restore
-bugfix: server device mode data type
2023-06-29 05:50:32 +09:00
w-okada
b5e3f11beb bugfix: server io rec 2023-06-29 04:45:06 +09:00
w-okada
7b50b9f0f3 dml gpu switch 2023-06-29 03:50:38 +09:00
w-okada
2bce23af19 load model first launch 2023-06-29 02:59:56 +09:00
w-okada
b4869256fe upd 2023-06-27 18:24:01 +09:00
w-okada
88519b3786 Merge branch 'master' of github.com:w-okada/voice-changer 2023-06-27 18:19:25 +09:00
w-okada
906c322b40 bugfix: file select as input 2023-06-27 18:19:04 +09:00
w-okada
f5909710f0 update 2023-06-27 08:13:29 +09:00
w-okada
db5de17604 docker update 2023-06-27 07:58:48 +09:00
w-okada
443d857e7a update readme 2023-06-27 07:06:06 +09:00
wataru
2640c7aded update 2023-06-26 11:42:46 +09:00
wataru
34066aa4f6 resume thread 2023-06-26 10:03:12 +09:00
wataru
1a2220bfe4 test 2023-06-26 03:13:25 +09:00
wataru
15fefdf5c4 update 2023-06-26 02:40:44 +09:00
wataru
7b6b402d9d update 2023-06-26 02:19:37 +09:00
wataru
b5dd079f04 update 2023-06-26 02:09:17 +09:00
wataru
f0bc01a338 update 2023-06-26 01:55:46 +09:00
wataru
d3c971e033 update 2023-06-26 01:10:39 +09:00
wataru
21b9a9fe24 merge master 2023-06-26 01:06:23 +09:00
w-okada
7ee72e0231
Merge pull request #343 from nadare881/voras_beta
Voras beta + 混合精度での推論の追加
2023-06-26 01:00:26 +09:00
wataru
62accf2d7b reload at startup 2023-06-26 00:54:55 +09:00
wataru
9b456c83bb save server config 2023-06-26 00:51:25 +09:00
wataru
ad9f910163 save client config 2023-06-25 22:38:21 +09:00
wataru
baeb771c29 add server setting viewer 2023-06-25 18:39:53 +09:00
wataru
d57362c3c3 add mmvcv15 corresondence reccomend 2023-06-25 18:02:43 +09:00
wataru
21967880c4 add vctype in portrait and slot selector 2023-06-25 17:33:08 +09:00
wataru
73a96c654a remove old gui 4 2023-06-25 16:39:18 +09:00
nadare
4d67354ea6 resolve_conflict 2023-06-24 21:01:50 +09:00
wataru
767dfc520c remove old gui 3 2023-06-24 11:52:37 +09:00
nadare
daff5098f8 voras_betaの追加 2023-06-24 10:33:57 +09:00
wataru
6b4fe5a349 remove old gui 2 2023-06-24 09:52:21 +09:00
wataru
4d4b6f2c08 remove old gui 2 2023-06-24 09:02:46 +09:00
wataru
c333eb188e remove old gui] 2023-06-24 08:52:02 +09:00
wataru
50ac1adc45 some restructure 2023-06-23 22:35:41 +09:00
wataru
fcf5488b01 include rvc model 2023-06-23 22:34:09 +09:00
wataru
f429e00010 delete unused module 2023-06-23 21:44:01 +09:00
wataru
719f4c4d83 remove so-vits-svcv2, custom from loading model 2023-06-23 17:52:26 +09:00
wataru
59f558ef93 WIP: integrate vcs to new gui 4 2023-06-23 14:54:39 +09:00
wataru
4b212bd442 WIP: integrate vcs to new gui 4 2023-06-23 14:00:40 +09:00
wataru
776a6fd8b2 WIP: integrate vcs to new gui 4 2023-06-22 10:47:11 +09:00
wataru
0201b2e44c WIP: integrate vcs to new gui 4 2023-06-22 10:46:12 +09:00
wataru
4d31d2238d WIP: integrate vcs to new gui 4 2023-06-22 09:21:39 +09:00
wataru
68b1c8953e WIP: integrate vcs to new gui 4 2023-06-22 07:40:06 +09:00
wataru
d83590dc35 WIP: integrate vcs to new gui 3 2023-06-22 06:56:00 +09:00
wataru
fa7894de50 WIP: integrate vcs to new gui 2 2023-06-21 16:00:03 +09:00
wataru
e6b191abd2 wip:support m1 mac 1 2023-06-21 09:18:51 +09:00
wataru
06a5250f61 WIP: integrate vcs to new gui 2 2023-06-21 07:23:13 +09:00
wataru
c7e72e52db WIP: integrate vcs to new gui 2 2023-06-21 03:32:18 +09:00
wataru
b9c1ee4346 bugfix:server device list exception handling 2023-06-20 11:28:10 +09:00
wataru
b6996a15fe WIP: integrate vcs to new gui 2 2023-06-20 06:39:39 +09:00
wataru
b453e5fd85 WIP: integrate vcs to new gui 2023-06-19 11:40:16 +09:00
nadare
c8dc2a2637
Update README.md 2023-06-18 23:18:10 +09:00
nadare
0936b02287 v3モデルのデモンストレーション 2023-06-18 22:23:50 +09:00
wataru
3bed1af628 update 2023-06-18 17:42:12 +09:00
wataru
dd7a343c65 fix: docker 2023-06-18 17:11:44 +09:00
wataru
df199516c2 update dev document 2023-06-18 16:48:19 +09:00
wataru
dda7ab008b fix:directml edition det 2023-06-18 15:57:18 +09:00
wataru
73f564cfa8 update 2023-06-18 14:59:37 +09:00
wataru
03a4e8f3be bugfix: smaple download 2023-06-18 09:25:23 +09:00
wataru
9c56579df1 bugfix: smaple download 2023-06-18 09:24:47 +09:00
wataru
56ee649196 some fixes 2023-06-18 03:51:09 +09:00
wataru
3729b44f37 common sample 2023-06-17 20:13:25 +09:00
wataru
db322756f6 WIP:common sample/check all vcs 2023-06-17 15:35:43 +09:00
wataru
9dd2808509 WIP:common sample 2023-06-17 14:16:29 +09:00
wataru
4a8851aff1 some fixis 2023-06-17 13:17:43 +09:00
wataru
bd3d3375c3 WIP:common sample 2023-06-17 10:08:32 +09:00
wataru
d192e21093 bugfix: update gui 2023-06-17 07:52:23 +09:00
wataru
0036a779cf WIP:common sample 2023-06-16 21:58:46 +09:00
wataru
435699d387 WIP:common sample 2023-06-16 18:04:33 +09:00
wataru
24b55116f2 WIP:common sample 2023-06-16 17:51:46 +09:00
wataru
b84ae93511 WIP:common sample 2023-06-16 17:24:51 +09:00
wataru
4f427d5700 remove unused comment 2023-06-16 17:13:45 +09:00
wataru
d7f5828710 WIP:common sample 2023-06-16 17:12:03 +09:00
wataru
87de3dc10f WIP:common sample 2023-06-16 16:53:33 +09:00
wataru
99cf22041f common sample 2023-06-16 16:49:55 +09:00
wataru
4d55e19bd0 query device exception handling 2023-06-16 16:12:15 +09:00
wataru
ca9bac0942 separate server device fin 2023-06-16 16:10:46 +09:00
wataru
8a8386640d WIP:separate server device 2023-06-16 15:06:35 +09:00
wataru
3c1d87751e remove unused comment 2023-06-16 13:25:30 +09:00
wataru
40eccd653f bugfix: rvc quality, gui improve: index default to 0.0 2023-06-16 11:32:23 +09:00
wataru
d7e541ffa7 move getting gpu info function to manager 2023-06-16 02:50:05 +09:00
wataru
bdad75699e update 2023-06-16 02:33:18 +09:00
wataru
60ef9145b9 update 2023-06-16 02:31:45 +09:00
wataru
328ea46161 update 2023-06-11 21:38:17 +09:00
wataru
0571381253 update 2023-06-11 21:37:55 +09:00
wataru
e0214e54f8 update 2023-06-11 21:25:46 +09:00
wataru
52a954ebaa WIP: multi lang 2023-06-11 13:25:44 +09:00
wataru
e6b58a8613 improve library exception 2023-06-11 10:55:26 +09:00
wataru
74d277714b test 2023-06-11 05:55:49 +09:00
wataru
c04dde82d2 bugfix: display gpu ram 2023-06-11 01:14:37 +09:00
wataru
631b9b3bf6 bugfix: server deivce 2023-06-10 21:12:03 +09:00
wataru
e5d5df17db bugfix: display clear button when index is registered 2023-06-10 20:40:13 +09:00
wataru
9f52168d59 bugfix: onnx upload. length filename for upload 2023-06-10 20:38:17 +09:00
wataru
adfdd3de9a bugfix: server device not update in dislay 2023-06-10 20:26:42 +09:00
wataru
012b6a76a9 model name dialog 2023-06-10 16:46:43 +09:00
wataru
c273a40f44 WIP: new gui 2023-06-10 13:01:46 +09:00
wataru
8c21d4e5ff WIP: new GUI 2023-06-09 19:57:08 +09:00
wataru
bc5fd76cc2 WIP: slot manager 2023-06-08 03:08:59 +09:00
wataru
16598b3034 WIP: model slot edit 2023-06-07 07:30:09 +09:00
wataru
4017e6c62c update 2023-06-05 15:28:43 +09:00
wataru
8d49db9d69 update 2023-06-05 15:28:03 +09:00
wataru
480735bb8d update 2023-06-05 15:27:13 +09:00
wataru
3bfd2cb746 update 2023-06-05 15:26:06 +09:00
wataru
da52b7446d update 2023-06-05 15:25:47 +09:00
wataru
48f3081442 update 2023-06-05 15:25:22 +09:00
wataru
f531821050 update 2023-06-05 15:25:12 +09:00
wataru
8501cb3d54 update 2023-06-05 15:25:00 +09:00
wataru
54df4ec325 update 2023-06-05 15:24:36 +09:00
wataru
4793f2f495 update 2023-06-05 15:24:21 +09:00
wataru
599dfc9874 update 2023-06-05 15:02:13 +09:00
wataru
cf347d9854 update 2023-06-05 15:01:28 +09:00
wataru
cb9afff8f2 update 2023-06-05 14:48:46 +09:00
wataru
30d1d10f16 update 2023-06-05 14:44:32 +09:00
wataru
0f7aeb462a update 2023-06-05 14:41:45 +09:00
w-okada
ed21f10663
Update issue templates 2023-06-05 14:38:41 +09:00
w-okada
e1e80397ce
Update issue templates 2023-06-05 14:38:10 +09:00
w-okada
da6698eb96
Update issue templates 2023-06-05 14:32:47 +09:00
wataru
b0baad1211 update 2023-06-05 05:47:41 +09:00
wataru
14259f1652 test sample 2023-06-05 05:00:57 +09:00
wataru
0aab867412 update 2023-06-05 04:09:58 +09:00
wataru
473f02951d bugfix: onnx nof0 no work 2023-06-05 04:08:03 +09:00
wataru
d6731f4adf strict cuda check 2023-06-05 02:02:48 +09:00
wataru
b3b8a347e1 update 2023-06-04 18:29:51 +09:00
wataru
66071835ac update 2023-06-04 18:27:22 +09:00
wataru
f2e2e87f18 nof0onnx not worked 2023-06-04 17:56:12 +09:00
wataru
3f4e68294a mps not support float64 2023-06-04 17:19:59 +09:00
wataru
26a59857b3 bugfix: halfprecision 2023-06-03 22:17:15 +09:00
wataru
dc7f9a0e15 update 2023-06-03 19:20:20 +09:00
wataru
6397784a2b update 2023-06-03 18:37:33 +09:00
wataru
9d6ae2fe2e improve half precision check, and fallback(exp.) 2023-06-03 18:05:10 +09:00
wataru
28fa21a6b4 improve half precision check, and fallback(exp.) 2023-06-03 17:15:59 +09:00
wataru
605e04f48f improve half precision check, and fallback(exp.) 2023-06-03 17:13:36 +09:00
wataru
35230d3a59 improve half precision check, and fallback(exp.) 2023-06-03 15:29:35 +09:00
wataru
38b614e88c bugfix: non indexfile bug 2023-06-03 02:06:36 +09:00
wataru
cb0be0bf17 update 2023-06-03 01:20:13 +09:00
wataru
70b3e7a5f5 update 2023-06-03 01:03:20 +09:00
wataru
105c3a23d5 update 2023-06-03 00:11:01 +09:00
wataru
7b323207c5 update 2023-06-02 23:50:05 +09:00
wataru
3a556ebc5f optimize starting RVC 2023-06-02 23:48:36 +09:00
wataru
2e96f8072a optimize convert 2023-06-02 23:33:46 +09:00
wataru
bfeef443f5 update 2023-06-02 01:59:51 +09:00
wataru
99f93f93a6 update 2023-06-02 01:58:33 +09:00
wataru
297cf319f1 update 2023-06-02 01:16:10 +09:00
wataru
6833ae4c3c updat 2023-06-02 00:52:30 +09:00
wataru
6cf6c815e9 update 2023-06-02 00:01:03 +09:00
wataru
326d7641ea add comment for protect 2023-06-01 13:57:21 +09:00
wataru
8685f9e5bf support protect 2023-06-01 13:28:45 +09:00
wataru
b53fd5c123 update 2023-06-01 04:14:07 +09:00
w-okada
ac7c751439
Merge pull request #276 from nadare881/master
protect + crepe対応
2023-06-01 04:13:36 +09:00
nadare
6b9777f3a2 protect + crepe対応 2023-05-31 23:50:43 +09:00
wataru
7cc9fb4fcf remove numpy int 2023-05-31 20:07:12 +09:00
wataru
d702714c34 fix directml message 2023-05-31 19:30:00 +09:00
wataru
7e971e2cb7 add directml notice 2023-05-31 19:05:34 +09:00
wataru
9818f6ec42 get pipeline info 2023-05-31 14:30:35 +09:00
wataru
c2efe5cba1 test model 2023-05-31 02:26:16 +09:00
wataru
96458c2bba merge msater 2023-05-29 21:55:02 +09:00
w-okada
dcfc1d83cf
Merge pull request #263 from nadare881/pyaudio_enhancement
Pyaudio enhancement
2023-05-29 21:49:58 +09:00
wataru
d45467a3c4 WIP: DML onnx inferencer 2023-05-29 17:34:35 +09:00
wataru
f1683cb4a8 model dir parameterized 2023-05-29 03:29:29 +09:00
wataru
21f098e8ec modification 2023-05-28 22:08:10 +09:00
nadare
00e163516b Merge branch 'pyaudio_enhancement' of https://github.com/nadare881/voice-changer into pyaudio_enhancement 2023-05-28 17:29:09 +09:00
nadare
52f0e496ef update resample 2023-05-28 16:48:18 +09:00
nadare
2b452ead0b mend 2023-05-28 16:47:13 +09:00
nadare
78ccc10a53 update resample 2023-05-28 16:36:36 +09:00
w-okada
1cccd90546
Merge pull request #261 from nadare881/master
fix infer faiss params
2023-05-28 11:30:57 +09:00
nadare
04847306af fix infer faiss params 2023-05-28 01:13:33 +09:00
wataru
4d6d5a27cb update 2023-05-27 00:10:32 +09:00
wataru
6224ec326e add server mode gain 2023-05-26 23:53:27 +09:00
wataru
39cd234268 MMVC minimum input length 2023-05-26 23:04:56 +09:00
wataru
18481feb7e update 2023-05-26 21:06:44 +09:00
wataru
895fd786e9 add version info 2023-05-26 17:56:41 +09:00
wataru
ca989775dd improve error handling 2023-05-26 16:52:05 +09:00
wataru
3d8dc7a9bd server device mode fallback 2023-05-26 16:26:17 +09:00
wataru
7746f3168f index value display bug 2023-05-26 08:32:27 +09:00
wataru
20303d9dfc update_ 2023-05-26 08:32:07 +09:00
wataru
64258ab089 update 2023-05-26 04:23:41 +09:00
wataru
976eaa6333 update 2023-05-25 16:00:30 +09:00
wataru
18d0012c29 update req.txt 2023-05-25 12:05:17 +09:00
wataru
21ec512239 update server req.tet 2023-05-25 11:50:34 +09:00
wataru
d98168ebbe fix:sample 2023-05-25 11:40:37 +09:00
wataru
3037c3d2f9 MMVCv15 ignore minimum input 2023-05-25 08:55:56 +09:00
wataru
3233377abd sample update 2023-05-24 20:49:24 +09:00
wataru
55ea032a86 WIP: DADAPAN 2023-05-24 16:56:23 +09:00
wataru
aa42c3f619 resolve security alert 2023-05-24 15:21:17 +09:00
wataru
b5419d3789 recunstruct npy 2023-05-24 15:09:25 +09:00
wataru
ba650f9be2 Merge branch 'master' into v.1.5.3 2023-05-22 18:49:29 +09:00
w-okada
dc0cb3ba9f
Merge pull request #242 from eltociear/patch-1
Fix typo in RVC.py
2023-05-22 15:24:16 +09:00
Ikko Eltociear Ashimine
451fc16693
Fix typo in RVC.py
EXSISTING -> EXISTING
2023-05-22 15:22:03 +09:00
wataru
1643628a69 crepe gui 2023-05-22 14:43:25 +09:00
w-okada
efc6e6d321
Merge pull request #238 from bugyo/rvc_crepe
Added CREPE F0 detection
2023-05-21 22:15:09 +09:00
wataru
606b10a1fa update 2023-05-21 13:17:04 +09:00
wataru
e4822120a7 input chunk num resolution 2023-05-21 12:26:18 +09:00
wataru
4cf43889c3 remove unused message 2023-05-21 12:13:11 +09:00
wataru
1405a276a9 WIP: support rvc v2 2023-05-21 11:50:28 +09:00
wataru
25bb1ee078 support rvc v2 onnx 2023-05-21 04:21:54 +09:00
wataru
3e32ced744 update 2023-05-21 04:20:49 +09:00
bugyo
d62a9fffd4 Added CREPE f0 detection 2023-05-20 16:33:17 +09:00
wataru
fef588b00b WIP: support RVCv2 2023-05-20 15:54:00 +09:00
wataru
11255790c8 updat 2023-05-19 11:30:38 +09:00
wataru
62cce76791 update sample 2023-05-19 05:34:24 +09:00
wataru
0204c76d69 update 2023-05-19 01:41:44 +09:00
wataru
0491d43afc update 2023-05-19 01:26:20 +09:00
wataru
5b01ca8c06 update 2023-05-19 00:59:13 +09:00
wataru
3bf1aacd05 add lang filter 2023-05-18 04:08:13 +09:00
wataru
e9c844b882 WIP: sample model 2023-05-18 02:51:40 +09:00
wataru
b10afc14b5 bugfix: terms of use in switch model 2023-05-17 22:18:28 +09:00
wataru
d52af3b466 improve merge 2023-05-17 21:55:07 +09:00
wataru
6d419a5702 bugfix: merged model folder 2023-05-17 13:09:35 +09:00
wataru
fa833b5b68 bugfix: model title 2023-05-17 12:47:14 +09:00
wataru
0379a0ea2e WIP: save upload models 2023-05-17 12:37:35 +09:00
wataru
1f56a6140a WIP: sample models 2023-05-17 07:20:43 +09:00
wataru
71683c859b remove tqdm 2023-05-16 20:56:17 +09:00
wataru
44593719f5 WIP: keep uploaded models 2023-05-16 10:38:23 +09:00
wataru
ffd2894d5e WIP:gui improve 1 2023-05-15 06:28:34 +09:00
wataru
d86e02ce1e model persistent 2023-05-15 04:24:58 +09:00
wataru
a1f1e492cb change padding 2023-05-15 02:20:49 +09:00
wataru
9918a60ff1 update 2023-05-14 02:14:39 +09:00
wataru
da98fd2478 add ddsp-svc solver selector 2023-05-14 01:04:29 +09:00
wataru
5205bf77ad fix: server device mode channel num 2023-05-13 15:23:23 +09:00
wataru
5ebd92bb4b update 2023-05-13 14:52:09 +09:00
wataru
6fecb5f908 fix: server device mode channel num 2023-05-13 14:30:15 +09:00
wataru
ea3c5b5740 update 2023-05-12 19:38:49 +09:00
wataru
6ac69f3091 bugfix: select model slot 2023-05-12 18:43:02 +09:00
wataru
e6938250b6 update 2023-05-12 09:54:55 +09:00
wataru
61564c2edf bugfix: tqdm freeze, add server device mode to sovitssvc 2023-05-12 07:47:57 +09:00
wataru
92caf3d5fc add merge message 2023-05-11 23:20:08 +09:00
wataru
a598823573 fix: load slot with no model 2023-05-11 19:36:36 +09:00
wataru
7b159f0f92 update 2023-05-11 03:45:21 +09:00
wataru
0826d1e14c bugfix: merge post process 2023-05-11 02:55:20 +09:00
wataru
28803c6b87 server device mode channel seting 2023-05-11 02:45:06 +09:00
wataru
0b14afbb61 update package.json 2023-05-10 20:42:58 +09:00
wataru
f592c8067c merge 2023-05-10 20:38:31 +09:00
wataru
520fde1477 update 2023-05-10 20:04:12 +09:00
wataru
813b666c58 bugfix: server mode, samplingrate 2023-05-10 15:01:26 +09:00
wataru
9ea33018cf color device by host api 2023-05-10 08:58:44 +09:00
wataru
46a5bf7f77 auido filter 2023-05-10 02:19:32 +09:00
wataru
42d40a79bd TEST: show performance 2023-05-10 01:26:38 +09:00
wataru
42708e7295 TEST: show performance 2023-05-10 01:06:34 +09:00
wataru
3ea18048ec remove unused comment 2023-05-10 01:02:28 +09:00
wataru
deea42a000 WIP: v.1.5.2.9_2 2023-05-10 00:51:51 +09:00
wataru
f9dcb5d7a6 WIP: v.1.5.2.9 2023-05-09 22:40:21 +09:00
wataru
75b575d81d bugfix: onnx inferencer nono 2023-05-09 19:20:07 +09:00
wataru
5a72d0a8cd WIP:server device and DDSP-SVC 2023-05-09 18:59:36 +09:00
wataru
1d91356268 WIP: DDSP 2023-05-09 05:04:34 +09:00
wataru
0723913a3b bugfix: analyzer device select 2023-05-09 02:10:25 +09:00
wataru
ff82ae986b WIP:improve model selector 2023-05-09 02:04:57 +09:00
wataru
426388872a WIP:improve model selector 2023-05-09 01:16:13 +09:00
wataru
751234e65b WIP:improve model selector (RVC) 2023-05-09 01:01:20 +09:00
wataru
069ebc22da WIP:improve model selector (so-vits-svc40v2) 2023-05-08 20:06:25 +09:00
wataru
0bb660ab2f WIP:improve model selector (so-vits-svc40) 2023-05-08 19:35:39 +09:00
wataru
270ffb6459 WIP:improve model selector (MMVCv15) 2023-05-08 18:58:51 +09:00
wataru
19e70606c8 WIP:improve model selector (MMVCv13) 2023-05-08 18:02:15 +09:00
wataru
3e0772d955 WIP DDSPSVC 2023-05-08 05:51:24 +09:00
w-okada
380f24ca81
Merge pull request #218 from TylorShine/add-some-dependencies
Add some dependencies for Windows
2023-05-07 23:22:23 +09:00
TylorShine
2c881479ed Add some dev dependencies for win 2023-05-07 22:12:30 +09:00
TylorShine
80b9acc712 add venv/ to .gitignore 2023-05-07 21:50:54 +09:00
wataru
af4cf4857e server audio 2023-05-07 04:18:18 +09:00
wataru
f4e409187e update 2023-05-05 04:38:44 +09:00
wataru
cfa6549a65 update 2023-05-05 04:13:18 +09:00
wataru
e570bf2e2a remove comment 2023-05-05 02:20:33 +09:00
wataru
61a9a9e47a test early access 2023-05-05 01:00:32 +09:00
wataru
5f3dd62f81 WIP: directml 2023-05-04 23:50:52 +09:00
wataru
f48319c350 embedder type - file mapping 2023-05-04 22:46:42 +09:00
wataru
15dae8f245 gain control change smallest value 2023-05-04 20:12:01 +09:00
wataru
617551db49 refactor pipeline 2023-05-04 17:15:53 +09:00
wataru
e14e823fec remove unused file 2023-05-04 16:19:13 +09:00
wataru
a7a989407c bugfix: onnxexport path 2023-05-04 15:20:36 +09:00
wataru
ec75219f18 change structure 2023-05-04 13:09:13 +09:00
wataru
b12c042bd8 gui improvement 2023-05-04 12:37:48 +09:00
wataru
4e03b34f51 Some small modifications 2023-05-04 12:34:47 +09:00
wataru
6f1b06a419 Some small modifications 2023-05-04 12:29:12 +09:00
wataru
3726a926b7 bugfix: f0detector 2023-05-04 12:21:34 +09:00
wataru
50ff96b3c5 imprpve gui: remove onnxprovider, model samplerate, half-precision, reload without initialize 2023-05-04 12:18:17 +09:00
wataru
807e88b93b update 2023-05-04 00:44:56 +09:00
wataru
a17554cbcc weight download 2023-05-04 00:27:31 +09:00
wataru
6721d64291 update 2023-05-03 23:35:38 +09:00
wataru
babbc2e9c7 change weight download process to serialize 2023-05-03 22:52:00 +09:00
wataru
3a4e534091 update 2023-05-03 22:36:59 +09:00
wataru
f2ba7e3938 update 2023-05-03 18:47:14 +09:00
wataru
7f1cdb9ddc update 2023-05-03 17:12:40 +09:00
wataru
48846aad7f WIP: Japanese Hubert 2023-05-03 13:14:00 +09:00
wataru
bfb2de9ea1 WIP: Japanese Hubert 2023-05-03 01:11:03 +09:00
wataru
6a01467ac8 WIP: Japanese Hubert 2023-05-02 22:29:28 +09:00
wataru
72fb482dc7 WIP: Japanese Hubert 2023-05-02 20:57:12 +09:00
wataru
7c70999f33 WIP: Japanese Hubert 2023-05-02 12:11:32 +09:00
wataru
7e8e31a8c0 WIP: Japanese Hubert 2023-05-02 12:11:00 +09:00
wataru
4faee09aa1 add trouble shoot communication 2023-05-02 08:59:09 +09:00
wataru
c58c93856c update 2023-05-01 21:43:45 +09:00
wataru
373df31f6c update 2023-05-01 21:42:12 +09:00
wataru
e7b3a38402 support model merge 2023-05-01 16:26:56 +09:00
wataru
17521975c1 merge models 2023-05-01 02:34:01 +09:00
wataru
cc4d7ebc9d update 2023-04-30 18:01:22 +09:00
wataru
093e01dd4e bugfix: clearsetting can not all data 2023-04-30 16:53:15 +09:00
wataru
37eba531e9 update 2023-04-29 09:14:38 +09:00
wataru
b2d61d369a Merge branch 'v.1.5.2' 2023-04-29 09:10:53 +09:00
wataru
5bd6906c1e update 2023-04-29 09:10:23 +09:00
w-okada
92a1fcc69e
Merge pull request #209 from nadare881/tutorial_for_rvc
英語版アップデートとreadmeからのリンクの張替え
2023-04-29 09:09:50 +09:00
nadare
005880cd78 英語版アップデートとreadmeからのリンクの張替え 2023-04-28 22:34:01 +00:00
wataru
d27e31f07f update docker 2023-04-29 07:21:50 +09:00
wataru
f6e40e6061 remove unused import 2023-04-29 07:05:44 +09:00
wataru
7487585d65 replace pm to dio 2023-04-29 05:39:53 +09:00
w-okada
29be0775ec
Merge pull request #206 from nadare881/tutorial_for_rvc
v.1.5.2.5用チュートリアルの更新(日本語のみ)
2023-04-28 22:23:24 +09:00
wataru
d3bf39c322 update 2023-04-28 22:22:42 +09:00
nadare
7db3047999
Merge branch 'master' into tutorial_for_rvc 2023-04-28 20:12:37 +09:00
nadare
28b996af76 コンフリクトの解決 2023-04-28 11:10:21 +00:00
nadare
90c9c764df 指摘事項の修正 2023-04-28 11:07:58 +00:00
wataru
1da21aa094 update docker 2023-04-28 19:06:31 +09:00
wataru
83623d1ab8 update 2023-04-28 18:09:20 +09:00
wataru
dd6a0bdb76 update 2023-04-28 17:54:39 +09:00
wataru
b7b107a73f update 2023-04-28 17:35:44 +09:00
wataru
569d8d2c0c update 2023-04-28 17:18:33 +09:00
wataru
50d1977d50 WIP: refactoring 2023-04-28 16:42:37 +09:00
wataru
96d7141976 WIP: refactoring 2023-04-28 14:49:17 +09:00
wataru
6fcbd07065 WIP: refactoring 2023-04-28 14:20:54 +09:00
wataru
b3d7946592 WIP: refactoring 2023-04-28 14:12:19 +09:00
wataru
4ac4a225a7 WIP: refactoring 2023-04-28 13:59:28 +09:00
wataru
c96609640d WIP: refactoring 2023-04-28 13:49:40 +09:00
wataru
bd3667117e WIP: refactoring 2023-04-28 10:56:52 +09:00
wataru
234595eeeb WIP: refactoring 2023-04-28 10:38:20 +09:00
wataru
37bb25682e WIP: refactoring 2023-04-28 10:37:55 +09:00
wataru
443fe1e720 WIP: refactoring 2023-04-28 10:30:07 +09:00
wataru
83083a68ac WIP: refactoring 2023-04-28 09:47:39 +09:00
wataru
4fc57153e7 WIP: refactoring 2023-04-28 08:46:34 +09:00
wataru
3ab5c9f3b8 WIP: refactoring 2023-04-28 08:01:15 +09:00
wataru
8121c3a849 WIP: refactoring 2023-04-28 07:36:08 +09:00
wataru
308fd190f3 WIP: refactoring 2023-04-28 06:39:51 +09:00
wataru
55118815b4 refactoring 2023-04-27 23:38:25 +09:00
wataru
a59631609c update 2023-04-27 08:36:44 +09:00
nadare
91a35fc688 v.1.5.2.5用チュートリアルの更新(日本語のみ) 2023-04-26 14:34:12 +00:00
wataru
1ad44bf98f update readme 2023-04-26 06:42:33 +09:00
w-okada
7d261a14c2
Merge pull request #203 from nadare881/tutorial_for_rvc
英語版チュートリアルの追加
2023-04-26 06:39:32 +09:00
wataru
8d80abddd2 update 2023-04-26 03:56:17 +09:00
wataru
d4802daaaa remove unused gui 2023-04-26 03:35:09 +09:00
nadare
e4086e4fd2 英語版チュートリアルの追加 2023-04-25 13:03:16 +00:00
wataru
dbbe11acbf update 2023-04-25 20:24:58 +09:00
wataru
0c84edf173 bugfix: isHalf things 2023-04-25 18:53:24 +09:00
wataru
e5ad4b9504 bugfix: mmvcv15 load only pytorch 2023-04-25 18:21:22 +09:00
wataru
d84e9a776b bugfix: same slot 2023-04-25 17:19:28 +09:00
wataru
228068b667 bugfix: onnx embedchannels load miss, refactor: modelslot 2023-04-25 16:59:58 +09:00
wataru
cbc454ebf7 improve gui 2023-04-25 16:15:13 +09:00
wataru
87e4ab0cb7 bugfix: same slot select 2023-04-25 15:01:19 +09:00
wataru
ca5eff8b35 update 2023-04-25 03:27:35 +09:00
wataru
87d9bf1800 Merge branch 'master' into v.1.5.2 2023-04-25 03:04:00 +09:00
wataru
777c2d6e1e WIP: support rvc-webui, refactoring 2023-04-25 03:03:38 +09:00
wataru
86798b3896 WIP: support rvc-webui, refactoring 2023-04-24 17:39:31 +09:00
wataru
cdceae9cf1 WIP: support rvc-webui, export onnxs is not support yet 2023-04-24 16:43:51 +09:00
w-okada
08d07c5997
Merge pull request #198 from nadare881/tutorial_for_rvc
RVC版のGUI説明の作成
2023-04-24 16:25:26 +09:00
nadare
5532bd4ad6 tutorial in japanese
画像の修正
2023-04-24 00:12:20 +00:00
wataru
11a536b03f WIP: support rvc-webui, pitch-less is not support yet 2023-04-24 05:54:36 +09:00
wataru
acfb7b601a WIP: support rvc-webui, pitch-less is not support yet 2023-04-24 03:25:31 +09:00
wataru
d3823183d6 WIP: support rvc-webui 2023-04-23 19:36:41 +09:00
wataru
2fa33aad8d WIP: support pitch-less and 768 2023-04-23 06:19:48 +09:00
wataru
ef025efd30 some bugfix and improve message 2023-04-23 05:09:19 +09:00
wataru
eba6e6aeda update 2023-04-22 16:41:39 +09:00
wataru
0250541fd0 bugfix:export onnx 2023-04-22 16:19:21 +09:00
wataru
045e4bbd10 update 2023-04-22 15:37:24 +09:00
wataru
5cc45dcc2e bugfix: export onnx 2023-04-22 15:12:10 +09:00
wataru
8a17da84cf improve mmvcv15 f0 setting 2023-04-22 08:40:50 +09:00
wataru
1fd3f04030 WIP: multi model 2023-04-22 07:57:51 +09:00
wataru
f8b589cc1d WIP: multi model 2023-04-22 05:42:24 +09:00
wataru
695152e138 WIP swap model 2023-04-22 02:37:38 +09:00
wataru
f95b63ea5f optimize swap model 2023-04-21 19:20:46 +09:00
wataru
47d69f19f3 bugfix: unknown slot 2023-04-21 16:51:03 +09:00
wataru
d12c5b1941 update 2023-04-21 16:34:32 +09:00
wataru
60dbecef9a update 2023-04-21 16:33:10 +09:00
wataru
257e5f99a4 MultiModel for RVC 2023-04-21 15:48:12 +09:00
wataru
3de900fbdf bugfix:audio input remains. 2023-04-20 17:38:27 +09:00
wataru
e073eed95c sending sample rate 2023-04-20 17:17:43 +09:00
wataru
2706810b4e remove unused logic(hubert upload) 2023-04-20 16:35:42 +09:00
wataru
c4e16b4955 default sampling rate for communication is set to 48K. Some advanced setting are removed. 2023-04-20 16:15:57 +09:00
wataru
04c009416a fix: requirements.txt to avoid librosa conflict 2023-04-20 01:48:17 +09:00
wataru
6c3e151c7b update 2023-04-20 01:18:11 +09:00
wataru
33f333c63c update 2023-04-20 01:06:56 +09:00
wataru
16dbcabdd9 remove unused 2023-04-20 00:44:32 +09:00
wataru
652a8b1685 WIP Docler 2023-04-20 00:43:28 +09:00
wataru
75ebbe890c update 2023-04-19 13:38:56 +09:00
wataru
8c1e48d97c update 2023-04-19 13:36:44 +09:00
wataru
2b8236a9b2 update 2023-04-19 13:35:37 +09:00
wataru
253697f5d6 bugfix: mmvcv1.5 no pytorch model inference 2023-04-19 12:36:23 +09:00
wataru
8a650f4643 WIP:fix requirement 2023-04-19 11:32:31 +09:00
wataru
a68bd1d899 update 2023-04-19 09:36:10 +09:00
wataru
f65fedce15 bugfix: delete colab 2023-04-19 08:27:19 +09:00
wataru
5f41d8100d bugfix: delete colab 2023-04-19 08:22:08 +09:00
wataru
95586403c8 release for 1.5.2.3a 2023-04-19 08:03:06 +09:00
wataru
6f87ca7a39 silence front for RVC 2023-04-19 07:57:19 +09:00
wataru
3ad903fad6 DDSP-SVC: silent-front, auto_adaptive_key 2023-04-19 04:30:56 +09:00
wataru
513a85e6c7 refactoring 2023-04-19 03:49:37 +09:00
wataru
3853bd6ccf refactoring 2023-04-19 03:35:04 +09:00
wataru
a82a1ecd71 reactor main argument 2023-04-19 03:06:45 +09:00
wataru
f4b93ac3e8 update 2023-04-18 17:09:46 +09:00
wataru
599fe42710 bugfix: f0detector 2023-04-18 12:00:49 +09:00
wataru
2ceea78fd1 bugfix: f0detector 2023-04-18 11:53:44 +09:00
wataru
79b545a0f1 update 2023-04-18 09:52:21 +09:00
wataru
ca665796ef update 2023-04-18 09:49:47 +09:00
wataru
04d3937818 dstid selector for ddsp-svc 2023-04-18 08:09:46 +09:00
wataru
975fea2458 bugfix: audio input none 2023-04-18 07:17:50 +09:00
wataru
c2757716ba update launcher 2023-04-18 05:12:47 +09:00
wataru
7d96ab4264 mps 2023-04-18 04:32:43 +09:00
wataru
a7e907370d WIP:mps 2023-04-18 03:06:31 +09:00
wataru
0df0270d25 update for prod 2023-04-17 13:34:39 +09:00
wataru
2d19b5ff65 bugfix: DDSP SVC initail update 2023-04-17 10:35:16 +09:00
wataru
e4ac5e74db improve error handling 1 2023-04-17 09:45:12 +09:00
wataru
390a39fa64 WIP: support DDSP-SVC 2023-04-17 04:37:22 +09:00
wataru
eb37febce8 WIP:DDSP-SVC 2023-04-16 21:34:00 +09:00
wataru
84ca7974e9 WIP:multi 3 2023-04-16 11:08:03 +09:00
wataru
e2f08a17d4 WIP:multi 2 2023-04-16 09:56:12 +09:00
wataru
e1e1f94fa3 WIP: multi 2023-04-16 00:38:48 +09:00
wataru
707096b48c experimental hugging face 2023-04-16 00:37:14 +09:00
wataru
d85bbae478 apply sola for all vc forcely 2023-04-15 04:58:56 +09:00
wataru
b3a95b2f7e sola for so-vits-svc40v2 2023-04-15 04:47:40 +09:00
wataru
bc09f90bd3 sola for so-vits-svc40 2023-04-15 04:42:54 +09:00
wataru
74a8674b63 sola for mmvcv15 2023-04-15 04:36:41 +09:00
wataru
e3385b8804 sola for mmvcv13 2023-04-15 04:25:49 +09:00
wataru
e342d53b76 sola for mmvcv13 2023-04-15 04:25:30 +09:00
wataru
f782ebb320 Merge branch 'master' of github.com:w-okada/voice-changer 2023-04-14 22:39:48 +09:00
wataru
b41de02624 bugfxi: onnx for cpu 2023-04-14 16:38:08 +09:00
wataru
1c8d891a7d re-support onnx export for cpu 2023-04-14 15:48:38 +09:00
wataru
4171baa6de update 2023-04-14 15:25:52 +09:00
wataru
bb769cf6c2 update 2023-04-14 15:20:28 +09:00
wataru
42da74d557 update 2023-04-14 15:19:09 +09:00
wataru
8ddbb96500 update 2023-04-14 13:48:31 +09:00
wataru
ac573a6961 update 2023-04-14 13:35:52 +09:00
wataru
44ce9a5368 fix url to manual 2023-04-14 11:45:37 +09:00
wataru
d9caa75a92 improve some gui 2023-04-14 11:03:52 +09:00
wataru
2c63803f83 support sola 2023-04-14 09:18:34 +09:00
wataru
58b3aaa5fe bugfix: update onnx export status 2023-04-13 09:09:01 +09:00
wataru
f1b700ea5d support onnx generater 2023-04-13 08:00:28 +09:00
w-okada
7324e4f1c8
Merge pull request #162 from w-okada/v.1.5.2
V.1.5.2
2023-04-13 06:52:55 +09:00
wataru
0d3c97e9fe update 2023-04-13 06:51:03 +09:00
wataru
039c4b7006 refactor: cherry pick from https://github.com/w-okada/voice-changer/pull/158. Timer and VoiceChangerModel 2023-04-13 01:13:25 +09:00
wataru
fbe2cfad68 update 2023-04-12 13:56:43 +09:00
wataru
db8835ff2f update 2023-04-12 13:56:12 +09:00
wataru
9938c24b00 update 2023-04-12 13:55:23 +09:00
wataru
fc61dd8d7e update 2023-04-12 08:25:48 +09:00
wataru
da4253abbb update 2023-04-12 08:20:50 +09:00
wataru
0010c7d695 update 2023-04-12 08:19:53 +09:00
wataru
d811ebebd0 update 2023-04-12 06:48:18 +09:00
wataru
0afe5bc381 update 2023-04-12 06:47:18 +09:00
wataru
b9c3e84c79 update 2023-04-12 06:45:48 +09:00
wataru
90cf803913 update 2023-04-12 06:44:14 +09:00
wataru
f02489a86f bugfix remove module 2023-04-11 07:37:39 +09:00
wataru
b57ddc180c WIP:VC select 2023-04-11 03:07:14 +09:00
wataru
4cc02540ea WIP:VC select 2023-04-11 00:21:17 +09:00
w-okada
bd6080c52e
Merge pull request #157 from frodo821/master
スペルミスを修正した
2023-04-10 09:45:41 +09:00
frodo821
2ef04456a1
ignore type mismatch 2023-04-10 09:34:03 +09:00
frodo821
cb6a58550c
fixed type errors 2023-04-10 09:28:00 +09:00
frodo821
adcc0a2d86
Add ModelType for valid model type names 2023-04-10 09:05:14 +09:00
frodo821
138d17719c
fixed class name VocieChangerSettings to VoiceChangerSettings 2023-04-10 08:24:25 +09:00
frodo821
dfe2f502c8
fixed misspelling
Vocie -> Voice
2023-04-10 08:18:14 +09:00
frodo821
9afe6b79ec
fixed miss-spelling
setteings -> settings
2023-04-10 08:13:17 +09:00
wataru
fb1be8b4c1 remove unused comment 2023-04-09 10:42:01 +09:00
wataru
f9dc45870a update 2023-04-09 02:50:14 +09:00
wataru
00ee870d8c update 2023-04-08 16:01:27 +09:00
wataru
d69f7a405c remove unused comment 2023-04-08 13:11:33 +09:00
wataru
0d06fcd16b customize pipline 2023-04-08 05:34:26 +09:00
wataru
e780af7fc2 WIP: refactor 2023-04-08 05:17:57 +09:00
wataru
4e0d2a24a3 bugfix notm match sending sampling rateand input sampling rate to rvc 2023-04-08 05:04:59 +09:00
wataru
5465f6e1c3 sendig sample rate default 48000 to rvc 2023-04-08 04:56:32 +09:00
wataru
3fefc528ab add sampling rate to rvc 2023-04-08 04:39:04 +09:00
wataru
36c6798f14 dio and pm 2023-04-08 04:09:53 +09:00
wataru
f1bd7db7c1 half precision to onnx 2023-04-08 04:03:48 +09:00
wataru
60bffb61a5 add half-precision select to rvc 2023-04-08 03:56:40 +09:00
wataru
04b9bb1ac3 add feature and index to RVC 2023-04-08 03:11:37 +09:00
wataru
f68366c22a WIP: gui commonize 2 2023-04-07 14:45:57 +09:00
wataru
debfbf83d7 WIP: gui commonize 2 2023-04-07 14:07:03 +09:00
wataru
79abc3d667 WIP: gui commonize 2 2023-04-07 05:26:42 +09:00
wataru
771235be66 WIP: gui commonize 2 2023-04-07 05:21:47 +09:00
wataru
a9eafb4a60 update 2023-04-06 07:56:00 +09:00
wataru
26bab1bb6e update 2023-04-06 07:29:54 +09:00
wataru
cbe99e7914 update 2023-04-06 07:16:29 +09:00
wataru
7b092dd787 update 2023-04-06 06:55:10 +09:00
wataru
fc4ff2bd35 update 2023-04-06 06:53:00 +09:00
wataru
c07915283b update 2023-04-06 06:51:55 +09:00
wataru
070412d787 update 2023-04-06 05:11:33 +09:00
wataru
28782c051a WIP: 2023-04-06 04:27:46 +09:00
wataru
eaa0c58243 WIP: hubert 2023-04-06 04:03:09 +09:00
wataru
cbd3c293f8 WIP: hubert 2023-04-06 03:14:37 +09:00
wataru
9512fd5ae2 WIP: eliminate ffmpeg 2023-04-06 03:07:45 +09:00
wataru
689d3a4cdc WIP: eliminate ffmpeg 2023-04-06 02:49:16 +09:00
wataru
1fd0422b43 WIP: supprt vrc 2023-04-06 02:38:50 +09:00
wataru
c9aaf751f0 WIP: supprt vrc 2023-04-06 02:33:40 +09:00
wataru
fe95cf02c0 WIP 2023-04-06 02:33:06 +09:00
wataru
8d3b4e1c7d WIP: supprt vrc 2023-04-06 02:31:10 +09:00
wataru
98e14a9d4a updat 2023-04-05 18:08:06 +09:00
wataru
4251e1ca7c WIP: gui commonize 2 2023-04-05 04:15:22 +09:00
wataru
d77739707a wip:support m1 mac 1 2023-04-05 04:15:07 +09:00
wataru
568e06ed2f WIP: gui commonize 3 2023-04-05 03:35:16 +09:00
wataru
604846b0c6 WIP: gui commonize 2 2023-04-05 02:31:06 +09:00
wataru
2adfb7c910 WIP: gui commonize 2023-04-04 16:38:30 +09:00
wataru
6d53d4ccf4 remove comment 2023-04-03 22:33:53 +09:00
wataru
a1e05ffb62 update 2023-04-03 18:52:09 +09:00
wataru
7f40fcfd47 update contentvec layer9 2023-04-03 17:33:28 +09:00
wataru
5ec945faac hubert 2023-04-03 03:13:08 +09:00
wataru
586d83c550 modify animation setting, update supportting onnx for mmvc v.1.5.x 2023-04-03 01:22:44 +09:00
wataru
9718afaa0d update 2023-04-02 11:51:26 +09:00
wataru
0336e0f526 add kurage 2023-04-02 09:49:28 +09:00
wataru
7019f31308 remove 40v2_c 2023-04-02 03:17:32 +09:00
wataru
9cec875081 add credit for replica doll 2023-04-02 03:13:40 +09:00
wataru
5d0db91f45 remove tsukuyomi_demo, add link for recorder 2023-04-02 03:04:11 +09:00
wataru
12a182e258 update 2023-04-01 15:45:56 +09:00
wataru
246eebbce6 update 2023-04-01 10:57:15 +09:00
wataru
7d03872acb update 2023-04-01 03:07:36 +09:00
wataru
2a25e75154 bugfix 2023-03-31 22:28:59 +09:00
wataru
ac2af5c08f bugfix: kikoto assets 2023-03-31 22:16:24 +09:00
wataru
75406e49c7 update 2023-03-31 21:14:48 +09:00
wataru
4136b52108 update 2023-03-31 21:12:06 +09:00
wataru
d9479e2a0e update 2023-03-31 00:53:00 +09:00
wataru
4db43592f1 add kikoto_mahiro 2023-03-30 11:11:41 +09:00
wataru
e10c832b46 hubert 2023-03-30 00:22:37 +09:00
wataru
f0fbf58258 hubert 2023-03-30 00:16:26 +09:00
wataru
4bbcbd66bc WIP: support hubert onnx 1 2023-03-29 23:11:35 +09:00
wataru
06770746d9 WIP: DDSP_SVC support 2023-03-29 23:11:03 +09:00
wataru
fa2365c95e update 2023-03-28 09:26:03 +09:00
wataru
035d64db6a update package 2023-03-27 23:05:30 +09:00
wataru
200d6713b6 improve message 2023-03-27 15:07:08 +09:00
wataru
be771843b1 update 2023-03-27 15:05:47 +09:00
wataru
9e9a289d63 update 2023-03-27 10:31:04 +09:00
wataru
47ea4ffb36 bugfix: show charactername index.html 2023-03-26 16:14:39 +09:00
wataru
15c83391b9 update 2023-03-26 14:57:48 +09:00
wataru
09c0ecff3e bugfix: charcter resource 2023-03-26 00:33:34 +09:00
wataru
fab386af69 character resources moved 2023-03-25 22:57:23 +09:00
wataru
582e200d6a amitaro image update 2023-03-25 22:38:06 +09:00
wataru
b413eeea85 bugfix: removed audio output, not volume notify 2023-03-25 21:36:03 +09:00
wataru
61f485756d support amitaro 2023-03-25 20:52:06 +09:00
wataru
8a4e76795a WIP: support DDSP_SVC 2023-03-24 16:19:01 +09:00
wataru
807120201f update 2023-03-24 16:18:05 +09:00
wataru
3c1c785dfa 8. checking 2023-03-24 10:52:36 +09:00
wataru
f3374ba21a 7. mv mask 2023-03-24 10:27:45 +09:00
wataru
67a104af8b 6 remove silent 2023-03-24 10:00:08 +09:00
wataru
ffeb745f83 5.5 mv volume 2023-03-24 09:56:17 +09:00
wataru
1143ad88fd 5. mv volume 2023-03-24 09:47:14 +09:00
wataru
0de24ca000 5. mv f0 2023-03-24 09:42:21 +09:00
wataru
dcc782216f 4. remove segment process 2023-03-24 09:40:12 +09:00
wataru
ae3b7e8f76 3. move hubert 2023-03-24 09:38:23 +09:00
wataru
9f7533c037 2nd:remove tqdm 2023-03-24 09:00:51 +09:00
wataru
a32cd29f51 1st return 2023-03-24 08:56:15 +09:00
wataru
a180dfa7e4 prepare for characters 2023-03-24 08:47:50 +09:00
wataru
6bcdf53c97 prepare for characters 2023-03-24 08:44:06 +09:00
wataru
8c7c6994b3 update 2023-03-22 08:59:55 +09:00
wataru
28b71a37e6 update 2023-03-22 08:00:33 +09:00
wataru
8903557df0 re-add f0 2023-03-22 02:59:43 +09:00
wataru
7b2b07a4bf remove analyzer 2023-03-21 23:10:32 +09:00
wataru
ae132e0c0f bugfix: cluster 2023-03-20 11:13:19 +09:00
wataru
fd2a8d7736 update 2023-03-20 10:05:07 +09:00
wataru
71937a6fd9 update 2023-03-20 10:04:27 +09:00
wataru
baa0537208 remove pyplot 2023-03-20 06:21:00 +09:00
wataru
d004c9ebed delete unused asset 2023-03-20 05:43:37 +09:00
wataru
40368d0466 update 2023-03-20 03:42:55 +09:00
wataru
a647abcef7 update 2023-03-20 03:38:54 +09:00
wataru
f7f7f96496 update 2023-03-20 03:37:32 +09:00
wataru
99dae6e553 update 2023-03-20 03:20:28 +09:00
wataru
98d115a799 update 2023-03-20 02:42:45 +09:00
wataru
dc0c69476f update 2023-03-20 02:36:49 +09:00
wataru
5517be5243 update 2023-03-20 02:36:43 +09:00
wataru
2b10c3e872 update 2023-03-20 01:48:05 +09:00
wataru
0b554f18f6 update 2023-03-20 01:46:45 +09:00
wataru
ad625ef393 bugfix: calc cluster 2023-03-19 09:57:36 +09:00
wataru
9e96281f03 bugfix: calc cluster 2023-03-19 08:06:19 +09:00
wataru
4885e3a7e1 bugfix: calc cluster 2023-03-19 07:41:17 +09:00
wataru
8ab5d74abd support so-vits-svc 4.0 2023-03-19 01:43:36 +09:00
wataru
7524fe4ad5 update 2023-03-18 12:06:37 +09:00
wataru
7aebcac434 update 2023-03-18 11:12:45 +09:00
wataru
4c7c00ccbc update 2023-03-18 07:32:58 +09:00
wataru
43eb4d5e83 support so-vits-svc.alpha onnx 2023-03-18 06:30:50 +09:00
wataru
a758dd1595 add protocol for cloudfront 2023-03-17 15:42:59 +09:00
wataru
d1437ba71f update: requirement, help 2023-03-17 15:40:55 +09:00
wataru
29a25e4dcb update requirement 2023-03-17 03:47:56 +09:00
wataru
087d0b5722 update requirement 2023-03-17 02:37:31 +09:00
wataru
1dbd8b6679 update 2023-03-17 00:45:52 +09:00
wataru
29aa1fd368 update 2023-03-16 16:14:28 +09:00
wataru
a8ebece8d4 update 2023-03-16 16:12:09 +09:00
wataru
44fd993dbc update 2023-03-16 16:09:30 +09:00
wataru
45a3872dc6 update 2023-03-16 16:06:14 +09:00
wataru
46628277f1 update 2023-03-16 11:08:00 +09:00
wataru
03d481ab67 externalize content vec model 2023-03-16 08:11:38 +09:00
wataru
c089e6bc51 wip:support m1 mac 1 2023-03-16 01:20:53 +09:00
wataru
c85a16054f wip:support m1 mac 1 2023-03-16 00:46:30 +09:00
wataru
53fc89fb9a bugfix: model type typo 2023-03-15 22:43:59 +09:00
wataru
680c7fc71f tuskuyomi-chan first 2023-03-15 08:56:17 +09:00
wataru
89266ba006 split input node/output audioworklet 2023-03-15 06:39:33 +09:00
wataru
ceb458e2ce python clinet 2023-03-15 02:39:34 +09:00
wataru
3e5ed4dac1 add license 2023-03-14 22:40:32 +09:00
wataru
5b2519d0e9 butfix: An exception occurred due to a negative dstId 2023-03-14 18:57:18 +09:00
wataru
ca4ae3b417 bugfix: invoke without cluster 2023-03-14 11:12:58 +09:00
wataru
4641a6d515 bugfix: null check 2023-03-14 11:04:00 +09:00
wataru
c5b9bc3a3f boot process improvement 2023-03-14 10:53:34 +09:00
wataru
398921dd25 WIP: support so-vits-svc 40v2. gui improve. 2023-03-14 10:47:29 +09:00
wataru
39fab4afc1 WIP: support so-vits-svc 40v2. dstID list from server. 2023-03-14 10:44:05 +09:00
wataru
1f33cd547d WIP: support so-vits-svc 40v2. change policy to load hubert model from local. 2023-03-14 09:57:52 +09:00
wataru
76ddef5ee1 WIP: support so-vits-svc 40v2. can not store content vec in indexeddb. 2023-03-14 05:18:37 +09:00
wataru
d5cc5c9e28 hubert/content vec uploader 2023-03-13 21:07:35 +09:00
wataru
dd30c70f87 update links 2023-03-13 12:01:33 +09:00
wataru
844c52d749 TEST:browser open test3 2023-03-13 11:42:43 +09:00
wataru
fe03db85fd TEST:browser open test3 2023-03-13 11:34:32 +09:00
wataru
8c27eade1c TEST:browser open test3 2023-03-13 11:12:19 +09:00
wataru
edc90e5bae TEST:browser open test2 2023-03-13 10:59:28 +09:00
wataru
e509693fc1 TEST:browser open test 2023-03-13 10:44:37 +09:00
wataru
9c62da1a5d improve gui for so-vits-svc 2023-03-13 09:25:35 +09:00
wataru
0fc36c91af update import 2023-03-13 07:26:07 +09:00
wataru
d2e2f1fe4f gain cotrol (remove unused comment) 2023-03-13 03:38:39 +09:00
wataru
4504f26fae gain cotrol 2023-03-13 03:32:21 +09:00
wataru
9da9467f38 update 2023-03-13 02:54:15 +09:00
wataru
ef6fdd8d49 WIP: so-vits-svc 40v2, alpha (refactoring4 apply for v13) 2023-03-13 02:48:56 +09:00
wataru
5818292046 WIP: so-vits-svc 40v2, alpha (refactoring4 apply for v15) 2023-03-13 02:40:04 +09:00
wataru
7a2fd74d6c WIP: so-vits-svc 40v2, alpha (refactoring3) 2023-03-13 02:09:05 +09:00
wataru
acc848fda4 WIP: so-vits-svc 40v2, alpha (refactoring2) 2023-03-13 02:06:39 +09:00
wataru
ddcae23f20 WIP: so-vits-svc 40v2, alpha (refactoring) 2023-03-13 01:36:14 +09:00
wataru
ca4d454d1a WIP: so-vits-svc 40v2, alpha (before refactoring) 2023-03-13 00:54:49 +09:00
wataru
01f64cc8ec update 2023-03-11 09:53:10 +09:00
wataru
085a256499 update 2023-03-11 09:26:02 +09:00
wataru
ef9f63b8df WIP: support so-vits-svc, client3 2023-03-11 08:37:41 +09:00
wataru
fe88ada373 WIP: support so-vits-svc, client2 2023-03-11 08:25:54 +09:00
wataru
4129aff8c1 WIP: support so-vits-svc, client 2023-03-11 08:21:16 +09:00
wataru
3b0c792c5a WIP: support so-vits-svc, debug dstid 2023-03-11 04:50:59 +09:00
wataru
15dc87c407 WIP: support so-vits-svc, suppress log 2 2023-03-11 04:30:44 +09:00
wataru
87f7429501 WIP: support so-vits-svc, suppress log, update setting parameter 2023-03-11 04:19:59 +09:00
wataru
a5c7414fc3 WIP: support so-vits-svc, apply hopsize to convert size 2023-03-11 04:02:40 +09:00
wataru
d7cff0709f WIP: support so-vits-svc, message impruvement 2023-03-11 03:59:03 +09:00
wataru
010eb395ef WIP: so-vits-svc, chunk error 2023-03-11 02:31:10 +09:00
wataru
a49a1f4558 WIP: add so-vits-svc 2023-03-11 01:56:10 +09:00
wataru
5ea82af9b3 default server setting by model type 2023-03-09 06:55:57 +09:00
wataru
85e51bd3a9 separate indexeddb by model type 2023-03-09 06:47:11 +09:00
wataru
bdf11d9206 WIP: refactor, model switcher for native 3 mac 2023-03-09 04:23:32 +09:00
wataru
a6efaaa381 WIP: refactor, model switcher for native 2 2023-03-08 15:18:00 +09:00
wataru
57ac020547 WIP: refactor, model switcher for native 2023-03-08 09:54:55 +09:00
wataru
7fa6de855d WIP: refactor, model switcher 2023-03-08 09:48:50 +09:00
wataru
cdb3234111 WIP: refactor, merge v13 2023-03-08 02:26:17 +09:00
wataru
3ad682dba2 WIP: refactor, swicher model type 2023-03-08 01:46:08 +09:00
wataru
c14ea07dd5 WIP: refactor, move v13 2023-03-08 01:40:03 +09:00
wataru
bbb068be72 WIP: refactor, separate mmvc main process 2023-03-08 00:38:09 +09:00
wataru
6f97320c0d WIP: refactor, break down generate input 2023-03-07 23:14:14 +09:00
wataru
f76fff5959 WIP: refactor, separate io analyzer, io recorder from main class 2023-03-07 22:30:48 +09:00
wataru
18a87d9d24 WIP: refactor, commonalize crossfade process -> remove unused vars 2023-03-07 21:46:43 +09:00
wataru
49291a1de2 WIP: refactor, commonalize crossfade process 2023-03-07 20:55:10 +09:00
wataru
b9741fe577 WIP: refactor, generalize generateStrength 2023-03-07 11:49:06 +09:00
wataru
9a6b9851db update 2023-03-02 13:43:39 +09:00
wataru
07d3a968dd bugfix: loop when update correspondense 2023-03-02 10:48:57 +09:00
wataru
2001aa70d2 remove unused comment 2023-03-02 10:31:59 +09:00
wataru
3328749f29 update 2023-03-02 10:21:28 +09:00
wataru
36087eeace update 2023-03-02 09:57:21 +09:00
wataru
72e7859174 update 2023-03-02 09:56:42 +09:00
wataru
fde356be4d update 2023-03-01 22:33:51 +09:00
wataru
bfe826001b update 2023-03-01 21:56:33 +09:00
wataru
3ba4d011de update 2023-02-28 20:45:08 +09:00
wataru
31cd9437ef add trancate buffer function 2023-02-28 11:54:40 +09:00
wataru
622fa4a64e clear audio output setting 2023-02-28 10:46:38 +09:00
wataru
694b5a3590 update 2023-02-24 07:29:33 +09:00
wataru
dabbf51322 bug fix: worklet outputnum 2023-02-24 02:51:52 +09:00
wataru
cf34cb6bee update 2023-02-22 22:16:13 +09:00
wataru
a24f6ff5ab update 2023-02-22 14:56:03 +09:00
w-okada
7d81ecbbff
Merge pull request #139 from w-okada/v.1.5.0
V.1.5.0
2023-02-22 14:38:32 +09:00
wataru
daa4a9c637 merge 2023-02-22 14:37:54 +09:00
wataru
7e0efb0c1c update 2023-02-22 11:55:41 +09:00
wataru
786be0878d update 2023-02-22 11:53:20 +09:00
wataru
93769ddcda separate indexdeb per version 2023-02-22 11:28:23 +09:00
wataru
ccd0176c1e update 2023-02-22 09:48:16 +09:00
wataru
5e971d4dc0 update 2023-02-22 09:47:35 +09:00
wataru
35ca5a7618 fix some bugs 2023-02-22 07:35:26 +09:00
wataru
98db8862b5 some small bug fixed 2023-02-21 17:54:02 +09:00
wataru
34749d9d6a bugfix: when imigrate from v.1.3 to v.1.5, f0factor is not found 2023-02-21 17:21:36 +09:00
wataru
d62f4cc124 update 2023-02-21 09:50:50 +09:00
wataru
341b05dc2f WIP support onnx trial 2023-02-21 09:17:59 +09:00
wataru
7a1391ce08 update 2023-02-21 06:45:26 +09:00
wataru
42ce1b498d bugfix: default sample rate to 24k 2023-02-21 06:03:37 +09:00
wataru
9a1a9245c8 bugfix: multi-processing trial gabage. looping instanciate voice changer.. 2023-02-21 05:53:15 +09:00
wataru
b453868f97 update 2023-02-21 04:57:06 +09:00
wataru
1278094ccd update 2023-02-21 04:56:30 +09:00
wataru
1661a062db bugfix: fit audio size to hopsize 2023-02-21 04:34:52 +09:00
wataru
2cfc7b2887 update 2023-02-21 04:07:43 +09:00
wataru
eeb940480e bugfix 2023-02-20 07:46:33 +09:00
wataru
0fa7a13aef bugfix: default record id is 0 2023-02-20 07:14:05 +09:00
wataru
1c4ce29d56 update 2023-02-20 05:09:38 +09:00
wataru
1edc79864a update 2023-02-20 05:08:54 +09:00
wataru
eb12f3db64 EXP. remove microphone stream 4, fin 2023-02-20 04:49:34 +09:00
wataru
fccd631c00 EXP. remove microphone stream 3 2023-02-20 02:28:56 +09:00
wataru
bde893b665 EXP. remove microphone stream 2 2023-02-20 02:21:51 +09:00
wataru
de0be188ff EXP. remove microphone stream 2023-02-20 01:00:28 +09:00
wataru
11d6bd414c WIP: refactoring..., default noise supress is disabled 2023-02-19 23:55:05 +09:00
wataru
d0eef70109 WIP: refactoring..., src id default bug fix 2023-02-19 20:05:32 +09:00
wataru
a5d4b5dfe2 WIP: refactoring... 2023-02-19 19:31:34 +09:00
wataru
091b72e291 WIP: refactoring... 2023-02-19 19:22:00 +09:00
wataru
12e717d1b7 WIP: refactoring... 2023-02-19 14:20:37 +09:00
wataru
e1d2660a59 WIP: refactoring, passthru server config 2 2023-02-19 10:20:58 +09:00
wataru
98ad3b4ff0 WIP: refactoring, passthru server config 2023-02-19 10:12:25 +09:00
wataru
096ada6e3d WIP: refactoring, change overlaprate to overlapsize 2023-02-19 06:25:22 +09:00
wataru
6b78c57204 WIP: refactoring 2023-02-19 04:56:16 +09:00
wataru
15686caf50 server resampling added 2023-02-18 20:53:15 +09:00
wataru
c6309b83f8 python client update 2023-02-18 20:52:39 +09:00
wataru
fc5c4aa2fb WIP: local auido 2023-02-18 09:30:50 +09:00
wataru
b97dc18654 WIP: local mic 2023-02-18 04:15:34 +09:00
wataru
be9695307a add pyaudio 2023-02-17 13:10:17 +09:00
wataru
63d58b82b5 update 2023-02-17 04:33:26 +09:00
wataru
0776383e03 update 2023-02-17 04:32:59 +09:00
wataru
8e2603b91e update 2023-02-17 04:29:31 +09:00
wataru
de683de7a3 update 2023-02-17 04:15:31 +09:00
wataru
db101b788a update 2023-02-17 03:59:28 +09:00
wataru
eab6d2abea update 2023-02-17 03:47:43 +09:00
wataru
84e7ed0c91 default gui 2023-02-17 03:12:05 +09:00
wataru
b7b1e583ee bugfix: analyzer 2023-02-17 03:03:21 +09:00
wataru
bde3bc5933 Add Analyzer 2023-02-17 02:11:03 +09:00
wataru
335771fe77 WIP: analyzer 2023-02-17 01:01:32 +09:00
wataru
eaf310c00b WIP: improve gui: add accordion 2023-02-17 00:09:56 +09:00
wataru
27c5d54cc5 remove subtitle 2023-02-16 03:51:15 +09:00
wataru
47489571da quality control update 2023-02-15 07:18:05 +09:00
wataru
25a673b66f automatic f0 setting 2023-02-15 05:09:38 +09:00
wataru
f73178b9b0 add quality control 2023-02-15 05:02:51 +09:00
wataru
852b4216ca add downsampling mode 2023-02-14 22:32:25 +09:00
wataru
9ff8dad6b8 change link for doc v.1.5 2023-02-13 03:33:51 +09:00
wataru
99a9b854d3 add mac alpha ver for v.1.5 2023-02-13 03:32:32 +09:00
wataru
ee0b957510 Merge branch 'master' of github.com:w-okada/voice-changer 2023-02-13 02:58:21 +09:00
wataru
05b060a165 add alpha binary for 1.5 2023-02-13 02:58:04 +09:00
wataru
9d84046a77 update package 2023-02-12 23:42:39 +09:00
wataru
83646c130b bugfix: for win exe 2023-02-12 22:14:34 +09:00
wataru
17ac07e263 bugfix vf disabled 2023-02-12 18:50:10 +09:00
wataru
b87f7983b3 add gain control 2023-02-12 18:19:22 +09:00
wataru
59a56d5507 support v.1.5.x first version fin. 2023-02-12 17:23:26 +09:00
wataru
6be21bf8fc cleaning 2023-02-12 17:09:47 +09:00
wataru
affc55cb24 WIP: support v1.5.x, add recording output function 3 2023-02-12 17:07:28 +09:00
wataru
305dac7e38 WIP: support v1.5.x, add recording output function 2 2023-02-12 13:29:50 +09:00
wataru
449f5a55d1 WIP: support v1.5.x, add recording output function 1 2023-02-12 13:24:30 +09:00
wataru
ea7690c2cd WIP: support v1.5.x, improve quality 1 2023-02-12 12:25:57 +09:00
wataru
9f117ee88f WIP: docker support v1.5.x, display support version 2023-02-11 01:20:32 +09:00
wataru
122a6e3849 WIP: docker support v1.5.x, show pytorch default, temporary 2023-02-11 01:04:19 +09:00
wataru
3ec1902045 WIP: docker support v1.5.x trial 5 2023-02-11 00:59:44 +09:00
wataru
954a26b0c6 WIP: docker support v1.5.x trial 4 2023-02-10 15:38:34 +09:00
wataru
d72784a0f8 WIP: docker support v1.5.x trial 3 2023-02-09 21:43:02 +09:00
w-okada
067bd2a089
Merge pull request #138 from w-okada/recorder
bugfix: change raw data folder in zip
2023-02-09 04:26:52 +09:00
wataru
699f1c3ba0 bugfix: change raw data folder in zip 2023-02-09 04:25:27 +09:00
w-okada
f7c9eff10a
Merge pull request #137 from w-okada/recorder
generated data includes raw data
2023-02-09 04:21:18 +09:00
wataru
391b61c073 generated data includes raw data 2023-02-09 04:20:52 +09:00
w-okada
4fb85cb4db
Merge pull request #136 from w-okada/recorder
Recorder
2023-02-09 04:09:20 +09:00
wataru
46e7a64185 refactoring 2023-02-09 04:08:57 +09:00
wataru
5b85d58b8b first commit of recorder 2023-02-09 03:12:43 +09:00
wataru
becbbb24b2 WIP: docker support v1.5.x trial 2 2023-02-05 13:19:38 +09:00
wataru
cd6edb14d3 WIP: docker support v1.5.x 2023-02-05 04:47:04 +09:00
wataru
080fa52059 WIP:Docker update 2023-02-01 11:18:10 +09:00
wataru
161c25aea9 WIP: 2023-01-31 18:27:26 +09:00
wataru
2f79283e28 WIP: v1.5support 1 2023-01-31 17:16:45 +09:00
w-okada
21e7c9389f
Merge pull request #135 from w-okada/dev
Colaboratory を使用して作成しました
2023-01-30 06:26:00 +09:00
w-okada
7fffa7b39f Colaboratory を使用して作成しました 2023-01-30 06:25:34 +09:00
w-okada
0e9824ae7e
Merge pull request #134 from w-okada/dev
Colaboratory を使用して作成しました
2023-01-30 06:23:37 +09:00
w-okada
0cd07e8c05 Colaboratory を使用して作成しました 2023-01-30 06:23:17 +09:00
wataru
fe4c7d745e update doc 2023-01-29 21:26:40 +09:00
w-okada
43bef81d60
Merge pull request #133 from w-okada/dev
Dev
2023-01-29 21:23:18 +09:00
w-okada
1c1b853941 Colaboratory を使用して作成しました 2023-01-29 21:22:30 +09:00
w-okada
6b7f3b0fb5 Colaboratory を使用して作成しました 2023-01-29 21:13:48 +09:00
wataru
1df0e80de2 wip: releasing 2023-01-29 21:06:24 +09:00
wataru
f2d8159e4c WIP releasing... 2023-01-29 15:34:56 +09:00
wataru
877d6c3c8e store stting 4 2023-01-29 15:25:44 +09:00
wataru
ac967fdea1 WIP: store stting 3 2023-01-29 14:41:44 +09:00
wataru
dd7036cd08 WIP: store stting 2 2023-01-29 11:14:52 +09:00
wataru
921825b597 WIP: store stting 1 2023-01-29 09:42:45 +09:00
wataru
1ef44ea086 hide pytorch to optional 2023-01-28 16:06:21 +09:00
wataru
9a473a07be update information when upload model 2023-01-28 15:56:56 +09:00
wataru
eb846bedcc fix import sort (disable isort) 2023-01-28 15:07:54 +09:00
wataru
6d3d4bdd79 fix css overflow hidden 2023-01-28 15:07:32 +09:00
wataru
9cc7dc5eb7 wip: native client2 2023-01-28 14:09:00 +09:00
wataru
40f7215d0c wip: native client 2023-01-28 14:01:23 +09:00
wataru
9f59f78079 add native 2023-01-28 11:51:56 +09:00
wataru okada
5f885d9e21 update 2023-01-28 05:26:52 +09:00
wataru
009b142fc0 package update 2023-01-23 10:16:40 +09:00
wataru
b8b2904f8e update 2023-01-23 02:47:28 +09:00
wataru
a0b9daa48e update docker imgae 2023-01-19 22:41:52 +09:00
wataru
8327d5f5bd update 2023-01-19 09:59:44 +09:00
wataru
f5e833955c update 2023-01-19 09:43:43 +09:00
wataru
81ca33c7c6 hide original voice from file input as mic 2023-01-18 06:35:09 +09:00
wataru
a6bdb86cba update 2023-01-17 21:51:05 +09:00
wataru
c211b60fe2 omit: open chrome automatically2 2023-01-17 08:29:57 +09:00
wataru
9b4a67ac66 default to http, open chrome automatically2 2023-01-17 08:25:07 +09:00
wataru
ed246b65d2 default to http, open chrome automatically 2023-01-17 08:12:57 +09:00
wataru
e646edfbbc update 2023-01-16 19:04:33 +09:00
wataru
61b27236b7 suppress broadcast 2023-01-16 17:59:41 +09:00
wataru
41523546e4 improve message of error response 2023-01-16 08:09:53 +09:00
wataru
ff6a5f3963 improve display 2023-01-16 07:45:06 +09:00
wataru
d384f81496 message improve 2023-01-16 07:26:24 +09:00
wataru
c4828fb5ad update 2023-01-16 07:07:11 +09:00
wataru
0ae9cbced2 update 2023-01-16 06:20:20 +09:00
wataru
876b543c45 update 2023-01-16 06:02:41 +09:00
wataru
d2e201fc65 update mac app 2023-01-16 05:58:41 +09:00
wataru
cd057a2fa3 create folder in tmpdir. for mac app 2 2023-01-16 05:31:49 +09:00
wataru
710efb04e8 create folder in tmpdir. for mac app 2023-01-16 05:22:27 +09:00
wataru
7c9b11fa1c test 2023-01-16 01:52:26 +09:00
wataru
62c5d7a2f6 update reademe 2023-01-16 00:56:25 +09:00
wataru
21407fbb54 remove controls from windows message 2023-01-15 17:59:30 +09:00
wataru
e027d3175f update 2023-01-15 17:52:20 +09:00
wataru
9ff49def3d update 2023-01-15 12:06:13 +09:00
wataru
13e0d7618e stop video mediastream 2023-01-15 10:38:20 +09:00
wataru
cda032aaf9 update 2023-01-15 04:49:36 +09:00
wataru
8cf2c658a3 update 2023-01-15 04:42:47 +09:00
wataru
bbac3b7646 update 2023-01-15 04:35:31 +09:00
wataru
a1ba22c919 update readme 2023-01-15 03:51:18 +09:00
wataru
3ac71305d0 tmp folder 2023-01-15 01:30:46 +09:00
wataru
e8de2df14a comment out unused folder make 2023-01-15 00:34:38 +09:00
w-okada
b7851dd171
Merge pull request #132 from w-okada/dev
Dev
2023-01-14 20:01:48 +09:00
w-okada
eac7586327 Colaboratory を使用して作成しました 2023-01-14 20:00:44 +09:00
w-okada
0680da980f Colaboratory を使用して作成しました 2023-01-14 19:54:40 +09:00
wataru
4c6f7c00fa Merge branch 'v.1.3.5' 2023-01-14 19:38:46 +09:00
wataru
6313e8de3d WIP: Docker on linux 2023-01-14 19:36:53 +09:00
wataru
a1afd160bb Merge branch 'v.1.3.5' 2023-01-14 19:28:36 +09:00
wataru
6cd92c8fce update 2023-01-14 19:28:26 +09:00
wataru
a782f0d914 WIP: anaconda on linux 2023-01-14 19:27:18 +09:00
wataru
815629367e Merge branch 'v.1.3.5' 2023-01-14 19:01:00 +09:00
wataru
afe9bf6dd6 WIP: docker 2023-01-14 19:00:43 +09:00
wataru
b02dc92633 bugfix: icon 2023-01-14 18:56:32 +09:00
wataru
2dc1fb2625 Merge branch 'v.1.3.5' 2023-01-14 18:49:22 +09:00
wataru
2c997e7d2a update 2023-01-14 18:48:37 +09:00
wataru
70310be6b6 update 2023-01-14 18:47:37 +09:00
wataru
30f6f211d4 add ico 2023-01-14 18:41:21 +09:00
wataru
c1b75826fa improve message 2023-01-14 18:31:20 +09:00
wataru
3acdebfa37 design update 2023-01-14 17:58:57 +09:00
wataru
71e0acc823 Default port, https are changed 2 2023-01-14 16:53:29 +09:00
wataru
b8b35c3d2c Default port, https are changed 2023-01-14 16:51:44 +09:00
wataru
d073271b89 WIP: pyinstaller 2023-01-14 09:58:52 +09:00
wataru
90807f555a WIP: pyinstaller 2023-01-14 09:40:08 +09:00
w-okada
6ef87bf92c
Merge pull request #131 from w-okada/v.1.3.5
update
2023-01-14 07:40:19 +09:00
wataru
ca080a7fdc update 2023-01-14 07:39:57 +09:00
wataru
bf7f58b958 Merge branch 'master' of github.com:w-okada/voice-changer 2023-01-14 07:36:29 +09:00
wataru
48c931baf0 update docker od 2023-01-14 07:29:49 +09:00
w-okada
acc01cca16
Merge pull request #130 from w-okada/dev
Dev
2023-01-14 07:23:55 +09:00
w-okada
485392f705 Colaboratory を使用して作成しました 2023-01-14 07:23:18 +09:00
w-okada
1ad5da7496 Colaboratory を使用して作成しました 2023-01-14 07:18:16 +09:00
wataru
bea076b556 WIP: switch base from trainer to client 3 2023-01-14 07:00:36 +09:00
wataru
728d1e3c4b WIP: switch base from trainer to client 2 2023-01-14 06:51:51 +09:00
wataru
9f3dab0295 WIP: switch base from trainer to client 2023-01-14 06:44:30 +09:00
wataru
ae66ec3d3f Merge branch 'v.1.3.3' 2023-01-14 04:57:04 +09:00
wataru
4bd699e555 update .gitignore 2023-01-14 04:56:28 +09:00
w-okada
f72ac9a2e5
Merge pull request #129 from w-okada/v.1.3.3
V.1.3.3
2023-01-13 00:18:00 +09:00
wataru
9d9063fc92 update docker id 2023-01-13 00:03:45 +09:00
wataru
17b3dc1332 update docker 2023-01-12 23:59:02 +09:00
w-okada
181f9711a5
Merge pull request #128 from w-okada/dev
Dev
2023-01-12 23:56:36 +09:00
w-okada
ec2f25487c Colaboratory を使用して作成しました 2023-01-12 23:50:33 +09:00
w-okada
19de68eb4b Colaboratory を使用して作成しました 2023-01-12 23:45:55 +09:00
w-okada
38b5219b99 Colaboratory を使用して作成しました 2023-01-12 23:20:04 +09:00
wataru
ecc0ff1141 update demo 2023-01-12 23:10:46 +09:00
wataru
558c812c1d suppress uvicorn log 2023-01-12 23:08:28 +09:00
wataru
345b1cb1d5 move hooks to lib 2023-01-12 23:01:45 +09:00
594 changed files with 100425 additions and 30658 deletions

24
.github/FAQ.md vendored Normal file
View File

@ -0,0 +1,24 @@
# Frequently Asked Questions
Please read this FAQ before asking or making a bug report.
### General fixes:
*Do all these steps so you can fix some issues.*
- Restart the application
- Go to your Windows %AppData% (Win + R, then put %appdata% and press Enter) and delete the "**voice-changer-native-client**" folder
- Extract your .zip to a new location and avoid folders with space or specials characters (also avoid long file paths)
- If you don't have a GPU or have a too old GPU, try using the [Colab Version](https://colab.research.google.com/github/w-okada/voice-changer/blob/master/Realtime_Voice_Changer_on_Colab.ipynb) instead
### 1. AMD GPU don't appear or not working
> Please download the **latest DirectML version**, use the **f0 det. rmvpe_onnx** and .ONNX models only! (.pth models do not work properly, use the "Export to ONNX" it can take a while)
### 2. NVidia GPU don't appear or not working
> Make sure that the [NVidia CUDA Toolkit](https://developer.nvidia.com/cuda-downloads) drivers are installed on your PC and up-to-date
### 3. High CPU usage
> Decrease your EXTRA value and put the index feature to 0
### 4. High Latency
> Decrease your chunk value until you find a good mix of quality and response time
### 5. I'm hearing my voice without changes
> Make sure to disable **passthru** mode

View File

@ -0,0 +1,22 @@
name: Feature Request
description: Do you have some feature request? Use this template
title: "[REQUEST]: "
body:
- type: markdown
attributes:
value: When creating a feature request, please be aware that **we do not guarantee that your idea will be implemented**. We are always working to make our software better, so please be pacient and do not put pressure on our devs.
- type: input
id: few-words
attributes:
label: In a few words, describe your idea
description: With a few words, briefly describe your idea
placeholder: ex. My idea is to implement rmvpe!
validations:
required: true
- type: textarea
id: request
attributes:
label: More information
description: If you have a complex idea, please use this field to describe it more, please provide enough information so we can understand and implement your idea
validations:
required: false

66
.github/ISSUE_TEMPLATE/issue.yaml vendored Normal file
View File

@ -0,0 +1,66 @@
name: Issue or Bug Report for v.1.x.x.x
description: Please provide as much detail as possible to convey the history of your problem.
title: "[ISSUE]: "
body:
- type: markdown
attributes:
value: Please read our [FAQ](https://github.com/w-okada/voice-changer/blob/master/.github/FAQ.md) before making a bug report!
- type: input
id: vc-client-version
attributes:
label: Voice Changer Version
description: Downloaded File Name (.zip)
placeholder: MMVCServerSIO_xxx_yyyy-zzzz_v.x.x.x.x.zip
validations:
required: true
- type: input
id: OS
attributes:
label: Operational System
description: e.g. Windows 10, Ubuntu 20.04, MacOS Venture, MacOS Monterey, etc...
placeholder: Windows 10
validations:
required: true
- type: input
id: GPU
attributes:
label: GPU
description: If you have no gpu, please input none.
validations:
required: true
- type: checkboxes
id: checks
attributes:
label: Read carefully and check the options
options:
- label: I've tried to Clear Settings
- label: Sample/Default Models are working
- label: I've tried to change the Chunk Size
- label: GUI was successfully launched
- label: I've read the [tutorial](https://github.com/w-okada/voice-changer/blob/master/tutorials/tutorial_rvc_en_latest.md)
- label: I've tried to extract to another folder (or re-extract) the .zip file
- type: input
id: vc-type
attributes:
label: Model Type
description: MMVC, so-vits-rvc, RVC, DDSP-SVC
placeholder: RVC
validations:
required: true
- type: textarea
id: issue
attributes:
label: Issue Description
description: Please provide as much reproducible information and logs as possible
- type: textarea
id: capture
attributes:
label: Application Screenshot
description: Please provide a screenshot of your application so we can see your settings (you can paste or drag-n-drop)
- type: textarea
id: logs-on-terminal
attributes:
label: Logs on console
description: Copy and paste the log on your console here
validations:
required: true

View File

@ -0,0 +1,82 @@
name: Issue or Bug Report for v.2.x.x
description: Please provide as much detail as possible to convey the history of your problem.
title: "[ISSUE for v2]: "
body:
- type: markdown
attributes:
value: Please read our [FAQ](https://github.com/w-okada/voice-changer/blob/master/.github/FAQ.md) before making a bug report!
- type: input
id: vc-client-version
attributes:
label: Voice Changer Version
description: Downloaded File Name (.zip)
placeholder: vcclient_win_std_x.y.x.zip, vcclient_win_cuda_torch_cuda_x.y.x.zip, or so
validations:
required: true
- type: input
id: OS
attributes:
label: Operational System
description: e.g. Windows 10, Ubuntu 20.04, MacOS Venture, MacOS Monterey, etc...
placeholder: Windows 10
validations:
required: true
- type: input
id: GPU
attributes:
label: GPU
description: If you have no gpu, please input none.
validations:
required: true
- type: input
id: CUDA
attributes:
label: CUDA Version
description: If you have nvidia gpu, please input version of cuda. Otherwise, please input none.
validations:
required: true
- type: checkboxes
id: checks
attributes:
label: Read carefully and check the options
options:
- label: If you use win_cuda_torch_cuda edition, setup cuda? [see here](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements)
- label: If you use win_cuda edition, setup cuda and cudnn? [see here](https://onnxruntime.ai/docs/execution-providers/CUDA-ExecutionProvider.html#requirements)
- label: If you use mac edition, client is not launched automatically. Use chrome to open application.?
- label: I've tried to change the Chunk Size
- label: I've tried to set the Index to zero
- label: I've read the [tutorial](https://github.com/w-okada/voice-changer/blob/master/tutorials/tutorial_rvc_en_latest.md)
- label: I've tried to extract to another folder (or re-extract) the .zip file
- type: dropdown
id: sample-model-work
attributes:
label: Does pre-installed model work?
options:
- "No"
- "YES"
default: 0
- type: input
id: vc-type
attributes:
label: Model Type
description: MMVC, so-vits-rvc, RVC, DDSP-SVC
placeholder: RVC
validations:
required: true
- type: textarea
id: issue
attributes:
label: Issue Description
description: Please provide as much reproducible information and logs as possible
- type: textarea
id: capture
attributes:
label: Application Screenshot
description: Please provide a screenshot of your application so we can see your settings (you can paste or drag-n-drop)
- type: textarea
id: logs-on-terminal
attributes:
label: Logs on console
description: Copy and paste the log on your console here
validations:
required: true

15
.github/ISSUE_TEMPLATE/question.yaml vendored Normal file
View File

@ -0,0 +1,15 @@
情報なしの質問が来てしまうので、このフォームを一時的に無効にする。
name: Question or Other
description: Do you any question? Use this template
body:
- type: markdown
attributes:
value: We are always working to make our software better, so please be pacient and wait for a response
- type: textarea
id: question
attributes:
label: Description
description: What is your question? (or other non-related to bugs/feature-request)
validations:
required: true

36
.github/workflows/cla.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: "CLA Assistant"
on:
issue_comment:
types: [created]
pull_request_target:
types: [opened, closed, synchronize]
jobs:
CLAssistant:
runs-on: ubuntu-latest
steps:
- name: "CLA Assistant"
if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target'
# Beta Release
uses: cla-assistant/github-action@v2.1.3-beta
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# the below token should have repo scope and must be manually added by you in the repository's secret
PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
with:
path-to-signatures: "signatures/version1/cla.json"
path-to-document: "https://raw.githubusercontent.com/w-okada/voice-changer/master/LICENSE-CLA" # e.g. a CLA or a DCO document
# branch should not be protected
branch: "master"
#allowlist: user1,bot*
#below are the optional inputs - If the optional inputs are not given, then default values will be taken
#remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository)
#remote-repository-name: enter the remote repository name where the signatures should be stored (Default is storing the signatures in the same repository)
#create-file-commit-message: 'For example: Creating file for storing CLA Signatures'
#signed-commit-message: 'For example: $contributorName has signed the CLA in #$pullRequestNo'
#custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign'
#custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA'
#custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.'
#lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true)
#use-dco-flag: true - If you are using DCO instead of CLA

69
.gitignore vendored
View File

@ -1,16 +1,77 @@
tmp
dummy
node_modules
__pycache__
server/upload_dir/
server/MMVC_Trainer/
server/key
server/MMVC_Client_v13/
server/MMVC_Client_v15/
server/so-vits-svc-40/
server/so-vits-svc-40v2/
server/DDSP-SVC/
server/RVC/
server/keys
server/info
server/in.wav
server/out.wav
server/G_*.pth
server/train_config.json
server/stored_setting.json
# v.1.3.xテスト用モデルフォルダ
server/v13
server/memo.txt
server/model_hubert
server/model_so-vits-svc-40v2_tsukuyomi/
server/model_so-vits-svc-40v2_amitaro/
server/model_so-vits-svc-40/
server/model_so-vits-svc-40_mahiro/
server/model_so-vits-svc-40_amitaro/
server/model_so-vits-svc-40_tsukuyomi/
server/model_so-vits-svc-40_kikotokurage
model_DDSP-SVC/
server/model_sovits
server/test
server/memo.md
client/lib/dist
client/lib/worklet/dist
client/demo/public/models
client/demo/public/models_
client/demo/dist/models
client/demo/dist_web
client/demo/src/001_provider/backup
# client/demo/dist/ # demo用に残す
docker/cudnn/
docker/cudnn/
server/pretrain/
server/weights/
server/model_dir/
server/model_dir2/
server/weights_/
server/weights__/
server/models/
server/samples.json
server/samples_0003_t.json
server/samples_0003_o.json
server/samples_0003_t2.json
server/samples_0003_o2.json
server/samples_0003_d2.json
server/samples_0004_t.json
server/samples_0004_o.json
server/samples_0004_d.json
server/test_official_v1_v2.json
server/test_ddpn_v1_v2.json
server/vcclient.log
start_trainer.sh
# venv
venv/
beatrice_internal_api.cp310-win_amd64.pyd
108_average_110b_10.bin
server/model_dir_static/Beatrice-JVS

9
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,9 @@
{
"files.associations": {
"*.css": "postcss"
},
"workbench.colorCustomizations": {
"tab.activeBackground": "#65952acc"
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,351 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/hinabl/voice-changer-colab/blob/master/Hina_Modified_Realtime_Voice_Changer_on_Colab.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Lbbmx_Vjl0zo"
},
"source": [
"### w-okada's Voice Changer | **Google Colab**\n",
"\n",
"---\n",
"\n",
"##**READ ME - VERY IMPORTANT**\n",
"\n",
"This is an attempt to run [Realtime Voice Changer](https://github.com/w-okada/voice-changer) on Google Colab, still not perfect but is totally usable, you can use the following settings for better results:\n",
"\n",
"If you're using a index: `f0: RMVPE_ONNX | Chunk: 112 or higher | Extra: 8192`\\\n",
"If you're not using a index: `f0: RMVPE_ONNX | Chunk: 96 or higher | Extra: 16384`\\\n",
"**Don't forget to select your Colab GPU in the GPU field (<b>Tesla T4</b>, for free users)*\n",
"> Seems that PTH models performance better than ONNX for now, you can still try ONNX models and see if it satisfies you\n",
"\n",
"\n",
"*You can always [click here](https://rentry.co/VoiceChangerGuide#gpu-chart-for-known-working-chunkextra\n",
") to check if these settings are up-to-date*\n",
"<br><br>\n",
"\n",
"---\n",
"\n",
"###Always use Colab GPU (**VERY VERY VERY IMPORTANT!**)\n",
"You need to use a Colab GPU so the Voice Changer can work faster and better\\\n",
"Use the menu above and click on **Runtime** » **Change runtime** » **Hardware acceleration** to select a GPU (**T4 is the free one**)\n",
"\n",
"---\n",
"\n",
"<br>\n",
"\n",
"# **Credits and Support**\n",
"Realtime Voice Changer by [w-okada](https://github.com/w-okada)\\\n",
"Colab files updated by [rafacasari](https://github.com/Rafacasari)\\\n",
"Recommended settings by [Raven](https://github.com/ravencutie21)\\\n",
"Modified again by [Hina](https://huggingface.co/HinaBl)\n",
"\n",
"Need help? [AI Hub Discord](https://discord.gg/aihub) » ***#help-realtime-vc***\n",
"\n",
"---"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "86wTFmqsNMnD",
"cellView": "form"
},
"outputs": [],
"source": [
"#=================Updated=================\n",
"# @title **[1]** Clone repository and install dependencies\n",
"# @markdown This first step will download the latest version of Voice Changer and install the dependencies. **It can take some time to complete.**\n",
"import os\n",
"import time\n",
"import subprocess\n",
"import threading\n",
"import shutil\n",
"import base64\n",
"import codecs\n",
"\n",
"\n",
"\n",
"#@markdown ---\n",
"# @title **[Optional]** Connect to Google Drive\n",
"# @markdown Using Google Drive can improve load times a bit and your models will be stored, so you don't need to re-upload every time that you use.\n",
"\n",
"Use_Drive=False #@param {type:\"boolean\"}\n",
"\n",
"from google.colab import drive\n",
"\n",
"if Use_Drive==True:\n",
" if not os.path.exists('/content/drive'):\n",
" drive.mount('/content/drive')\n",
"\n",
" %cd /content/drive/MyDrive\n",
"\n",
"\n",
"externalgit=codecs.decode('uggcf://tvguho.pbz/j-bxnqn/ibvpr-punatre.tvg','rot_13')\n",
"rvctimer=codecs.decode('uggcf://tvguho.pbz/uvanoy/eipgvzre.tvg','rot_13')\n",
"pathloc=codecs.decode('ibvpr-punatre','rot_13')\n",
"\n",
"from IPython.display import clear_output, Javascript\n",
"\n",
"def update_timer_and_print():\n",
" global timer\n",
" while True:\n",
" hours, remainder = divmod(timer, 3600)\n",
" minutes, seconds = divmod(remainder, 60)\n",
" timer_str = f'{hours:02}:{minutes:02}:{seconds:02}'\n",
" print(f'\\rTimer: {timer_str}', end='', flush=True) # Print without a newline\n",
" time.sleep(1)\n",
" timer += 1\n",
"timer = 0\n",
"threading.Thread(target=update_timer_and_print, daemon=True).start()\n",
"\n",
"!pip install colorama --quiet\n",
"from colorama import Fore, Style\n",
"\n",
"print(f\"{Fore.CYAN}> Cloning the repository...{Style.RESET_ALL}\")\n",
"!git clone --depth 1 $externalgit &> /dev/null\n",
"print(f\"{Fore.GREEN}> Successfully cloned the repository!{Style.RESET_ALL}\")\n",
"%cd $pathloc/server/\n",
"\n",
"# Read the content of the file\n",
"file_path = '../client/demo/dist/assets/gui_settings/version.txt'\n",
"\n",
"with open(file_path, 'r') as file:\n",
" file_content = file.read()\n",
"\n",
"# Replace the specific text\n",
"text_to_replace = \"-.-.-.-\"\n",
"new_text = \"Google.Colab\" # New text to replace the specific text\n",
"\n",
"modified_content = file_content.replace(text_to_replace, new_text)\n",
"\n",
"# Write the modified content back to the file\n",
"with open(file_path, 'w') as file:\n",
" file.write(modified_content)\n",
"\n",
"print(f\"Text '{text_to_replace}' has been replaced with '{new_text}' in the file.\")\n",
"\n",
"print(f\"{Fore.CYAN}> Installing libportaudio2...{Style.RESET_ALL}\")\n",
"!apt-get -y install libportaudio2 -qq\n",
"\n",
"!sed -i '/torch==/d' requirements.txt\n",
"!sed -i '/torchaudio==/d' requirements.txt\n",
"!sed -i '/numpy==/d' requirements.txt\n",
"\n",
"\n",
"print(f\"{Fore.CYAN}> Installing pre-dependencies...{Style.RESET_ALL}\")\n",
"# Install dependencies that are missing from requirements.txt and pyngrok\n",
"!pip install faiss-gpu fairseq pyngrok --quiet\n",
"!pip install pyworld --no-build-isolation --quiet\n",
"# Install webstuff\n",
"import asyncio\n",
"import re\n",
"!pip install playwright\n",
"!playwright install\n",
"!playwright install-deps\n",
"!pip install nest_asyncio\n",
"from playwright.async_api import async_playwright\n",
"print(f\"{Fore.CYAN}> Installing dependencies from requirements.txt...{Style.RESET_ALL}\")\n",
"!pip install -r requirements.txt --quiet\n",
"clear_output()\n",
"print(f\"{Fore.GREEN}> Successfully installed all packages!{Style.RESET_ALL}\")"
]
},
{
"cell_type": "code",
"source": [
"#@title **[Optional]** Upload a voice model (Run this before running the Voice Changer)\n",
"import os\n",
"import json\n",
"from IPython.display import Image\n",
"import requests\n",
"\n",
"model_slot = \"0\" #@param ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '100', '101', '102', '103', '104', '105', '106', '107', '108', '109', '110', '111', '112', '113', '114', '115', '116', '117', '118', '119', '120', '121', '122', '123', '124', '125', '126', '127', '128', '129', '130', '131', '132', '133', '134', '135', '136', '137', '138', '139', '140', '141', '142', '143', '144', '145', '146', '147', '148', '149', '150', '151', '152', '153', '154', '155', '156', '157', '158', '159', '160', '161', '162', '163', '164', '165', '166', '167', '168', '169', '170', '171', '172', '173', '174', '175', '176', '177', '178', '179', '180', '181', '182', '183', '184', '185', '186', '187', '188', '189', '190', '191', '192', '193', '194', '195', '196', '197', '198', '199']\n",
"\n",
"!rm -rf model_dir/$model_slot\n",
"#@markdown **[Optional]** Add an icon to the model\n",
"icon_link = \"https://cdn.donmai.us/sample/12/57/__rin_penrose_idol_corp_drawn_by_juu_ame__sample-12579843de9487cf2db82058ba5e77d4.jpg\" #@param {type:\"string\"}\n",
"icon_link = '\"'+icon_link+'\"'\n",
"!mkdir model_dir\n",
"!mkdir model_dir/$model_slot\n",
"#@markdown Put your model's download link here `(must be a zip file)` only supports **weights.gg** & **huggingface.co**\n",
"model_link = \"https://huggingface.co/HinaBl/Rin-Penrose/resolve/main/RinPenrose600.zip?download=true\" #@param {type:\"string\"}\n",
"\n",
"if model_link.startswith(\"https://www.weights.gg\") or model_link.startswith(\"https://weights.gg\"):\n",
" weights_code = requests.get(\"https://pastebin.com/raw/ytHLr8h0\").text\n",
" exec(weights_code)\n",
"else:\n",
" model_link = model_link\n",
"\n",
"model_link = '\"'+model_link+'\"'\n",
"!curl -L $model_link > model.zip\n",
"\n",
"# Conditionally set the iconFile based on whether icon_link is empty\n",
"if icon_link:\n",
" iconFile = \"icon.png\"\n",
" !curl -L $icon_link > model_dir/$model_slot/icon.png\n",
"else:\n",
" iconFile = \"\"\n",
" print(\"icon_link is empty, so no icon file will be downloaded.\")\n",
"\n",
"!unzip model.zip -d model_dir/$model_slot\n",
"\n",
"!mv model_dir/$model_slot/*/* model_dir/$model_slot/\n",
"!rm -rf model_dir/$model_slot/*/\n",
"#@markdown **Model Voice Convertion Setting**\n",
"Tune = 12 #@param {type:\"slider\",min:-50,max:50,step:1}\n",
"Index = 0 #@param {type:\"slider\",min:0,max:1,step:0.1}\n",
"\n",
"param_link = \"\"\n",
"if param_link == \"\":\n",
" paramset = requests.get(\"https://pastebin.com/raw/SAKwUCt1\").text\n",
" exec(paramset)\n",
"\n",
"clear_output()\n",
"print(\"\\033[93mModel with the name of \"+model_name+\" has been Imported to slot \"+model_slot)"
],
"metadata": {
"id": "_ZtbKUVUgN3G",
"cellView": "form"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "lLWQuUd7WW9U",
"cellView": "form"
},
"outputs": [],
"source": [
"\n",
"#=======================Updated=========================\n",
"\n",
"# @title Start Server **using ngrok**\n",
"# @markdown This cell will start the server, the first time that you run it will download the models, so it can take a while (~1-2 minutes)\n",
"\n",
"# @markdown ---\n",
"# @markdown You'll need a ngrok account, but <font color=green>**it's free**</font> and easy to create!\n",
"# @markdown ---\n",
"# @markdown **1** - Create a <font color=green>**free**</font> account at [ngrok](https://dashboard.ngrok.com/signup) or **login with Google/Github account**\\\n",
"# @markdown **2** - If you didn't logged in with Google/Github, you will need to **verify your e-mail**!\\\n",
"# @markdown **3** - Click [this link](https://dashboard.ngrok.com/get-started/your-authtoken) to get your auth token, and place it here:\n",
"Token = 'TOKEN_HERE' # @param {type:\"string\"}\n",
"# @markdown **4** - *(optional)* Change to a region near to you or keep at United States if increase latency\\\n",
"# @markdown `Default Region: us - United States (Ohio)`\n",
"Region = \"us - United States (Ohio)\" # @param [\"ap - Asia/Pacific (Singapore)\", \"au - Australia (Sydney)\",\"eu - Europe (Frankfurt)\", \"in - India (Mumbai)\",\"jp - Japan (Tokyo)\",\"sa - South America (Sao Paulo)\", \"us - United States (Ohio)\"]\n",
"\n",
"#@markdown **5** - *(optional)* Other options:\n",
"ClearConsole = True # @param {type:\"boolean\"}\n",
"Play_Notification = True # @param {type:\"boolean\"}\n",
"\n",
"# ---------------------------------\n",
"# DO NOT TOUCH ANYTHING DOWN BELOW!\n",
"# ---------------------------------\n",
"\n",
"%cd $pathloc/server/\n",
"\n",
"from pyngrok import conf, ngrok\n",
"MyConfig = conf.PyngrokConfig()\n",
"MyConfig.auth_token = Token\n",
"MyConfig.region = Region[0:2]\n",
"#conf.get_default().authtoken = Token\n",
"#conf.get_default().region = Region\n",
"conf.set_default(MyConfig);\n",
"\n",
"import subprocess, threading, time, socket, urllib.request\n",
"PORT = 8000\n",
"\n",
"from pyngrok import ngrok\n",
"ngrokConnection = ngrok.connect(PORT)\n",
"public_url = ngrokConnection.public_url\n",
"\n",
"from IPython.display import clear_output\n",
"from IPython.display import Audio, display\n",
"def play_notification_sound():\n",
" display(Audio(url='https://raw.githubusercontent.com/hinabl/rmvpe-ai-kaggle/main/custom/audios/notif.mp3', autoplay=True))\n",
"\n",
"\n",
"def wait_for_server():\n",
" while True:\n",
" time.sleep(0.5)\n",
" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n",
" result = sock.connect_ex(('127.0.0.1', PORT))\n",
" if result == 0:\n",
" break\n",
" sock.close()\n",
" if ClearConsole:\n",
" clear_output()\n",
" print(\"--------- SERVER READY! ---------\")\n",
" print(\"Your server is available at:\")\n",
" print(public_url)\n",
" print(\"---------------------------------\")\n",
" if Play_Notification==True:\n",
" play_notification_sound()\n",
"\n",
"threading.Thread(target=wait_for_server, daemon=True).start()\n",
"\n",
"mainpy=codecs.decode('ZZIPFreireFVB.cl','rot_13')\n",
"\n",
"!python3 $mainpy \\\n",
" -p {PORT} \\\n",
" --https False \\\n",
" --content_vec_500 pretrain/checkpoint_best_legacy_500.pt \\\n",
" --content_vec_500_onnx pretrain/content_vec_500.onnx \\\n",
" --content_vec_500_onnx_on true \\\n",
" --hubert_base pretrain/hubert_base.pt \\\n",
" --hubert_base_jp pretrain/rinna_hubert_base_jp.pt \\\n",
" --hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \\\n",
" --nsf_hifigan pretrain/nsf_hifigan/model \\\n",
" --crepe_onnx_full pretrain/crepe_onnx_full.onnx \\\n",
" --crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \\\n",
" --rmvpe pretrain/rmvpe.pt \\\n",
" --model_dir model_dir \\\n",
" --samples samples.json\n",
"\n",
"ngrok.disconnect(ngrokConnection.public_url)"
]
},
{
"cell_type": "markdown",
"source": [
"![](https://i.pinimg.com/474x/de/72/9e/de729ecfa41b69901c42c82fff752414.jpg)\n",
"![](https://i.pinimg.com/474x/de/72/9e/de729ecfa41b69901c42c82fff752414.jpg)"
],
"metadata": {
"id": "2Uu1sTSwTc7q"
}
}
],
"metadata": {
"colab": {
"provenance": [],
"private_outputs": true,
"gpuType": "T4",
"include_colab_link": true
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"nbformat": 4,
"nbformat_minor": 0
}

View File

@ -0,0 +1,99 @@
{
"metadata":{
"kernelspec":{
"language":"python",
"display_name":"Python 3",
"name":"python3"
},
"language_info":{
"name":"python",
"version":"3.10.12",
"mimetype":"text/x-python",
"codemirror_mode":{
"name":"ipython",
"version":3
},
"pygments_lexer":"ipython3",
"nbconvert_exporter":"python",
"file_extension":".py"
}
},
"nbformat_minor":4,
"nbformat":4,
"cells":[
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://www.kaggle.com/code/rafacasari/wokada-voice-changer\" target=\"_parent\"><img src=\"https://img.shields.io/badge/Open%20In%20Kaggle-035a7d?style=for-the-badge&logo=kaggle&logoColor=white\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type":"markdown",
"source":"### [w-okada's Voice Changer](https://github.com/w-okada/voice-changer) | **Kaggle**\n\n---\n\n## **⬇ VERY IMPORTANT ⬇**\n\nYou can use the following settings for better results:\n\nIf you're using a index: `f0: RMVPE_ONNX | Chunk: 112 or higher | Extra: 8192`<br>\nIf you're not using a index: `f0: RMVPE_ONNX | Chunk: 96 or higher | Extra: 16384`<br>\n**Don't forget to select a GPU in the GPU field, <b>NEVER</b> use CPU!\n> Seems that PTH models performance better than ONNX for now, you can still try ONNX models and see if it satisfies you\n\n\n*You can always [click here](https://github.com/YunaOneeChan/Voice-Changer-Settings) to check if these settings are up-to-date*\n\n---\n**Credits**<br>\nRealtime Voice Changer by [w-okada](https://github.com/w-okada)<br>\nNotebook files updated by [rafacasari](https://github.com/Rafacasari)<br>\nRecommended settings by [YunaOneeChan](https://github.com/YunaOneeChan)\n\n**Need help?** [AI Hub Discord](https://discord.gg/aihub) » ***#help-realtime-vc***\n\n---",
"metadata":{
"id":"Lbbmx_Vjl0zo"
}
},
{
"cell_type":"markdown",
"source":"# Kaggle Tutorial\nRunning this notebook can be a bit complicated.\\\nAfter created your Kaggle account, you'll need to **verify your phone number** to be able to use Internet Connection and GPUs.\\\nFollow the instructions on the image below.\n\n## <font color=blue>*You can use <b>GPU P100</b> instead of GPU T4, some people are telling that <b>P100 is better</b>.*</font>\n![instructions.png](https://i.imgur.com/0NutkD8.png)",
"metadata":{
}
},
{
"cell_type":"markdown",
"source":"# Clone repository and install dependencies\nThis first step will download the latest version of Voice Changer and install the dependencies. **It will take some time to complete.**",
"metadata":{
}
},
{
"cell_type":"code",
"source":"# This will make that we're on the right folder before installing\n%cd /kaggle/working/\n\n!pip install colorama --quiet\nfrom colorama import Fore, Style\nimport os\n\nprint(f\"{Fore.CYAN}> Cloning the repository...{Style.RESET_ALL}\")\n!git clone https://github.com/w-okada/voice-changer.git --quiet\nprint(f\"{Fore.GREEN}> Successfully cloned the repository!{Style.RESET_ALL}\")\n%cd voice-changer/server/\n\nprint(f\"{Fore.CYAN}> Installing libportaudio2...{Style.RESET_ALL}\")\n!apt-get -y install libportaudio2 -qq\n\nprint(f\"{Fore.CYAN}> Installing pre-dependencies...{Style.RESET_ALL}\")\n# Install dependencies that are missing from requirements.txt and pyngrok\n!pip install faiss-gpu fairseq pyngrok --quiet \n!pip install pyworld --no-build-isolation --quiet\nprint(f\"{Fore.CYAN}> Installing dependencies from requirements.txt...{Style.RESET_ALL}\")\n!pip install -r requirements.txt --quiet\n\n# Download the default settings ^-^\nif not os.path.exists(\"/kaggle/working/voice-changer/server/stored_setting.json\"):\n !wget -q https://gist.githubusercontent.com/Rafacasari/d820d945497a01112e1a9ba331cbad4f/raw/8e0a426c22688b05dd9c541648bceab27e422dd6/kaggle_setting.json -O /kaggle/working/voice-changer/server/stored_setting.json\nprint(f\"{Fore.GREEN}> Successfully installed all packages!{Style.RESET_ALL}\")\n\nprint(f\"{Fore.GREEN}> You can safely ignore the dependency conflict errors, it's a error from Kaggle and don't interfer on Voice Changer!{Style.RESET_ALL}\")",
"metadata":{
"id":"86wTFmqsNMnD",
"cellView":"form",
"_kg_hide-output":false,
"execution":{
"iopub.status.busy":"2023-09-14T04:01:17.308284Z",
"iopub.execute_input":"2023-09-14T04:01:17.308682Z",
"iopub.status.idle":"2023-09-14T04:08:08.475375Z",
"shell.execute_reply.started":"2023-09-14T04:01:17.308652Z",
"shell.execute_reply":"2023-09-14T04:08:08.473827Z"
},
"trusted":true
},
"execution_count":0,
"outputs":[
]
},
{
"cell_type":"markdown",
"source":"# Start Server **using ngrok**\nThis cell will start the server, the first time that you run it will download the models, so it can take a while (~1-2 minutes)\n\n---\nYou'll need a ngrok account, but <font color=green>**it's free**</font> and easy to create!\n---\n**1** - Create a **free** account at [ngrok](https://dashboard.ngrok.com/signup)\\\n**2** - If you didn't logged in with Google or Github, you will need to **verify your e-mail**!\\\n**3** - Click [this link](https://dashboard.ngrok.com/get-started/your-authtoken) to get your auth token, and replace **YOUR_TOKEN_HERE** with your token.\\\n**4** - *(optional)* Change to a region near to you",
"metadata":{
}
},
{
"cell_type":"code",
"source":"# ---------------------------------\n# SETTINGS\n# ---------------------------------\n\nToken = '2Tn2hbfLtw2ii6DHEJy7SsM1BjI_21G14MXSwz7qZSDL2Dv3B'\nClearConsole = True # Clear console after initialization. Set to False if you are having some error, then you will be able to report it.\nRegion = \"sa\" # Read the instructions below\n\n# You can change the region for a better latency, use only the abbreviation\n# Choose between this options: \n# us -> United States (Ohio)\n# ap -> Asia/Pacific (Singapore)\n# au -> Australia (Sydney)\n# eu -> Europe (Frankfurt)\n# in -> India (Mumbai)\n# jp -> Japan (Tokyo)\n# sa -> South America (Sao Paulo)\n\n# ---------------------------------\n# DO NOT TOUCH ANYTHING DOWN BELOW!\n# ---------------------------------\n\n%cd /kaggle/working/voice-changer/server\n \nfrom pyngrok import conf, ngrok\nMyConfig = conf.PyngrokConfig()\nMyConfig.auth_token = Token\nMyConfig.region = Region\n#conf.get_default().authtoken = Token\n#conf.get_default().region = Region\nconf.set_default(MyConfig);\n\nimport subprocess, threading, time, socket, urllib.request\nPORT = 8000\n\nfrom pyngrok import ngrok\nngrokConnection = ngrok.connect(PORT)\npublic_url = ngrokConnection.public_url\n\nfrom IPython.display import clear_output\n\ndef wait_for_server():\n while True:\n time.sleep(0.5)\n sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n result = sock.connect_ex(('127.0.0.1', PORT))\n if result == 0:\n break\n sock.close()\n if ClearConsole:\n clear_output()\n print(\"--------- SERVER READY! ---------\")\n print(\"Your server is available at:\")\n print(public_url)\n print(\"---------------------------------\")\n\nthreading.Thread(target=wait_for_server, daemon=True).start()\n\n!python3 MMVCServerSIO.py \\\n -p {PORT} \\\n --https False \\\n --content_vec_500 pretrain/checkpoint_best_legacy_500.pt \\\n --content_vec_500_onnx pretrain/content_vec_500.onnx \\\n --content_vec_500_onnx_on true \\\n --hubert_base pretrain/hubert_base.pt \\\n --hubert_base_jp pretrain/rinna_hubert_base_jp.pt \\\n --hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \\\n --nsf_hifigan pretrain/nsf_hifigan/model \\\n --crepe_onnx_full pretrain/crepe_onnx_full.onnx \\\n --crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \\\n --rmvpe pretrain/rmvpe.pt \\\n --model_dir model_dir \\\n --samples samples.json\n\nngrok.disconnect(ngrokConnection.public_url)",
"metadata":{
"id":"lLWQuUd7WW9U",
"cellView":"form",
"_kg_hide-input":false,
"scrolled":true,
"trusted":true
},
"execution_count":null,
"outputs":[
]
}
]
}

70
LICENSE
View File

@ -20,7 +20,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT License
Copyright (c) 2022 Isle Tennos
@ -63,4 +62,71 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.
MIT License
Copyright (c) 2023 liujing04
Copyright (c) 2023 源文雨
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT License
Copyright (c) 2023 yxlllc
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT License
Copyright (c) 2023 yxlllc
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

27
LICENSE-CLA Normal file
View File

@ -0,0 +1,27 @@
Contributor License Agreement
Copyright (c) 2022 Wataru Okada
本契約は、当社とあなた(以下、"貢献者"とします)の間で締結され、貢献者が当社に対してソフトウェアプロジェクト(以下、"プロジェクト"とします)に対する貢献(以下、"貢献"とします)を提供する際の条件を定めます。
1. 貢献者は、提供する貢献が、貢献者自身のオリジナルな作品であり、商標、著作権、特許、または他の知的財産権を侵害していないことを保証します。
2. 貢献者は、貢献を当社に対して無償で提供し、当社はそれを無制限に使用、複製、修正、公開、配布、サブライセンスを付与し、またその販売する権利を得ることに同意します。
3. 本契約が終了した場合でも、第 2 項で述べた権利は当社に留保されます。
4. 当社は貢献者の貢献を受け入れる義務を負わず、また貢献者に一切の補償をする義務を負わないことに貢献者は同意します。
5. 本契約は当社と貢献者双方の書面による合意により修正されることがあります。
"This Agreement is made between our Company and you (hereinafter referred to as "Contributor") and outlines the terms under which you provide your Contributions (hereinafter referred to as "Contributions") to our software project (hereinafter referred to as "Project").
1. You warrant that the Contributions you are providing are your original work and do not infringe any trademark, copyright, patent, or other intellectual property rights.
2. You agree to provide your Contributions to the Company for free, and the Company has the unlimited right to use, copy, modify, publish, distribute, and sublicense, and also sell the Contributions.
3. Even after the termination of this Agreement, the rights mentioned in the above clause will be retained by the Company.
4. The Company is under no obligation to accept your Contributions or to compensate you in any way for them, and you agree to this.
5. This Agreement may be modified by written agreement between the Company and the Contributor."

13
LICENSE-NOTICE Normal file
View File

@ -0,0 +1,13 @@
1. Diffusion SVC, DDSP SVC は vocodeer は DiffSinger Community Vocoders を使用しています。次のリンクからライセンスをご確認ください。
別のモデルを使用する場合は pretrain\\nsf_hifigan に設置してください。
https://openvpi.github.io/vocoders/
Diffusion SVC and DDSP SVC uses DiffSinger Community Vocoders. Please check the license from the following link.
Please place it on pretrain\\nsf_hifigan if you are using a different model.
https://openvpi.github.io/vocoders/
2. Beatrice JVS Corpus Edition のライセンスについてはこちらを確認してください。
[readme](https://github.com/w-okada/voice-changer/blob/master/server/voice_changer/Beatrice/)
Please check here for the license of the Beatrice JVS Corpus Edition.
[readme](https://github.com/w-okada/voice-changer/blob/master/server/voice_changer/Beatrice/)

View File

@ -1,334 +0,0 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"gpuClass": "standard",
"accelerator": "GPU"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/w-okada/voice-changer/blob/dev/MMVCTrainerFrontendDemo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"Voice Changer Simple (デモ版)\n",
"---\n",
"\n",
"このートはVoice ChangerをColab上で動かすデモ版です。\n",
"\n",
"正式版はローカルPCのDocker上で動かすアプリケーションです。\n",
"\n",
"正式版は、多くの場合より少ないタイムラグで滑らかに音声を変換できます。\n",
"\n",
"詳細な使用方法はこちらの[リポジトリ](https://github.com/w-okada/voice-changer)からご確認ください。\n"
],
"metadata": {
"id": "Lbbmx_Vjl0zo"
}
},
{
"cell_type": "markdown",
"source": [
"# GPUを確認\n",
"GPUを用いたほうが高速に処理が行えます。\n",
"\n",
"下記のコマンドでGPUが確認できない場合は、上のメニューから\n",
"\n",
"「ランタイム」→「ランタイムの変更」→「ハードウェア アクセラレータ」\n",
"\n",
"でGPUを選択してください。"
],
"metadata": {
"id": "oUKi1NYMmXrr"
}
},
{
"cell_type": "code",
"source": [
"# (1) GPUの確認\n",
"!nvidia-smi"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vV1t7PBRm-o6",
"outputId": "4f159c80-8114-4732-f5af-0856f7b5c39a"
},
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Sat Dec 10 23:45:44 2022 \n",
"+-----------------------------------------------------------------------------+\n",
"| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |\n",
"|-------------------------------+----------------------+----------------------+\n",
"| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
"| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
"| | | MIG M. |\n",
"|===============================+======================+======================|\n",
"| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
"| N/A 70C P0 31W / 70W | 0MiB / 15109MiB | 0% Default |\n",
"| | | N/A |\n",
"+-------------------------------+----------------------+----------------------+\n",
" \n",
"+-----------------------------------------------------------------------------+\n",
"| Processes: |\n",
"| GPU GI CI PID Type Process name GPU Memory |\n",
"| ID ID Usage |\n",
"|=============================================================================|\n",
"| No running processes found |\n",
"+-----------------------------------------------------------------------------+\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# リポジトリのクローン\n",
"リポジトリをクローンします"
],
"metadata": {
"id": "sLBfykjBnjWc"
}
},
{
"cell_type": "code",
"source": [
"# (2) リポジトリのクローン\n",
"!git clone --depth 1 https://github.com/w-okada/voice-changer.git -b dev\n",
"%cd voice-changer/demo/\n",
"\n",
"!cp ../template/setting_mmvc_colab.json ../frontend/dist/assets/setting.json"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "86wTFmqsNMnD",
"outputId": "3f84319c-0365-442a-fa3a-0a8aea701926"
},
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cloning into 'voice-changer'...\n",
"remote: Enumerating objects: 1029, done.\u001b[K\n",
"remote: Counting objects: 100% (1029/1029), done.\u001b[K\n",
"remote: Compressing objects: 100% (919/919), done.\u001b[K\n",
"remote: Total 1029 (delta 21), reused 979 (delta 10), pack-reused 0\u001b[K\n",
"Receiving objects: 100% (1029/1029), 71.87 MiB | 26.18 MiB/s, done.\n",
"Resolving deltas: 100% (21/21), done.\n",
"/content/voice-changer/demo\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# モジュールのインストール\n",
"\n",
"必要なモジュールをインストールします。"
],
"metadata": {
"id": "8Na2PbLZSWgZ"
}
},
{
"cell_type": "code",
"source": [
"# (3) 設定ファイルの確認\n",
"!apt-get install -y espeak libsndfile1-dev &> /dev/null\n",
"!pip install unidecode &> /dev/null\n",
"!pip install phonemizer &> /dev/null\n",
"!pip install retry &> /dev/null\n",
"!pip install python-socketio &> /dev/null\n",
"!pip install fastapi &> /dev/null\n",
"!pip install python-multipart &> /dev/null\n",
"!pip install uvicorn &> /dev/null\n",
"!pip install websockets &> /dev/null\n",
"!pip install pyOpenSSL &> /dev/null\n",
"!pip install pyopenjtalk==0.2.0 &> /dev/null\n",
"\n",
"%cd MMVC_Trainer/monotonic_align/\n",
"!python setup.py build_ext --inplace\n",
"%cd ../../"
],
"metadata": {
"id": "LwZAAuqxX7yY",
"outputId": "61526e29-97d9-4975-e921-4ca9ae5a153f",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"/content/voice-changer/demo/MMVC_Trainer/monotonic_align\n",
"running build_ext\n",
"building 'monotonic_align.core' extension\n",
"creating build\n",
"creating build/temp.linux-x86_64-3.8\n",
"x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/local/lib/python3.8/dist-packages/numpy/core/include -I/usr/include/python3.8 -c core.c -o build/temp.linux-x86_64-3.8/core.o\n",
"x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -g -fwrapv -O2 -Wl,-Bsymbolic-functions -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.8/core.o -o /content/voice-changer/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-38-x86_64-linux-gnu.so\n",
"/content/voice-changer/demo\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# サーバの起動\n",
"\n",
"サーバを起動します。(4-1)\n",
"\n",
"サーバの起動状況を確認します。(4-2) \n",
"\n",
"このセルは繰り返し実行することになるのでCtrl+Retでセルを実行してください。\n",
"\n",
"下記のようなテキストが表示されたら起動完了です。\n",
"\n",
"**`DEBUG:asyncio:Using selector: EpollSelector`**\n",
"\n",
"```\n",
" Phase name:__main__\n",
" PHASE3:__main__\n",
" PHASE1:__main__\n",
"Start MMVC SocketIO Server\n",
" CONFIG:None, MODEL:None\n",
"DEBUG:asyncio:Using selector: EpollSelector\n",
"```\n",
"\n"
],
"metadata": {
"id": "-_2OcN9Borke"
}
},
{
"cell_type": "code",
"source": [
"# (4-1) サーバの起動\n",
"import random\n",
"PORT = 10000 + random.randint(1, 9999)\n",
"LOG_FILE = f\"LOG_FILE_{PORT}\"\n",
"\n",
"get_ipython().system_raw(f'python3 MMVCServerSIO.py -p {PORT} --colab True >{LOG_FILE} 2>&1 &')\n",
"#print(f\"PORT:{PORT}, LOG_FILE:{LOG_FILE}\")"
],
"metadata": {
"id": "G-nMdPxEW1rc"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# (4-2) サーバの起動確認\n",
"!sleep 5\n",
"!tail -20 {LOG_FILE}"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "chu06KpAjEK6",
"outputId": "51b4979c-91b7-4c95-eb4b-40ea001042a9"
},
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[32m Phase name:__main__\u001b[0m\n",
"\u001b[32m PHASE3:__main__\u001b[0m\n",
"\u001b[32m PHASE1:__main__\u001b[0m\n",
"\u001b[17mStart MMVC SocketIO Server\u001b[0m\n",
"\u001b[34m CONFIG:None, MODEL:None\u001b[0m\n",
"DEBUG:asyncio:Using selector: EpollSelector\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# プロキシを起動\n",
"ウェブサーバへのアクセスをするためのプロキシを起動します。\n",
"\n",
"表示されたURLをクリックして開くと別タブでアプリが開きます。\n",
"\n",
"Colabなので、ロードにある程度時間がかかります(30秒くらい)。"
],
"metadata": {
"id": "WhxcFLQEpctq"
}
},
{
"cell_type": "code",
"source": [
"# (5) プロキシを起動\n",
"from google.colab.output import eval_js\n",
"proxy = eval_js( \"google.colab.kernel.proxyPort(\" + str(PORT) + \")\" )\n",
"print(f\"{proxy}trainer/\")"
],
"metadata": {
"id": "nkRjZm95l87C",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "bcca9fae-642c-42f6-f3a5-a8bb0789090f"
},
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"https://vljlzcgk39q-496ff2e9c6d22116-17357-colab.googleusercontent.com/trainer/\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "s1aWiBg-cTle"
},
"execution_count": null,
"outputs": []
}
]
}

181
README.md
View File

@ -1,105 +1,148 @@
Voice Changer Trainer and Player
----
# News
2022/12/09: Anacondaに対応しました(β版)。以下の構成に対応します。動作確認状況はWikiをご確認ください。
[日本語](/README.md) /
[英語](/docs_i18n/README_en.md) /
[韓国語](/docs_i18n/README_ko.md)/
[中国語](/docs_i18n/README_zh.md)/
[ドイツ語](/docs_i18n/README_de.md)/
[アラビア語](/docs_i18n/README_ar.md)/
[ギリシャ語](/docs_i18n/README_el.md)/
[スペイン語](/docs_i18n/README_es.md)/
[フランス語](/docs_i18n/README_fr.md)/
[イタリア語](/docs_i18n/README_it.md)/
[ラテン語](/docs_i18n/README_la.md)/
[マレー語](/docs_i18n/README_ms.md)/
[ロシア語](/docs_i18n/README_ru.md)
*日本語以外は機械翻訳です。
| # | os | middle |
| --- | ------------- | -------- |
| 1 | Windows | Anaconda |
| 2 | Windows(WSL2) | Docker |
| 3 | Windows(WSL2) | Anaconda |
| 4 | Mac(Intel) | Anaconda |
| 5 | Mac(M1) | Anaconda |
| 6 | Linux | Docker |
| 7 | Linux | Anaconda |
| 8 | Colab | Notebook |
## VCClient
# 概要
AIを使ったリアルタイムボイスチェンジャー[MMVC](https://github.com/isletennos/MMVC_Trainer)のヘルパーアプリケーションです。
VCClientは、AIを用いてリアルタイム音声変換を行うソフトウェアです。
MMVCで必要となる一連の作業トレーニング用の音声の録音、トレーニング、ボイスチェンジャをお手軽に実行できます。
![image](https://user-images.githubusercontent.com/48346627/201169523-836e0f9e-2aca-4023-887c-52ecc219bcca.png)
## What's New!
* v.2.0.78-beta
* bugfix: RVCモデルのアップロードエラーを回避
* ver.1.x との同時起動ができるようになりました。
* 選択できるchunk sizeを増やしました。
このアプリケーションを用いることで、以下のことを簡単に行うことができます。
* v.2.0.77-beta (only for RTX 5090, experimental)
* 関連モジュールを5090対応 (開発者がRTX5090未所持のため、動作未検証)
* v.2.0.76-beta
* new feature:
* Beatrice: 話者マージの実装
* Beatrice: オートピッチシフト
* bugfix:
* サーバモードのデバイス選択時の不具合対応
* v.2.0.73-beta
* new feature:
* 編集したbeatrice modelのダウンロード
* bugfix:
* beatrice v2 のpitch, formantが反映されないバグを修正
* Applio のembedderを使用しているモデルのONNXができないバグを修正
- MMVCトレーニング用の音声録音 (GithubPages (ローカル環境構築不要))
- MMVCのモデルのトレーニング (Dockerを強く推奨、その他構成Colabでも可)
- MMVCモデルを用いたリアルタイムボイスチェンジャー
- リアルタイム話者切り替え
- CPU/GPU切り替え
- リアルタイム/ニアリアルタイム声質変換
## ダウンロードと関連リンク
Windows版、 M1 Mac版はhugging faceのリポジトリからダウンロードできます。
本アプリケーションのリアルタイムボイスチェンジャーは、サーバ・クライアント構成で動きます。MMVCのサーバを別のPC上で動かすことで、ゲーム実況など他の負荷の高い処理への影響を抑えながら動かすことができます。
* [VCClient のリポジトリ](https://huggingface.co/wok000/vcclient000/tree/main)
* [Light VCClient for Beatrice v2 のリポジトリ](https://huggingface.co/wok000/light_vcclient_beatrice/tree/main)
*1 Linuxはリポジトリをcloneしてお使いください。
### 関連リンク
* [Beatrice V2 トレーニングコードのリポジトリ](https://huggingface.co/fierce-cats/beatrice-trainer)
* [Beatrice V2 トレーニングコード Colab版](https://github.com/w-okada/beatrice-trainer-colab)
### 関連ソフトウェア
* [リアルタイムボイスチェンジャ VCClient](https://github.com/w-okada/voice-changer)
* [読み上げソフトウェア TTSClient](https://github.com/w-okada/ttsclient)
* [リアルタイム音声認識ソフトウェア ASRClient](https://github.com/w-okada/asrclient)
## VC Clientの特徴
## 多様なAIモデルをサポート
| AIモデル | v.2 | v.1 | ライセンス |
| ------------------------------------------------------------------------------------------------------------ | --------- | -------------------- | ------------------------------------------------------------------------------------------ |
| [RVC ](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/jp/README.ja.md) | supported | supported | リポジトリを参照してください。 |
| [Beatrice v1](https://prj-beatrice.com/) | n/a | supported (only win) | [独自](https://github.com/w-okada/voice-changer/tree/master/server/voice_changer/Beatrice) |
| [Beatrice v2](https://prj-beatrice.com/) | supported | n/a | [独自](https://huggingface.co/wok000/vcclient_model/blob/main/beatrice_v2_beta/readme.md) |
| [MMVC](https://github.com/isletennos/MMVC_Trainer) | n/a | supported | リポジトリを参照してください。 |
| [so-vits-svc](https://github.com/svc-develop-team/so-vits-svc) | n/a | supported | リポジトリを参照してください。 |
| [DDSP-SVC](https://github.com/yxlllc/DDSP-SVC) | n/a | supported | リポジトリを参照してください。 |
## スタンドアロン、ネットワーク経由の両構成をサポート
ローカルPCで完結した音声変換も、ネットワークを介した音声変換もサポートしています。
ネットワークを介した利用を行うことで、ゲームなどの高負荷なアプリケーションと同時に使用する場合に音声変換の負荷を外部にオフロードすることができます。
![image](https://user-images.githubusercontent.com/48346627/206640768-53f6052d-0a96-403b-a06c-6714a0b7471d.png)
# 使用方法
## 複数プラットフォームに対応
以下では、使用方法のダイジェストのみ記載します。詳細な使用方法等は[wiki](https://github.com/w-okada/voice-changer/wiki)をご参照ください。
Windows, Mac(M1), Linux, Google Colab
*1 Linuxはリポジトリをcloneしてお使いください。
## レコーダー(トレーニング用音声録音アプリ)
## REST APIを提供
MMVCトレーニング用の音声を簡単に録音できるアプリです。
Github Pages上で実行できるため、Dockerの準備は不要です。
各種プログラミング言語でクライアントを作成することができます。
[録音アプリ on Github Pages](https://w-okada.github.io/voice-changer/)
また、curlなどのOSに組み込まれているHTTPクライアントを使って操作ができます。
録音したデータは、ブラウザ上に保存されます。外部に一切漏れることはありません。
## トラブルシュート
## トレーナー(トレーニング用アプリ)
MMVCのトレーニングを行うアプリです。
Dockerでの実行を強く推奨します。
[通信編](tutorials/trouble_shoot_communication_ja.md)
Colaboratoryでの実行を行う場合は、次のートから実行できます。
- [Colab ノート](https://github.com/w-okada/voice-changer/blob/master/MMVCTrainerFrontendDemo.ipynb)
## 開発者の署名について
Colaboratoryで実行する場合は、Colabの制約により途中切断が発生する可能性があります。Web上では各種対策が示されていますので、必要に応じて各自でご対応をお願いします。また、途中切断に備え、こまめなモデルのダウンロードをお勧めします。
本ソフトウェアは開発元の署名しておりません。下記のように警告が出ますが、コントロールキーを押しながらアイコンをクリックすると実行できるようになります。これは Apple のセキュリティポリシーによるものです。実行は自己責任となります。
## プレイヤー(ボイスチェンジャーアプリ)
MMVCでボイチェンを行うためのアプリです。
お手元のPCでの使用を推奨します。一部ユーザ体験が劣化しますが、次のートでColaboratoryでの実行も可能です。
- [超簡単バージョン](https://github.com/w-okada/voice-changer/blob/master/VoiceChangerDemo_Simple.ipynb): 事前設定なしでColabから実行できます。
- [普通バージョン](https://github.com/w-okada/voice-changer/blob/master/VoiceChangerDemo.ipynb): Google Driveと連携してモデルを読み込むことができます。
![image](https://user-images.githubusercontent.com/48346627/212567711-c4a8d599-e24c-4fa3-8145-a5df7211f023.png)
# 説明動画
| No | タイトル | リンク |
| --- | ------------------------------------ | --------------------------------------- |
| 01 | ざっくり説明編 | [youtube](https://youtu.be/MOPqnDPqhAU) |
| 02 | ユーザー音声の録音編 | [youtube](https://youtu.be/s_GirFEGvaA) |
| 03 | トレーニング編 | 作成中 |
| 04a | Colabでボイチェン編 | [youtube](https://youtu.be/TogfMzXH1T0) |
| 04b | PCでボイチェン編 | 欠番(ex1, ex2, 04aの内容と被るため) |
| ex1 | 番外編WSL2とDockerのインストール | [youtube](https://youtu.be/POo_Cg0eFMU) |
| ex2 | 番外編WSL2とAnacondaのインストール | [youtube](https://youtu.be/fba9Zhsukqw) |
## Acknowledgments
* [立ちずんだもん素材](https://seiga.nicovideo.jp/seiga/im10792934)
* [いらすとや](https://www.irasutoya.com/)
* [つくよみちゃん](https://tyc.rei-yumesaki.net/)
## リアルタイム性
```
本ソフトウェアの音声合成には、フリー素材キャラクター「つくよみちゃん」が無料公開している音声データを使用しています。
■つくよみちゃんコーパスCV.夢前黎)
https://tyc.rei-yumesaki.net/material/corpus/
© Rei Yumesaki
```
GPUを使用すると100msec強の遅延で変換することが可能です。
* [あみたろの声素材工房](https://amitaro.net/)
* [れぷりかどーる](https://kikyohiroto1227.wixsite.com/kikoto-utau)
https://user-images.githubusercontent.com/48346627/199807082-9d2ca75b-3a05-463d-b32e-14e663603626.mp4
## 利用規約
* リアルタイムボイスチェンジャーつくよみちゃんについては、つくよみちゃんコーパスの利用規約に準じ、次の目的で変換後の音声を使用することを禁止します。
CPUでも最近のであればそれなりの速度で変換可能。
```
https://user-images.githubusercontent.com/48346627/199855821-596f0874-8f69-4354-b226-4a755e9763bc.mp4
■人を批判・攻撃すること。(「批判・攻撃」の定義は、つくよみちゃんキャラクターライセンスに準じます)
■特定の政治的立場・宗教・思想への賛同または反対を呼びかけること。
古いCPU( i7-4770)だと、1000msecくらいかかってしまう
■刺激の強い表現をゾーニングなしで公開すること
# Misc
## 簡易デモ(soft-vc)
soft-vcを用いたボイスチェンジャです。
■他者に対して二次利用(素材としての利用)を許可する形で公開すること。
※鑑賞用の作品として配布・販売していただくことは問題ございません。
```
[コラボのノート](https://github.com/w-okada/voice-changer/blob/master/SoftVcDemo.ipynb)
* リアルタイムボイスチェンジャーあみたろについては、あみたろの声素材工房様の次の利用規約に準じます。詳細は[こちら](https://amitaro.net/voice/faq/#index_id6)
[説明動画](https://user-images.githubusercontent.com/48346627/191019809-e7ae7c86-4b44-45f3-9dc3-3dc668992db4.mp4
)
```
あみたろの声素材やコーパス読み上げ音声を使って音声モデルを作ったり、ボイスチェンジャーや声質変換などを使用して、自分の声をあみたろの声に変換して使うのもOKです。
ただしその場合は絶対に、あみたろ(もしくは小春音アミ)の声に声質変換していることを明記し、あみたろ(および小春音アミ)が話しているわけではないことが誰でもわかるようにしてください。
また、あみたろの声で話す内容は声素材の利用規約の範囲内のみとし、センシティブな発言などはしないでください。
```
* リアルタイムボイスチェンジャー黄琴まひろについては、れぷりかどーるの利用規約に準じます。詳細は[こちら](https://kikyohiroto1227.wixsite.com/kikoto-utau/ter%EF%BD%8Ds-of-service)
# Acknowledgments
- 立ちずんだもん素材https://seiga.nicovideo.jp/seiga/im10792934
- いらすとやhttps://www.irasutoya.com/
## 免責事項
本ソフトウェアの使用または使用不能により生じたいかなる直接損害・間接損害・波及的損害・結果的損害 または特別損害についても、一切責任を負いません。

122
README_dev_en.md Normal file
View File

@ -0,0 +1,122 @@
## For Developper
[Japanese](/README_dev_ja.md) [Russian](/README_dev_ru.md)
## Prerequisit
- Linux(ubuntu, debian) or WSL2, (not tested for other linux distributions and Mac)
- Anaconda
## Preparation
1. Create anaconda virtual environment
```
$ conda create -n vcclient-dev python=3.10
$ conda activate vcclient-dev
```
2. clone repository
```
$ git clone https://github.com/w-okada/voice-changer.git
```
## For Server Developer
1. Install requirements
```
$ cd voice-changer/server
$ pip install -r requirements.txt
```
2. Run server
Run server with the below command. You can replace the path to each weight.
```
$ python3 MMVCServerSIO.py -p 18888 --https true \
--content_vec_500 pretrain/checkpoint_best_legacy_500.pt \
--content_vec_500_onnx pretrain/content_vec_500.onnx \
--content_vec_500_onnx_on true \
--hubert_base pretrain/hubert_base.pt \
--hubert_base_jp pretrain/rinna_hubert_base_jp.pt \
--hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \
--nsf_hifigan pretrain/nsf_hifigan/model \
--crepe_onnx_full pretrain/crepe_onnx_full.onnx \
--crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \
--rmvpe pretrain/rmvpe.pt \
--model_dir model_dir \
--samples samples.json
```
Access with Browser (currently only chrome is supported), then you can see gui.
2-1. Trouble shoot
(1) OSError: PortAudio library not found
If you get the message below, you shold install additional library.
```
OSError: PortAudio library not found
```
You can install the library this command.
```
$ sudo apt-get install libportaudio2
$ sudo apt-get install libasound-dev
```
(2) It's not starting up! Damn software!
The client will not start automatically. Please launch your browser and access the URL displayed on the console. And watch your words.
(3) Could not load library libcudnn_cnn_infer.so.8
When using WSL, you might encounter a message saying `Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory`. This often happens because the path hasn't been properly set. Please set the path as shown below. It might be handy to add this to your launch script, such as .bashrc.
```
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
```
- reference
- https://qiita.com/cacaoMath/items/811146342946cdde5b83
- https://github.com/microsoft/WSL/issues/8587
3. Enjoy developing.
### Appendix
1. Win + Anaconda (not supported)
use conda to install pytorch
```
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
```
Also run these command.
```
pip install chardet
pip install numpy==1.24.0
```
## For Client Developer
1. Import modules and initial build
```
cd client
cd lib
npm install
npm run build:dev
cd ../demo
npm install
npm run build:dev
```
2. Enjoy developing.

122
README_dev_ja.md Normal file
View File

@ -0,0 +1,122 @@
## 開発者向け
[English](/README_dev_en.md)
## 前提
- Linux(ubuntu, debian) or WSL2, (not tested for other linux distributions and Mac)
- Anaconda
## 準備
1. Anaconda の仮想環境を作成する
```
$ conda create -n vcclient-dev python=3.10
$ conda activate vcclient-dev
```
2. リポジトリをクローンする
```
$ git clone https://github.com/w-okada/voice-changer.git
```
## サーバ開発者向け
1. モジュールをインストールする
```
$ cd voice-changer/server
$ pip install -r requirements.txt
```
2. サーバを起動する
次のコマンドで起動します。各種重みについてのパスは環境に合わせて変えてください。
```
$ python3 MMVCServerSIO.py -p 18888 --https true \
--content_vec_500 pretrain/checkpoint_best_legacy_500.pt \
--content_vec_500_onnx pretrain/content_vec_500.onnx \
--content_vec_500_onnx_on true \
--hubert_base pretrain/hubert_base.pt \
--hubert_base_jp pretrain/rinna_hubert_base_jp.pt \
--hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \
--nsf_hifigan pretrain/nsf_hifigan/model \
--crepe_onnx_full pretrain/crepe_onnx_full.onnx \
--crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \
--rmvpe pretrain/rmvpe.pt \
--model_dir model_dir \
--samples samples.json
```
ブラウザ(Chrome のみサポート)でアクセスすると画面が表示されます。
2-1. トラブルシュート
(1) OSError: PortAudio library not found
次のようなメッセージが表示される場合、追加でライブラリを追加する必要があります。
```
OSError: PortAudio library not found
```
ubuntu(wsl2)の場合下記のコマンドでインストールできます。
```
$ sudo apt-get install libportaudio2
$ sudo apt-get install libasound-dev
```
(2) 起動しないんだけど!?
自動でクライアントは起動しません。ブラウザを立ち上げてコンソールに表示された URL にアクセスしてください。
(3) Could not load library libcudnn_cnn_infer.so.8
WSL を使っていると`Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory`と表示される場合があります。
パスが通っていないことが原因のことが多いです。下記のようにパスを通して実行してください。
.bashrc など起動スクリプトに追加しておくと便利だと思います。
```
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
```
- 参考
- https://qiita.com/cacaoMath/items/811146342946cdde5b83
- https://github.com/microsoft/WSL/issues/8587
3. 開発しましょう
### Appendix
1. Win + Anaconda のとき (not supported)
pytorch を conda で入れないと gpu を認識しないかもしれない。
```
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
```
また、追加で下記も必要のようだ。
```
pip install chardet
pip install numpy==1.24.0
```
## クライアント開発者向け
1. モジュールをインストールして、一度ビルドします
```
cd client
cd lib
npm install
npm run build:dev
cd ../demo
npm install
npm run build:dev
```
2. 開発しましょう

122
README_dev_ko.md Normal file
View File

@ -0,0 +1,122 @@
## 개발자용
[English](/README_dev_en.md) [Korean](/README_dev_ko.md)
## 전제
- Linux(ubuntu, debian) or WSL2, (다른 리눅스 배포판과 Mac에서는 테스트하지 않았습니다)
- Anaconda
## 준비
1. Anaconda 가상 환경을 작성한다
```
$ conda create -n vcclient-dev python=3.10
$ conda activate vcclient-dev
```
2. 리포지토리를 클론한다
```
$ git clone https://github.com/w-okada/voice-changer.git
```
## 서버 개발자용
1. 모듈을 설치한다
```
$ cd voice-changer/server
$ pip install -r requirements.txt
```
2. 서버를 구동한다
다음 명령어로 구동합니다. 여러 가중치에 대한 경로는 환경에 맞게 변경하세요.
```
$ python3 MMVCServerSIO.py -p 18888 --https true \
--content_vec_500 pretrain/checkpoint_best_legacy_500.pt \
--content_vec_500_onnx pretrain/content_vec_500.onnx \
--content_vec_500_onnx_on true \
--hubert_base pretrain/hubert_base.pt \
--hubert_base_jp pretrain/rinna_hubert_base_jp.pt \
--hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \
--nsf_hifigan pretrain/nsf_hifigan/model \
--crepe_onnx_full pretrain/crepe_onnx_full.onnx \
--crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \
--rmvpe pretrain/rmvpe.pt \
--model_dir model_dir \
--samples samples.json
```
브라우저(Chrome에서만 지원)에서 접속하면 화면이 나옵니다.
2-1. 문제 해결법
(1) OSError: PortAudio library not found
다음과 같은 메시지가 나올 경우에는 추가 라이브러리를 설치해야 합니다.
```
OSError: PortAudio library not found
```
ubuntu(wsl2)인 경우에는 아래 명령어로 설치할 수 있습니다.
```
$ sudo apt-get install libportaudio2
$ sudo apt-get install libasound-dev
```
(2) 서버 구동이 안 되는데요?!
클라이언트는 자동으로 구동되지 않습니다. 브라우저를 실행하고 콘솔에 표시된 URL로 접속하세요.
(3) Could not load library libcudnn_cnn_infer.so.8
WSL를 사용 중이라면 `Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory`라는 메시지가 나오는 경우가 있습니다.
잘못된 경로가 원인인 경우가 많습니다. 아래와 같이 경로를 바꾸고 실행해 보세요.
.bashrc 등 구동 스크립트에 추가해 두면 편리합니다.
```
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
```
- 참고
- https://qiita.com/cacaoMath/items/811146342946cdde5b83
- https://github.com/microsoft/WSL/issues/8587
3. 개발하세요
### Appendix
1. Win + Anaconda일 때 (not supported)
pytorch를 conda가 없으면 gpu를 인식하지 않을 수 있습니다.
```
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
```
또한 추가로 아래 내용도 필요합니다.
```
pip install chardet
pip install numpy==1.24.0
```
## 클라이언트 개발자용
1. 모듈을 설치하고 한번 빌드합니다
```
cd client
cd lib
npm install
npm run build:dev
cd ../demo
npm install
npm run build:dev
```
2. 개발하세요

124
README_dev_ru.md Normal file
View File

@ -0,0 +1,124 @@
Вот перевод файла `README_dev_en.md` на русский язык:
## Для разработчиков
[Японский](/README_dev_ja.md) [Английский](/README_dev_en.md)
## Требования
- Linux (Ubuntu, Debian) или WSL2 (другие дистрибуции Linux и Mac не тестировались)
- Anaconda
## Подготовка
1. Создайте виртуальную среду Anaconda:
```
$ conda create -n vcclient-dev python=3.10
$ conda activate vcclient-dev
```
2. Клонируйте репозиторий:
```
$ git clone https://github.com/w-okada/voice-changer.git
```
## Для серверных разработчиков
1. Установите необходимые зависимости:
```
$ cd voice-changer/server
$ pip install -r requirements.txt
```
2. Запустите сервер
Запустите сервер с помощью следующей команды. Вы можете указать свои пути к весам моделей.
```
$ python3 MMVCServerSIO.py -p 18888 --https true \
--content_vec_500 pretrain/checkpoint_best_legacy_500.pt \
--content_vec_500_onnx pretrain/content_vec_500.onnx \
--content_vec_500_onnx_on true \
--hubert_base pretrain/hubert_base.pt \
--hubert_base_jp pretrain/rinna_hubert_base_jp.pt \
--hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \
--nsf_hifigan pretrain/nsf_hifigan/model \
--crepe_onnx_full pretrain/crepe_onnx_full.onnx \
--crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \
--rmvpe pretrain/rmvpe.pt \
--model_dir model_dir \
--samples samples.json
```
Откройте браузер (на данный момент поддерживается только Chrome), и вы увидите графический интерфейс.
2-1. Устранение неполадок
(1) OSError: не найдена библиотека PortAudio
Если вы получите сообщение ниже, необходимо установить дополнительную библиотеку:
```
OSError: PortAudio library not found
```
Вы можете установить библиотеку командой:
```
$ sudo apt-get install libportaudio2
$ sudo apt-get install libasound-dev
```
(2) Не запускается! Чертова программа!
Клиент не запускается автоматически. Пожалуйста, откройте браузер и перейдите по URL, отображаемому в консоли. И будьте осторожны со словами.
(3) Не удалось загрузить библиотеку libcudnn_cnn_infer.so.8
При использовании WSL может возникнуть ошибка `Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory`. Это часто связано с тем, что путь к библиотеке не установлен. Установите путь с помощью команды ниже. Вы можете добавить эту команду в ваш скрипт запуска, например, в .bashrc.
```
export LD_LIBRARY_PATH=/usr/lib/wsl/lib:$LD_LIBRARY_PATH
```
- ссылки:
- https://qiita.com/cacaoMath/items/811146342946cdde5b83
- https://github.com/microsoft/WSL/issues/8587
3. Наслаждайтесь разработкой.
### Приложение
1. Windows + Anaconda (не поддерживается)
Используйте conda для установки PyTorch:
```
conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia
```
Также выполните эти команды:
```
pip install chardet
pip install numpy==1.24.0
```
## Для клиентских разработчиков
1. Импорт модулей и начальная сборка:
```
cd client
cd lib
npm install
npm run build:dev
cd ../demo
npm install
npm run build:dev
```
2. Наслаждайтесь.

151
README_en.md Normal file
View File

@ -0,0 +1,151 @@
## VC Client
[Japanese](/README_ja.md) [Korean](/README_ko.md) [Russian](/README_ru.md)
## What's New!
- We have released a sister product, the Text To Speech client.
- You can enjoy voice generation with a simple interface.
- For more details, click [here](https://github.com/w-okada/ttsclient).
- Beatrice V2 Training Code Released!!!
- [Training Code Repository](https://huggingface.co/fierce-cats/beatrice-trainer)
- [Colab Version](https://github.com/w-okada/beatrice-trainer-colab)
- v.2.0.70-beta (only for m1 mac)
- [HERE](https://github.com/w-okada/voice-changer/tree/v.2)
- new feature:
- The M1 Mac version of VCClient now supports Beatrice v2 beta.1.
- v.2.0.69-beta (only for win)
- [HERE](https://github.com/w-okada/voice-changer/tree/v.2)
- bugfix:
- Fixed a bug where the start button would not be displayed in case of some exceptions
- Adjusted the output buffer for server device mode
- Fixed a bug where the sampling rate would change when settings were modified while using server device mode
- Fixed a bug when using Japanese hubert
- misc:
- Added host API filter (highlighted) for server device mode
- v.2.0.65-beta
- [HERE](https://github.com/w-okada/voice-changer/tree/v.2)
- new feature: We have supported Beatrice v2 beta.1, enabling even higher quality voice conversion.
# What is VC Client
1. This is a client software for performing real-time voice conversion using various Voice Conversion (VC) AI. The supported AI for voice conversion are as follows.
- [MMVC](https://github.com/isletennos/MMVC_Trainer) (only v1)
- [so-vits-svc](https://github.com/svc-develop-team/so-vits-svc) (only v1)
- [RVC(Retrieval-based-Voice-Conversion)](https://github.com/liujing04/Retrieval-based-Voice-Conversion-WebUI)
- [DDSP-SVC](https://github.com/yxlllc/DDSP-SVC) (only v1)
- [Beatrice JVS Corpus Edition](https://prj-beatrice.com/) * experimental, (***NOT MIT License*** see [readme](https://github.com/w-okada/voice-changer/blob/master/server/voice_changer/Beatrice/)) * Only for Windows, CPU dependent (only v1)
- [Beatrice v2](https://prj-beatrice.com/) (only for v2)
1. Distribute the load by running Voice Changer on a different PC
The real-time voice changer of this application works on a server-client configuration. By running the MMVC server on a separate PC, you can run it while minimizing the impact on other resource-intensive processes such as gaming commentary.
![image](https://user-images.githubusercontent.com/48346627/206640768-53f6052d-0a96-403b-a06c-6714a0b7471d.png)
3. Cross-platform compatibility
Supports Windows, Mac (including Apple Silicon M1), Linux, and Google Colaboratory.
## Related Software
- [Real-time Voice Changer VCClient](https://github.com/w-okada/voice-changer)
- [Text-to-Speech Software TTSClient](https://github.com/w-okada/ttsclient)
- [Real-Time Speech Recognition Software ASRClient](https://github.com/w-okada/asrclient)
# usage
This is an app for performing voice changes with MMVC and so-vits-svc.
It can be used in two main ways, in order of difficulty:
- Using a pre-built binary
- Setting up an environment with Docker or Anaconda and using it
## (1) Usage with pre-built binaries
- You can download and run executable binaries.
- Please see [here](tutorials/tutorial_rvc_en_latest.md) for the tutorial. ([trouble shoot](https://github.com/w-okada/voice-changer/blob/master/tutorials/trouble_shoot_communication_ja.md))
- It's now easy to try it out on [Google Colaboratory](https://github.com/w-okada/voice-changer/tree/v.2/w_okada's_Voice_Changer_version_2_x.ipynb) (requires a ngrok account). You can launch it from the 'Open in Colab' button in the top left corner.
<img src="https://github.com/w-okada/voice-changer/assets/48346627/3f092e2d-6834-42f6-bbfd-7d389111604e" width="400" height="150">
- We offer Windows and Mac versions on [hugging face](https://huggingface.co/wok000/vcclient000/tree/main)
- v2 for Windows
- Please download and use `vcclient_win_std_xxx.zip`. You can perform voice conversion using a reasonably high-performance CPU without a GPU, or by utilizing DirectML to leverage GPUs (AMD, Nvidia). v2 supports both torch and onnx.
- If you have an Nvidia GPU, you can achieve faster voice conversion by using `vcclient_win_cuda_xxx.zip`.
- v2 for Mac (Apple Silicon)
- Please download and use `vcclient_mac_xxx.zip`.
- v1
- If you are using a Windows and Nvidia GPU, please download ONNX (cpu, cuda), PyTorch (cpu, cuda).
- If you are using a Windows and AMD/Intel GPU, please download ONNX (cpu, DirectML) and PyTorch (cpu, cuda). AMD/Intel GPUs are only enabled for ONNX models.
- In either case, for GPU support, PyTorch and Onnxruntime are only enabled if supported.
- If you are not using a GPU on Windows, please download ONNX (cpu, cuda) and PyTorch (cpu, cuda).
- For Windows user, after unzipping the downloaded zip file, please run the `start_http.bat` file corresponding to your VC.
- For Mac version, after unzipping the downloaded file, double-click the `startHttp.command` file corresponding to your VC. If a message indicating that the developer cannot be verified is displayed, please press the control key and click to run it again (or right-click to run it).
- If you are connecting remotely, please use the `.command` file (Mac) or `.bat` file (Windows) with https instead of http.
- The encoder of DDPS-SVC only supports hubert-soft.
- [Download from hugging face](https://huggingface.co/wok000/vcclient000/tree/main)
## (2) Usage after setting up the environment such as Docker or Anaconda
Clone this repository and use it. Setting up WSL2 is essential for Windows. Additionally, setting up virtual environments such as Docker or Anaconda on WSL2 is also required. On Mac, setting up Python virtual environments such as Anaconda is necessary. Although preparation is required, this method works the fastest in many environments. **<font color="red"> Even without a GPU, it may work well enough with a reasonably new CPU </font>(refer to the section on real-time performance below)**.
[Explanation video on installing WSL2 and Docker](https://youtu.be/POo_Cg0eFMU)
[Explanation video on installing WSL2 and Anaconda](https://youtu.be/fba9Zhsukqw)
To run docker, see [start docker](docker_vcclient/README_en.md).
To run on Anaconda venv, see [server developer's guide](README_dev_en.md)
To run on Linux using an AMD GPU, see [setup guide linux](tutorials/tutorial_anaconda_amd_rocm.md)
# Software Signing
This software is not signed by the developer. A warning message will appear, but you can run the software by clicking the icon while holding down the control key. This is due to Apple's security policy. Running the software is at your own risk.
![image](https://user-images.githubusercontent.com/48346627/212567711-c4a8d599-e24c-4fa3-8145-a5df7211f023.png)
https://user-images.githubusercontent.com/48346627/212569645-e30b7f4e-079d-4504-8cf8-7816c5f40b00.mp4
# Acknowledgments
- [Tachizunda-mon materials](https://seiga.nicovideo.jp/seiga/im10792934)
- [Irasutoya](https://www.irasutoya.com/)
- [Tsukuyomi-chan](https://tyc.rei-yumesaki.net)
> This software uses the voice data of the free material character "Tsukuyomi-chan," which is provided for free by CV. Yumesaki Rei.
>
> - Tsukuyomi-chan Corpus (CV. Yumesaki Rei)
>
> https://tyc.rei-yumesaki.net/material/corpus/
>
> Copyright. Rei Yumesaki
- [Amitaro's Onsozai kobo](https://amitaro.net/)
- [Replica doll](https://kikyohiroto1227.wixsite.com/kikoto-utau)
# Terms of Use
In accordance with the Tsukuyomi-chan Corpus Terms of Use for the Tsukuyomi-chan Real-time Voice Changer, the use of the converted voice for the following purposes is prohibited.
- Criticizing or attacking individuals (the definition of "criticizing or attacking" is based on the Tsukuyomi-chan character license).
- Advocating for or opposing specific political positions, religions, or ideologies.
- Publicly displaying strongly stimulating expressions without proper zoning.
- Publicly disclosing secondary use (use as materials) for others.
(Distributing or selling as a work for viewing is not a problem.)
Regarding the Real-time Voice Changer Amitaro, we prohibit the following uses in accordance with the terms of use of the Amitaro's koe-sozai kobo.[detail](https://amitaro.net/voice/faq/#index_id6)
Regarding the Real-time Voice Changer Kikoto Mahiro, we prohibit the following uses in accordance with the terms of use of Replica doll.[detail](https://kikyohiroto1227.wixsite.com/kikoto-utau/ter%EF%BD%8Ds-of-service)
# Disclaimer
We are not liable for any direct, indirect, consequential, incidental, or special damages arising out of or in any way connected with the use or inability to use this software.

185
README_ko.md Normal file
View File

@ -0,0 +1,185 @@
## VC Client
[English](/README_en.md) [Korean](/README_ko.md)
## 새로운 기능!
- 자매품으로 텍스트 음성 변환 클라이언트를 출시하였습니다.
- 간단한 인터페이스로 음성 생성을 즐길 수 있습니다.
- 자세한 내용은 [여기](https://github.com/w-okada/ttsclient)를 참조하세요.
- Beatrice V2 훈련 코드 공개!!!
- [훈련 코드 리포지토리](https://huggingface.co/fierce-cats/beatrice-trainer)
- [Colab 버전](https://github.com/w-okada/beatrice-trainer-colab)
- v.2.0.70-beta (only for m1 mac)
- [여기를 참조하십시오](https://github.com/w-okada/voice-changer/tree/v.2)
- new feature:
- M1 Mac 버전 VCClient에서도 Beatrice v2 beta.1을 지원합니다.
- v.2.0.69-beta (only for win)
- [여기를 참조하십시오](https://github.com/w-okada/voice-changer/tree/v.2)
- 버그 수정:
- 일부 예외 발생 시 시작 버튼이 표시되지 않는 버그를 수정
- 서버 디바이스 모드의 출력 버퍼 조정
- 서버 디바이스 모드 사용 중 설정 변경 시 샘플링 레이트가 변하는 버그 수정
- 일본어 hubert 사용 시 버그 수정
- 기타:
- 서버 디바이스 모드에 호스트 API 필터 추가 (강조 표시)
- v.2.0.65-beta
- [여기를 참조하십시오](https://github.com/w-okada/voice-changer/tree/v.2)
- new feature: Beatrice v2 beta.1를 지원하여 더 높은 품질의 음성 변환이 가능해졌습니다
# VC Client란
1. 각종 음성 변환 AI(VC, Voice Conversion)를 활용해 실시간 음성 변환을 하기 위한 클라이언트 소프트웨어입니다. 지원하는 음성 변환 AI는 다음과 같습니다.
- 지원하는 음성 변환 AI (지원 VC)
- [MMVC](https://github.com/isletennos/MMVC_Trainer) (only v1)
- [so-vits-svc](https://github.com/svc-develop-team/so-vits-svc) (only v1)
- [RVC(Retrieval-based-Voice-Conversion)](https://github.com/liujing04/Retrieval-based-Voice-Conversion-WebUI)
- [DDSP-SVC](https://github.com/yxlllc/DDSP-SVC) (only v1)
- [Beatrice JVS Corpus Edition](https://prj-beatrice.com/) * experimental, (***NOT MIT License*** see [readme](https://github.com/w-okada/voice-changer/blob/master/server/voice_changer/Beatrice/)) * Only for Windows, CPU dependent (only v1)
- [Beatrice v2](https://prj-beatrice.com/) (only for v2)
-
1. 이 소프트웨어는 네트워크를 통한 사용도 가능하며, 게임 등 부하가 큰 애플리케이션과 동시에 사용할 경우 음성 변화 처리의 부하를 외부로 돌릴 수도 있습니다.
![image](https://user-images.githubusercontent.com/48346627/206640768-53f6052d-0a96-403b-a06c-6714a0b7471d.png)
3. 여러 플랫폼을 지원합니다.
- Windows, Mac(M1), Linux, Google Colab (MMVC만 지원)
## 관련 소프트웨어
- [실시간 음성 변조기 VCClient](https://github.com/w-okada/voice-changer)
- [텍스트 읽기 소프트웨어 TTSClient](https://github.com/w-okada/ttsclient)
- [실시간 음성 인식 소프트웨어 ASRClient](https://github.com/w-okada/asrclient)
# 사용 방법
크게 두 가지 방법으로 사용할 수 있습니다. 난이도 순서는 다음과 같습니다.
- 사전 빌드된 Binary 사용
- Docker, Anaconda 등으로 구축된 개발 환경에서 사용
이 소프트웨어나 MMVC에 익숙하지 않은 분들은 위에서부터 차근차근 익숙해지길 추천합니다.
## (1) 사전 빌드된 Binary(파일) 사용
- 실행 형식 바이너리를 다운로드하여 실행할 수 있습니다.
- 튜토리얼은 [이곳](tutorials/tutorial_rvc_ko_latest.md)을 확인하세요。([네트워크 문제 해결법](https://github.com/w-okada/voice-changer/blob/master/tutorials/trouble_shoot_communication_ko.md))
- [Google Colaboratory](https://github.com/w-okada/voice-changer/tree/v.2/w_okada's_Voice_Changer_version_2_x.ipynb) で簡単にお試しいただけるようになりました。左上の Open in Colab のボタンから起動できます。
<img src="https://github.com/w-okada/voice-changer/assets/48346627/3f092e2d-6834-42f6-bbfd-7d389111604e" width="400" height="150">
- Windows 버전과 Mac 버전을 제공하고 있습니다. [Hugging Face](https://huggingface.co/wok000/vcclient000/tree/main)에서 다운로드할 수 있습니다.
- Windows용 v2
- `vcclient_win_std_xxx.zip`를 다운로드하여 사용하세요. GPU를 사용하지 않고도 (어느 정도 고성능의) CPU를 사용한 음성 변환이나, DirectML을 사용해 GPU(AMD, Nvidia)를 활용한 음성 변환이 가능합니다. v2에서는 torch와 onnx 모두를 지원합니다.
- Nvidia GPU를 가지고 계신 분들은 `vcclient_win_cuda_xxx.zip`를 사용하시면 더 빠른 음성 변환이 가능합니다.
- Mac (Apple Silicon)용 v2
- `vcclient_mac_xxx.zip`를 다운로드하여 사용하세요.
- v1
- Windows와 NVIDIA GPU를 사용하는 분은 ONNX(cpu, cuda), PyTorch(cpu, cuda)를 다운로드하세요.
- Windows와 AMD/Intel GPU를 사용하는 분은 ONNX(cpu, DirectML), PyTorch(cpu, cuda)를 다운로드하세요 AMD/Intel GPU는 ONNX 모델을 사용할 때만 적용됩니다.
- 그 외 GPU도 PyTorch, Onnxruntime가 지원할 경우에만 적용됩니다.
- Windows에서 GPU를 사용하지 않는 분은 ONNX(cpu, cuda), PyTorch(cpu, cuda)를 다운로드하세요.
- Windows 버전은 다운로드한 zip 파일의 압축을 풀고 `start_http.bat`를 실행하세요.
- Mac 버전은 다운로드한 파일을 풀고 `startHttp.command`를 실행하세요. 확인되지 않은 개발자 메시지가 나오면 다시 control 키를 누르고 클릭해 실행하세요(or 오른쪽 클릭으로 실행하세요).
- 처음 실행할 때는 인터넷으로 여러 데이터를 다운로드합니다. 다운로드할 때 시간이 좀 걸릴 수 있습니다. 다운로드가 완료되면 브라우저가 실행됩니다.
- 원격으로 접속할 때는 http 대신 https `.bat` 파일(win)、`.command` 파일(mac)을 실행하세요.
- DDPS-SVC의 encoder는 hubert-soft만 지원합니다.
## (2) Docker나 Anaconda 등으로 구축된 개발 환경에서 사용
이 리포지토리를 클론해 사용할 수 있습니다. Windows에서는 WSL2 환경 구축이 필수입니다. 또한, WSL2 상에 Docker나 Anaconda 등의 가상환경 구축이 필요합니다. Mac에서는 Anaconda 등의 Python 가상환경 구축이 필요합니다. 사전 준비가 필요하지만, 많은 환경에서 이 방법이 가장 빠르게 작동합니다. **<font color="red"> GPU가 없어도 나름 최근 출시된 CPU가 있다면 충분히 작동할 가능성이 있습니다</font>(아래 실시간성 항목 참조)**.
[WSL2와 Docker 설치 설명 영상](https://youtu.be/POo_Cg0eFMU)
[WSL2와 Anaconda 설치 설명 영상](https://youtu.be/fba9Zhsukqw)
Docker에서 실행은 [Docker를 사용](docker_vcclient/README_ko.md)을 참고해 서버를 구동하세요.
Anaconda 가상 환경에서 실행은 [서버 개발자용 문서](README_dev_ko.md)를 참고해 서버를 구동하세요.
# 문제 해결법
- [통신편](tutorials/trouble_shoot_communication_ko.md)
# 개발자 서명에 대하여
이 소프트웨어는 개발자 서명이 없습니다. 本ソフトウェアは開発元の署名しておりません。下記のように警告が出ますが、コントロールキーを押しながらアイコンをクリックすると実行できるようになります。これは Apple のセキュリティポリシーによるものです。実行は自己責任となります。
![image](https://user-images.githubusercontent.com/48346627/212567711-c4a8d599-e24c-4fa3-8145-a5df7211f023.png)
(이미지 번역: ctrl을 누른 채로 클릭)
# 감사의 말
- [立ちずんだもん素材](https://seiga.nicovideo.jp/seiga/im10792934)
- [いらすとや](https://www.irasutoya.com/)
- [つくよみちゃん](https://tyc.rei-yumesaki.net/)
```
이 소프트웨어의 음성 합성에는 무료 소재 캐릭터 「つくよみちゃん(츠쿠요미 짱)」이 무료 공개하고 있는 음성 데이터를 사용했습니다.■츠쿠요미 짱 말뭉치(CV.夢前黎)
https://tyc.rei-yumesaki.net/material/corpus/
© Rei Yumesaki
```
- [あみたろの声素材工房](https://amitaro.net/)
- [れぷりかどーる](https://kikyohiroto1227.wixsite.com/kikoto-utau)
# 이용약관
- 실시간 음성 변환기 츠쿠요미 짱은 츠쿠요미 짱 말뭉치 이용약관에 따라 다음과 같은 목적으로 변환 후 음성을 사용하는 것을 금지합니다.
```
■사람을 비판·공격하는 행위. ("비판·공격"의 정의는 츠쿠요미 짱 캐릭터 라이센스에 준합니다)
■특정 정치적 입장·종교·사상에 대한 찬반을 논하는 행위.
■자극적인 표현물을 무분별하게 공개하는 행위.
■타인에게 2차 창작(소재로서의 활용)을 허가하는 형태로 공개하는 행위.
※감상용 작품으로서 배포·판매하는 건 문제없습니다.
```
- 실시간 음성 변환기 아미타로는 あみたろの声素材工房(아미타로의 음성 소재 공방)의 다음 이용약관에 따릅니다. 자세한 내용은 [이곳](https://amitaro.net/voice/faq/#index_id6)에 있습니다.
```
아미타로의 음성 소재나 말뭉치 음성으로 음성 모델을 만들거나, 음성 변환기나 말투 변환기 등을 사용해 본인 목소리를 아미타로의 목소리로 변환해 사용하는 것도 괜찮습니다.
단, 그 경우에는 반드시 아미타로(혹은 코하루네 아미)의 음성으로 변환한 것을 명시하고, 아미타로(및 코하루네 아미)가 말하는 것이 아님을 누구나 알 수 있도록 하십시오.
또한 아미타로의 음성으로 말하는 내용은 음성 소재 이용약관의 범위 내에서만 사용해야 하며, 민감한 발언은 삼가십시오.
```
- 실시간 음성 변환기 키코토 마히로는 れぷりかどーる(레플리카 돌)의 이용약관에 따릅니다. 자세한 내용은 [이곳](https://kikyohiroto1227.wixsite.com/kikoto-utau/ter%EF%BD%8Ds-of-service)에 있습니다.
# 면책 사항
이 소프트웨어의 사용 또는 사용 불능으로 인해 발생한 직접 손해·간접 손해·파생적 손해·결과적 손해 또는 특별 손해에 대해 모든 책임을 지지 않습니다.
# (1) 레코더(트레이닝용 음성 녹음 앱)
MMVC 트레이닝용 음성을 간단하게 녹음할 수 있는 앱입니다.
Github Pages에서 실행할 수 있어서 브라우저만 있으면 다양한 플랫폼에서 사용할 수 있습니다.
녹음한 데이터는 브라우저에 저장됩니다. 외부로 유출되지 않습니다.
[녹음 앱 on Github Pages](https://w-okada.github.io/voice-changer/)
[설명 영상](https://youtu.be/s_GirFEGvaA)
# 이전 버전
| Version | OS | 프레임워크 | link | 지원 VC | 파일 크기 |
| ---------- | --- | --------------------------------- | ---------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | --------- |
| v.1.5.2.9e | mac | ONNX(cpu), PyTorch(cpu,mps) | [normal](https://drive.google.com/uc?id=1W0d7I7619PcO7kjb1SPXp6MmH5Unvd78&export=download) \*1 | MMVC v.1.5.x, MMVC v.1.3.x, so-vits-svc 4.0, RVC | 796MB |
| | win | ONNX(cpu,cuda), PyTorch(cpu,cuda) | [normal](https://drive.google.com/uc?id=1tmTMJRRggS2Sb4goU-eHlRvUBR88RZDl&export=download) \*1 | MMVC v.1.5.x, MMVC v.1.3.x, so-vits-svc 4.0, so-vits-svc 4.0v2, RVC, DDSP-SVC | 2872MB |
| v.1.5.3.1 | mac | ONNX(cpu), PyTorch(cpu,mps) | [normal](https://drive.google.com/uc?id=1oswF72q_cQQeXhIn6W275qLnoBAmcrR_&export=download) \*1 | MMVC v.1.5.x, MMVC v.1.3.x, so-vits-svc 4.0, RVC | 796MB |
| | win | ONNX(cpu,cuda), PyTorch(cpu,cuda) | [normal](https://drive.google.com/uc?id=1AWjDhW4w2Uljp1-9P8YUJBZsIlnhkJX2&export=download) \*1 | MMVC v.1.5.x, MMVC v.1.3.x, so-vits-svc 4.0, so-vits-svc 4.0v2, RVC, DDSP-SVC | 2872MB |
# For Contributor
이 리포지토리는 [CLA](https://raw.githubusercontent.com/w-okada/voice-changer/master/LICENSE-CLA)를 설정했습니다.

119
README_ru.md Normal file
View File

@ -0,0 +1,119 @@
[Японский](/README_ja.md) [Корейский](/README_ko.md) [Английский](/README_en.md)
## Что нового!
- Мы выпустили продукт-сестру - клиент Text To Speech.
- Вы можете насладиться генерацией голоса через простой интерфейс.
- Подробнее [здесь](https://github.com/w-okada/ttsclient).
- Код тренировки Beatrice V2 теперь доступен!
- [Репозиторий кода тренировки](https://huggingface.co/fierce-cats/beatrice-trainer)
- [Версия для Colab](https://github.com/w-okada/beatrice-trainer-colab)
- v.2.0.70-beta (only for m1 mac)
- [HERE](https://github.com/w-okada/voice-changer/tree/v.2)
- new feature:
- В версии VCClient для Mac на базе M1 теперь поддерживается Beatrice v2 beta.1.
- v.2.0.69-beta (only for win)
- [HERE](https://github.com/w-okada/voice-changer/tree/v.2)
- Исправления ошибок:
- Исправлена ошибка, из-за которой кнопка запуска не отображалась в случае некоторых исключений
- Настроен выходной буфер для режима серверного устройства
- Исправлена ошибка, при которой изменялась частота дискретизации при изменении настроек в режиме серверного устройства
- Исправлена ошибка при использовании японского hubert
- Прочее:
- Добавлен фильтр API хоста (выделено) для режима серверного устройства
- v.2.0.65-beta
- [HERE](https://github.com/w-okada/voice-changer/tree/v.2)
- new feature: We have supported Beatrice v2 beta.1, enabling even higher quality voice conversion.
# Что такое VC Клиент
1. Это клиентское ПО для выполнения преобразования голоса в реальном времени с использованием различных AI для преобразования голоса. Поддерживаемые AI:
- [MMVC](https://github.com/isletennos/MMVC_Trainer) (только v1)
- [so-vits-svc](https://github.com/svc-develop-team/so-vits-svc) (только v1)
- [RVC (Retrieval-based Voice Conversion)](https://github.com/liujing04/Retrieval-based-Voice-Conversion-WebUI)
- [DDSP-SVC](https://github.com/yxlllc/DDSP-SVC) (только v1)
- [Beatrice JVS Corpus Edition](https://prj-beatrice.com/) * экспериментальный * (не по лицензии MIT, см. [readme](https://github.com/w-okada/voice-changer/blob/master/server/voice_changer/Beatrice/)), только для Windows, зависит от процессора (только v1)
- [Beatrice v2](https://prj-beatrice.com/) (только v2)
2. Распределение нагрузки между разными ПК
Реализация преобразования голоса работает по схеме "сервер-клиент". Вы можете запустить сервер MMVC на отдельном ПК для минимизации влияния на другие ресурсоёмкие процессы, такие как стриминг.
![image](https://user-images.githubusercontent.com/48346627/206640768-53f6052d-0a96-403b-a06c-6714a0b7471d.png)
3. Кроссплатформенная совместимость
Поддержка Windows, Mac (включая Apple Silicon M1), Linux и Google Colaboratory.
# Как использовать
Это приложение для изменения голоса с использованием MMVC и so-vits-svc.
Есть два основных способа использования, в порядке сложности:
- Использование готового исполняемого файла
- Настройка окружения с Docker или Anaconda
## (1) Использование готовых исполняемых файлов
- Вы можете скачать и запустить исполняемые файлы.
- Смотрите [здесь](tutorials/tutorial_rvc_en_latest.md) для получения руководства. ([устранение неполадок](https://github.com/w-okada/voice-changer/blob/master/tutorials/trouble_shoot_communication_ja.md))
- Теперь попробовать можно на [Google Colaboratory](https://github.com/w-okada/voice-changer/tree/v.2/w_okada's_Voice_Changer_version_2_x.ipynb) (требуется аккаунт ngrok). Вы можете запустить его через кнопку "Открыть в Colab" в верхнем левом углу.
<img src="https://github.com/w-okada/voice-changer/assets/48346627/3f092e2d-6834-42f6-bbfd-7d389111604e" width="400" height="150">
- Мы предлагаем версии для Windows и Mac на [hugging face](https://huggingface.co/wok000/vcclient000/tree/main)
- v2 для Windows
- Пожалуйста, скачайте и используйте `vcclient_win_std_xxx.zip`. Преобразование голоса можно выполнять с использованием мощного процессора без GPU или с использованием DirectML для GPU (AMD, Nvidia). v2 поддерживает как torch, так и onnx.
- Если у вас Nvidia GPU, скачайте `vcclient_win_cuda_xxx.zip` для более быстрого преобразования.
- v2 для Mac (Apple Silicon)
- Пожалуйста, скачайте и используйте `vcclient_mac_xxx.zip`.
- v1
- Для Windows с Nvidia GPU скачайте ONNX (cpu, cuda), PyTorch (cpu, cuda).
- Для Windows с AMD/Intel GPU скачайте ONNX (cpu, DirectML) и PyTorch (cpu, cuda). AMD/Intel GPU поддерживаются только для ONNX моделей.
- Для пользователей Windows: после распаковки zip-файла запустите соответствующий `start_http.bat` файл.
- Для Mac: после распаковки zip-файла дважды щёлкните на `startHttp.command`. Если появится сообщение о невозможности проверки разработчика, нажмите Ctrl и повторно запустите.
- Если подключаетесь удалённо, используйте `.command` (Mac) или `.bat` (Windows) файл с https вместо http.
- Энкодер DDPS-SVC поддерживает только hubert-soft.
- [Скачать с hugging face](https://huggingface.co/wok000/vcclient000/tree/main)
## (2) Использование после настройки окружения с Docker или Anaconda
Клонируйте этот репозиторий и используйте его. Для Windows требуется настройка WSL2. Для Mac нужно настроить виртуальные среды Python, например Anaconda. Этот метод обеспечивает наивысшую скорость в большинстве случаев. **<font color="red"> Даже без GPU можно получить достаточную производительность на современном процессоре </font>(смотрите раздел о производительности в реальном времени ниже)**.
[Видео-инструкция по установке WSL2 и Docker](https://youtu.be/POo_Cg0eFMU)
[Видео-инструкция по установке WSL2 и Anaconda](https://youtu.be/fba9Zhsukqw)
Для запуска Docker смотрите [start docker](docker_vcclient/README_en.md).
Для запуска на Anaconda venv смотрите [руководство разработчика](README_dev_ru.md).
Для запуска на Linux с AMD GPU смотрите [руководство](tutorials/tutorial_anaconda_amd_rocm.md).
# Подпись программного обеспечения
Это ПО не подписано разработчиком. Появится предупреждение, но его можно запустить, нажав на иконку с удержанием клавиши Ctrl. Это связано с политикой безопасности Apple. Использование ПО на ваш риск.
![image](https://user-images.githubusercontent.com/48346627/212567711-c4a8d599-e24c-4fa3-8145-a5df7211f023.png)
https://user-images.githubusercontent.com/48346627/212569645-e30b7f4e-079d-4504-8cf8-7816c5f40b00.mp4
# Благодарности
- [Материалы Tachizunda-mon](https://seiga.nicovideo.jp/seiga/im10792934)
- [Irasutoya](https://www.irasutoya.com/)
- [Tsukuyomi-chan](https://tyc.rei-yumesaki.net)
> Это ПО использует голосовые данные бесплатного материала персонажа "Цукуёми-тян", предоставленного CV. Юмесаки Рэй.
>
> - Корпус Цукуёми-тян (CV. Юмесаки Рэй)
>
> https://tyc.rei-yumesaki.net/material/corpus/
>
> Авторское право. Юмесаки Рэй, Все права защищены.

View File

@ -0,0 +1,206 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/w-okada/voice-changer/blob/master/Realtime_Voice_Changer_on_Colab.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"### [w-okada's Voice Changer](https://github.com/w-okada/voice-changer) | **Colab**\n",
"\n",
"---\n",
"\n",
"## **⬇ VERY IMPORTANT ⬇**\n",
"\n",
"You can use the following settings for better results:\n",
"\n",
"If you're using a index: `f0: RMVPE_ONNX | Chunk: 112 or higher | Extra: 8192`<br>\n",
"If you're not using a index: `f0: RMVPE_ONNX | Chunk: 96 or higher | Extra: 16384`<br>\n",
"**Don't forget to select a T4 GPU in the GPU field, <b>NEVER</b> use CPU!\n",
"> Seems that PTH models performance better than ONNX for now, you can still try ONNX models and see if it satisfies you\n",
"\n",
"\n",
"*You can always [click here](https://github.com/YunaOneeChan/Voice-Changer-Settings) to check if these settings are up-to-date*\n",
"\n",
"---\n",
"\n",
"### <font color=red>⬇ Always use Colab GPU! (**IMPORTANT!**) ⬇</font>\n",
"You need to use a Colab GPU so the Voice Changer can work faster and better\\\n",
"Use the menu above and click on **Runtime** » **Change runtime** » **Hardware acceleration** to select a GPU (**T4 is the free one**)\n",
"\n",
"---\n",
"**Credits**<br>\n",
"Realtime Voice Changer by [w-okada](https://github.com/w-okada)<br>\n",
"Notebook files updated by [rafacasari](https://github.com/Rafacasari)<br>\n",
"Recommended settings by [YunaOneeChan](https://github.com/YunaOneeChan)\n",
"\n",
"**Need help?** [AI Hub Discord](https://discord.gg/aihub) » ***#help-realtime-vc***\n",
"\n",
"---"
],
"metadata": {
"id": "Lbbmx_Vjl0zo"
}
},
{
"cell_type": "code",
"source": [
"# @title Clone repository and install dependencies\n",
"# @markdown This first step will download the latest version of Voice Changer and install the dependencies. **It can take some time to complete.**\n",
"%cd /content/\n",
"\n",
"!pip install colorama --quiet\n",
"from colorama import Fore, Style\n",
"import os\n",
"\n",
"print(f\"{Fore.CYAN}> Cloning the repository...{Style.RESET_ALL}\")\n",
"!git clone https://github.com/w-okada/voice-changer.git --quiet\n",
"print(f\"{Fore.GREEN}> Successfully cloned the repository!{Style.RESET_ALL}\")\n",
"%cd voice-changer/server/\n",
"\n",
"print(f\"{Fore.CYAN}> Installing libportaudio2...{Style.RESET_ALL}\")\n",
"!apt-get -y install libportaudio2 -qq\n",
"\n",
"print(f\"{Fore.CYAN}> Installing pre-dependencies...{Style.RESET_ALL}\")\n",
"# Install dependencies that are missing from requirements.txt and pyngrok\n",
"!pip install faiss-gpu fairseq pyngrok --quiet\n",
"!pip install pyworld --no-build-isolation --quiet\n",
"print(f\"{Fore.CYAN}> Installing dependencies from requirements.txt...{Style.RESET_ALL}\")\n",
"!pip install -r requirements.txt --quiet\n",
"\n",
"print(f\"{Fore.GREEN}> Successfully installed all packages!{Style.RESET_ALL}\")"
],
"metadata": {
"id": "86wTFmqsNMnD",
"cellView": "form",
"_kg_hide-output": false,
"execution": {
"iopub.status.busy": "2023-09-14T04:01:17.308284Z",
"iopub.execute_input": "2023-09-14T04:01:17.308682Z",
"iopub.status.idle": "2023-09-14T04:08:08.475375Z",
"shell.execute_reply.started": "2023-09-14T04:01:17.308652Z",
"shell.execute_reply": "2023-09-14T04:08:08.473827Z"
},
"trusted": true
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# @title Start Server **using ngrok**\n",
"# @markdown This cell will start the server, the first time that you run it will download the models, so it can take a while (~1-2 minutes)\n",
"\n",
"# @markdown ---\n",
"# @markdown You'll need a ngrok account, but <font color=green>**it's free**</font> and easy to create!\n",
"# @markdown ---\n",
"# @markdown **1** - Create a <font color=green>**free**</font> account at [ngrok](https://dashboard.ngrok.com/signup) or **login with Google/Github account**\\\n",
"# @markdown **2** - If you didn't logged in with Google/Github, you will need to **verify your e-mail**!\\\n",
"# @markdown **3** - Click [this link](https://dashboard.ngrok.com/get-started/your-authtoken) to get your auth token, and place it here:\n",
"Token = '' # @param {type:\"string\"}\n",
"# @markdown **4** - *(optional)* Change to a region near to you or keep at United States if increase latency\\\n",
"# @markdown `Default Region: us - United States (Ohio)`\n",
"Region = \"us - United States (Ohio)\" # @param [\"ap - Asia/Pacific (Singapore)\", \"au - Australia (Sydney)\",\"eu - Europe (Frankfurt)\", \"in - India (Mumbai)\",\"jp - Japan (Tokyo)\",\"sa - South America (Sao Paulo)\", \"us - United States (Ohio)\"]\n",
"\n",
"#@markdown **5** - *(optional)* Other options:\n",
"ClearConsole = True # @param {type:\"boolean\"}\n",
"\n",
"# ---------------------------------\n",
"# DO NOT TOUCH ANYTHING DOWN BELOW!\n",
"# ---------------------------------\n",
"\n",
"%cd /content/voice-changer/server\n",
"\n",
"from pyngrok import conf, ngrok\n",
"MyConfig = conf.PyngrokConfig()\n",
"MyConfig.auth_token = Token\n",
"MyConfig.region = Region[0:2]\n",
"#conf.get_default().authtoken = Token\n",
"#conf.get_default().region = Region\n",
"conf.set_default(MyConfig);\n",
"\n",
"import subprocess, threading, time, socket, urllib.request\n",
"PORT = 8000\n",
"\n",
"from pyngrok import ngrok\n",
"ngrokConnection = ngrok.connect(PORT)\n",
"public_url = ngrokConnection.public_url\n",
"\n",
"from IPython.display import clear_output\n",
"\n",
"def wait_for_server():\n",
" while True:\n",
" time.sleep(0.5)\n",
" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n",
" result = sock.connect_ex(('127.0.0.1', PORT))\n",
" if result == 0:\n",
" break\n",
" sock.close()\n",
" if ClearConsole:\n",
" clear_output()\n",
" print(\"--------- SERVER READY! ---------\")\n",
" print(\"Your server is available at:\")\n",
" print(public_url)\n",
" print(\"---------------------------------\")\n",
"\n",
"threading.Thread(target=wait_for_server, daemon=True).start()\n",
"\n",
"!python3 MMVCServerSIO.py \\\n",
" -p {PORT} \\\n",
" --https False \\\n",
" --content_vec_500 pretrain/checkpoint_best_legacy_500.pt \\\n",
" --content_vec_500_onnx pretrain/content_vec_500.onnx \\\n",
" --content_vec_500_onnx_on true \\\n",
" --hubert_base pretrain/hubert_base.pt \\\n",
" --hubert_base_jp pretrain/rinna_hubert_base_jp.pt \\\n",
" --hubert_soft pretrain/hubert/hubert-soft-0d54a1f4.pt \\\n",
" --nsf_hifigan pretrain/nsf_hifigan/model \\\n",
" --crepe_onnx_full pretrain/crepe_onnx_full.onnx \\\n",
" --crepe_onnx_tiny pretrain/crepe_onnx_tiny.onnx \\\n",
" --rmvpe pretrain/rmvpe.pt \\\n",
" --model_dir model_dir \\\n",
" --samples samples.json\n",
"\n",
"ngrok.disconnect(ngrokConnection.public_url)"
],
"metadata": {
"id": "lLWQuUd7WW9U",
"cellView": "form",
"_kg_hide-input": false,
"scrolled": true,
"trusted": true
},
"execution_count": null,
"outputs": []
}
],
"metadata": {
"colab": {
"provenance": [],
"private_outputs": true,
"include_colab_link": true,
"gpuType": "T4",
"collapsed_sections": [
"iuf9pBHYpTn-"
]
},
"kernelspec": {
"display_name": "Python 3",
"name": "python3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU"
},
"nbformat": 4,
"nbformat_minor": 0
}

File diff suppressed because it is too large Load Diff

View File

@ -1,414 +0,0 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "VoiceChangerDemo",
"provenance": [],
"authorship_tag": "ABX9TyN+y1T1MS3ZgOANG4v8pjEP",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU",
"gpuClass": "standard"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/w-okada/voice-changer/blob/dev/VoiceChangerDemo.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"MMVCプレイヤー普通版\n",
"---\n",
"\n",
"このートはColab上でMMVCのボイチェンを行うートです。\n",
"\n",
"正式版はローカルPCのDocker上で動かすアプリケーションです。\n",
"\n",
"正式版は、多くの場合より少ないタイムラグで滑らかに音声を変換できます。\n",
"\n",
"詳細な使用方法はこちらの[リポジトリ](https://github.com/w-okada/voice-changer)からご確認ください。\n"
],
"metadata": {
"id": "Lbbmx_Vjl0zo"
}
},
{
"cell_type": "markdown",
"source": [
"# GPUを確認\n",
"GPUを用いたほうが高速に処理が行えます。\n",
"\n",
"下記のコマンドでGPUが確認できない場合は、上のメニューから\n",
"\n",
"「ランタイム」→「ランタイムの変更」→「ハードウェア アクセラレータ」\n",
"\n",
"でGPUを選択してください。"
],
"metadata": {
"id": "oUKi1NYMmXrr"
}
},
{
"cell_type": "code",
"source": [
"# (1) GPUの確認\n",
"!nvidia-smi"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vV1t7PBRm-o6",
"outputId": "d87ce1ad-decb-4589-b1d5-dc2d6d36415d"
},
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Thu Jan 12 09:34:13 2023 \n",
"+-----------------------------------------------------------------------------+\n",
"| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |\n",
"|-------------------------------+----------------------+----------------------+\n",
"| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
"| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
"| | | MIG M. |\n",
"|===============================+======================+======================|\n",
"| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
"| N/A 71C P8 13W / 70W | 0MiB / 15109MiB | 0% Default |\n",
"| | | N/A |\n",
"+-------------------------------+----------------------+----------------------+\n",
" \n",
"+-----------------------------------------------------------------------------+\n",
"| Processes: |\n",
"| GPU GI CI PID Type Process name GPU Memory |\n",
"| ID ID Usage |\n",
"|=============================================================================|\n",
"| No running processes found |\n",
"+-----------------------------------------------------------------------------+\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# 使用するモデルとコンフィグファイルの指定\n",
"\n",
"使用するトレーニング済みのモデルと、トレーニングで使用したコンフィグファイルのパスを指定してください。\n",
"\n",
"多くの場合はGoogle Driveに格納されているファイルを使用すると思います。その場合は、下の(2-2)のセルを実行してドライブをマウントしてください"
],
"metadata": {
"id": "mHvGrgaWnIPA"
}
},
{
"cell_type": "code",
"source": [
"# (2-1) 使用するモデルとコンフィグファイルの指定\n",
"if \"MODEL\" in locals():\n",
" del MODEL\n",
"if \"ONNX\" in locals():\n",
" del ONNX\n",
"\n",
"CONFIG=\"/content/drive/MyDrive/VoiceChanger/config.json\"\n",
"#MODEL=\"/content/drive/MyDrive/VoiceChanger/G_326000.pth\"\n",
"ONNX=\"/content/drive/MyDrive/VoiceChanger/G_326000.onnx\""
],
"metadata": {
"id": "nSXATMWYb4Ik"
},
"execution_count": 2,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2wxD-gRSMU5R",
"outputId": "6142b113-1ee8-4548-ae7f-9e32fe47d592"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Mounted at /content/drive\n"
]
}
],
"source": [
"# (2-2) Google Driveのマウント\n",
"from google.colab import drive\n",
"drive.mount('/content/drive')"
]
},
{
"cell_type": "markdown",
"source": [
"# リポジトリのクローン\n",
"リポジトリをクローンします"
],
"metadata": {
"id": "sLBfykjBnjWc"
}
},
{
"cell_type": "code",
"source": [
"# (3) リポジトリのクローン\n",
"!git clone --depth 1 https://github.com/w-okada/voice-changer.git -b v.1.3.2\n",
"%cd voice-changer/server\n",
"!git clone --depth 1 https://github.com/isletennos/MMVC_Trainer.git -b v1.3.2.2\n",
"!cd MMVC_Trainer/monotonic_align/ && python setup.py build_ext --inplace && cd -"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "86wTFmqsNMnD",
"outputId": "98890058-6301-4c50-8779-d7b5098cdb55"
},
"execution_count": 4,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cloning into 'voice-changer'...\n",
"remote: Enumerating objects: 143, done.\u001b[K\n",
"remote: Counting objects: 100% (143/143), done.\u001b[K\n",
"remote: Compressing objects: 100% (128/128), done.\u001b[K\n",
"remote: Total 143 (delta 21), reused 57 (delta 5), pack-reused 0\u001b[K\n",
"Receiving objects: 100% (143/143), 1.51 MiB | 4.06 MiB/s, done.\n",
"Resolving deltas: 100% (21/21), done.\n",
"/content/voice-changer/server\n",
"Cloning into 'MMVC_Trainer'...\n",
"remote: Enumerating objects: 920, done.\u001b[K\n",
"remote: Counting objects: 100% (920/920), done.\u001b[K\n",
"remote: Compressing objects: 100% (830/830), done.\u001b[K\n",
"remote: Total 920 (delta 4), reused 891 (delta 1), pack-reused 0\u001b[K\n",
"Receiving objects: 100% (920/920), 53.04 MiB | 16.74 MiB/s, done.\n",
"Resolving deltas: 100% (4/4), done.\n",
"Note: checking out 'f17c8c57d1ab7512633e6c57521f1eef6851bd0e'.\n",
"\n",
"You are in 'detached HEAD' state. You can look around, make experimental\n",
"changes and commit them, and you can discard any commits you make in this\n",
"state without impacting any branches by performing another checkout.\n",
"\n",
"If you want to create a new branch to retain commits you create, you may\n",
"do so (now or later) by using -b with the checkout command again. Example:\n",
"\n",
" git checkout -b <new-branch-name>\n",
"\n",
"Compiling core.pyx because it changed.\n",
"[1/1] Cythonizing core.pyx\n",
"/usr/local/lib/python3.8/dist-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /content/voice-changer/server/MMVC_Trainer/monotonic_align/core.pyx\n",
" tree = Parsing.p_module(s, pxd, full_module_name)\n",
"running build_ext\n",
"building 'monotonic_align.core' extension\n",
"creating build\n",
"creating build/temp.linux-x86_64-3.8\n",
"x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/local/lib/python3.8/dist-packages/numpy/core/include -I/usr/include/python3.8 -c core.c -o build/temp.linux-x86_64-3.8/core.o\n",
"x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -g -fwrapv -O2 -Wl,-Bsymbolic-functions -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.8/core.o -o /content/voice-changer/server/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-38-x86_64-linux-gnu.so\n",
"/content/voice-changer/server\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# モジュールのインストール\n",
"\n",
"必要なモジュールをインストールします。"
],
"metadata": {
"id": "8Na2PbLZSWgZ"
}
},
{
"cell_type": "code",
"source": [
"# (5) 設定ファイルの確認\n",
"!apt-get install -y espeak libsndfile1-dev &> /dev/null\n",
"!pip install unidecode &> /dev/null\n",
"!pip install phonemizer &> /dev/null\n",
"!pip install retry &> /dev/null\n",
"!pip install python-socketio &> /dev/null\n",
"!pip install fastapi &> /dev/null\n",
"!pip install python-multipart &> /dev/null\n",
"!pip install uvicorn &> /dev/null\n",
"!pip install websockets &> /dev/null\n",
"!pip install pyOpenSSL &> /dev/null\n",
"!pip install onnxruntime-gpu &> /dev/null"
],
"metadata": {
"id": "LwZAAuqxX7yY"
},
"execution_count": 5,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# サーバの起動\n",
"\n",
"サーバを起動します。(6-1)\n",
"\n",
"サーバの起動状況を確認します。(6-2) \n",
"\n",
"このセルは繰り返し実行することになるのでCtrl+Retでセルを実行してください。\n",
"\n",
"アクセスできるようになるまで、1~2分かかるようです。コーヒーでも飲みに行きましょう。\n",
"\n",
"下記のようなテキストが表示されたら起動完了です。\n",
"\n",
"**`INFO:root:Loaded checkpoint ...`**\n",
"\n",
"```\n",
" warnings.warn(\n",
" Phase name:__main__\n",
" PHASE3:__main__\n",
"VoiceChanger Initialized (GPU_NUM:1, mps_enabled:False)\n",
" PHASE1:__main__\n",
"Start MMVC SocketIO Server\n",
" CONFIG:/content/drive/MyDrive/VoiceChanger/config.json, MODEL:None ONNX_MODEL:/content/drive/MyDrive/VoiceChanger/G_326000.onnx\n",
"```\n",
"\n"
],
"metadata": {
"id": "-_2OcN9Borke"
}
},
{
"cell_type": "code",
"source": [
"# (6-1) サーバの起動\n",
"import random\n",
"PORT = 10000 + random.randint(1, 9999)\n",
"LOG_FILE = f\"LOG_FILE_{PORT}\"\n",
"\n",
"if \"MODEL\" in locals() and \"ONNX\" in locals():\n",
" model_param = f\" -m {MODEL} -o {ONNX}\"\n",
"elif \"MODEL\" in locals():\n",
" model_param = f\" -m {MODEL}\"\n",
"elif \"ONNX\" in locals():\n",
" model_param = f\" -o {ONNX}\"\n",
"else:\n",
" model_param = f\"\"\n",
"\n",
"get_ipython().system_raw(f'python3 MMVCServerSIO.py -t MMVC -p {PORT} -c {CONFIG} {model_param} --colab True >{LOG_FILE} 2>&1 &')\n",
"#print(f\"PORT:{PORT}, LOG_FILE:{LOG_FILE}\")"
],
"metadata": {
"id": "iNOAB7zISI6J"
},
"execution_count": 17,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# (6-2) サーバの起動確認 (Ctrl+Retで実行)\n",
"!tail -20 {LOG_FILE}"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "chu06KpAjEK6",
"outputId": "8186d701-e52f-49b7-80b8-c71a90185ce2"
},
"execution_count": 26,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"/usr/local/lib/python3.8/dist-packages/onnxruntime/capi/onnxruntime_inference_collection.py:54: UserWarning: Specified provider 'OpenVINOExecutionProvider' is not in available provider names.Available providers: 'TensorrtExecutionProvider, CUDAExecutionProvider, CPUExecutionProvider'\n",
" warnings.warn(\n",
"/usr/local/lib/python3.8/dist-packages/onnxruntime/capi/onnxruntime_inference_collection.py:54: UserWarning: Specified provider 'DmlExecutionProvider' is not in available provider names.Available providers: 'TensorrtExecutionProvider, CUDAExecutionProvider, CPUExecutionProvider'\n",
" warnings.warn(\n",
"\u001b[32m Phase name:__main__\u001b[0m\n",
"\u001b[32m PHASE3:__main__\u001b[0m\n",
"VoiceChanger Initialized (GPU_NUM:1, mps_enabled:False)\n",
"\u001b[32m PHASE1:__main__\u001b[0m\n",
"\u001b[17mStart MMVC SocketIO Server\u001b[0m\n",
"\u001b[34m CONFIG:/content/drive/MyDrive/VoiceChanger/config.json, MODEL:None ONNX_MODEL:/content/drive/MyDrive/VoiceChanger/G_326000.onnx\u001b[0m\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# プロキシを起動\n",
"ウェブサーバへのアクセスをするためのプロキシを起動します。\n",
"\n",
"表示されたURLをクリックして開くと別タブでアプリが開きます。\n",
"\n",
"Colabなので、ロードにある程度時間がかかります(30秒くらい)。"
],
"metadata": {
"id": "WhxcFLQEpctq"
}
},
{
"cell_type": "code",
"source": [
"# (7) プロキシを起動\n",
"from google.colab.output import eval_js\n",
"proxy = eval_js( \"google.colab.kernel.proxyPort(\" + str(PORT) + \")\" )\n",
"print(f\"{proxy}front/?colab=true\")"
],
"metadata": {
"id": "nkRjZm95l87C",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "fd12861a-5d2e-4d7c-cb8d-ec339abe671b"
},
"execution_count": 28,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"https://ta48o8p4y4e-496ff2e9c6d22116-16132-colab.googleusercontent.com/front/?colab=true\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "Jos5WZHGmz4s"
},
"execution_count": null,
"outputs": []
}
]
}

View File

@ -1,339 +0,0 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"authorship_tag": "ABX9TyP/3QiGmJfI/yvB8/t/WTXG",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"accelerator": "GPU",
"gpuClass": "standard"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/w-okada/voice-changer/blob/dev/VoiceChangerDemo_Simple.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"MMVCプレイヤー超簡単版\n",
"---\n",
"\n",
"このートはColab上でMMVCのボイチェンを行うートです。\n",
"\n",
"正式版はローカルPCのDocker上で動かすアプリケーションです。\n",
"\n",
"正式版は、多くの場合より少ないタイムラグで滑らかに音声を変換できます。\n",
"\n",
"詳細な使用方法はこちらの[リポジトリ](https://github.com/w-okada/voice-changer)からご確認ください。\n"
],
"metadata": {
"id": "Lbbmx_Vjl0zo"
}
},
{
"cell_type": "markdown",
"source": [
"# GPUを確認\n",
"GPUを用いたほうが高速に処理が行えます。\n",
"\n",
"下記のコマンドでGPUが確認できない場合は、上のメニューから\n",
"\n",
"「ランタイム」→「ランタイムの変更」→「ハードウェア アクセラレータ」\n",
"\n",
"でGPUを選択してください。"
],
"metadata": {
"id": "oUKi1NYMmXrr"
}
},
{
"cell_type": "code",
"source": [
"# (1) GPUの確認\n",
"!nvidia-smi"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "vV1t7PBRm-o6",
"outputId": "cd968cbb-6749-4d64-c524-364bbccfbaaf"
},
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Thu Jan 12 08:49:28 2023 \n",
"+-----------------------------------------------------------------------------+\n",
"| NVIDIA-SMI 460.32.03 Driver Version: 460.32.03 CUDA Version: 11.2 |\n",
"|-------------------------------+----------------------+----------------------+\n",
"| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n",
"| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n",
"| | | MIG M. |\n",
"|===============================+======================+======================|\n",
"| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |\n",
"| N/A 58C P8 10W / 70W | 0MiB / 15109MiB | 0% Default |\n",
"| | | N/A |\n",
"+-------------------------------+----------------------+----------------------+\n",
" \n",
"+-----------------------------------------------------------------------------+\n",
"| Processes: |\n",
"| GPU GI CI PID Type Process name GPU Memory |\n",
"| ID ID Usage |\n",
"|=============================================================================|\n",
"| No running processes found |\n",
"+-----------------------------------------------------------------------------+\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# リポジトリのクローン\n",
"リポジトリをクローンします"
],
"metadata": {
"id": "sLBfykjBnjWc"
}
},
{
"cell_type": "code",
"source": [
"# (2) リポジトリのクローン\n",
"!git clone --depth 1 https://github.com/w-okada/voice-changer.git -b v.1.3.2\n",
"%cd voice-changer/server\n",
"!git clone --depth 1 https://github.com/isletennos/MMVC_Trainer.git -b v1.3.2.2\n",
"!cd MMVC_Trainer/monotonic_align/ && python setup.py build_ext --inplace && cd -\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "86wTFmqsNMnD",
"outputId": "3f06a785-7b24-4a9c-af9c-6eac5d155501"
},
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cloning into 'voice-changer'...\n",
"remote: Enumerating objects: 143, done.\u001b[K\n",
"remote: Counting objects: 100% (143/143), done.\u001b[K\n",
"remote: Compressing objects: 100% (128/128), done.\u001b[K\n",
"remote: Total 143 (delta 21), reused 57 (delta 5), pack-reused 0\u001b[K\n",
"Receiving objects: 100% (143/143), 1.51 MiB | 3.74 MiB/s, done.\n",
"Resolving deltas: 100% (21/21), done.\n",
"/content/voice-changer/server\n",
"Cloning into 'MMVC_Trainer'...\n",
"remote: Enumerating objects: 920, done.\u001b[K\n",
"remote: Counting objects: 100% (920/920), done.\u001b[K\n",
"remote: Compressing objects: 100% (830/830), done.\u001b[K\n",
"remote: Total 920 (delta 4), reused 893 (delta 1), pack-reused 0\u001b[K\n",
"Receiving objects: 100% (920/920), 53.04 MiB | 15.28 MiB/s, done.\n",
"Resolving deltas: 100% (4/4), done.\n",
"Note: checking out 'f17c8c57d1ab7512633e6c57521f1eef6851bd0e'.\n",
"\n",
"You are in 'detached HEAD' state. You can look around, make experimental\n",
"changes and commit them, and you can discard any commits you make in this\n",
"state without impacting any branches by performing another checkout.\n",
"\n",
"If you want to create a new branch to retain commits you create, you may\n",
"do so (now or later) by using -b with the checkout command again. Example:\n",
"\n",
" git checkout -b <new-branch-name>\n",
"\n",
"Compiling core.pyx because it changed.\n",
"[1/1] Cythonizing core.pyx\n",
"/usr/local/lib/python3.8/dist-packages/Cython/Compiler/Main.py:369: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: /content/voice-changer/server/MMVC_Trainer/monotonic_align/core.pyx\n",
" tree = Parsing.p_module(s, pxd, full_module_name)\n",
"running build_ext\n",
"building 'monotonic_align.core' extension\n",
"creating build\n",
"creating build/temp.linux-x86_64-3.8\n",
"x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 -fPIC -I/usr/local/lib/python3.8/dist-packages/numpy/core/include -I/usr/include/python3.8 -c core.c -o build/temp.linux-x86_64-3.8/core.o\n",
"x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -g -fwrapv -O2 -Wl,-Bsymbolic-functions -g -fwrapv -O2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wdate-time -D_FORTIFY_SOURCE=2 build/temp.linux-x86_64-3.8/core.o -o /content/voice-changer/server/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-38-x86_64-linux-gnu.so\n",
"/content/voice-changer/server\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# モジュールのインストール\n",
"\n",
"必要なモジュールをインストールします。"
],
"metadata": {
"id": "8Na2PbLZSWgZ"
}
},
{
"cell_type": "code",
"source": [
"# (3) 設定ファイルの確認\n",
"!apt-get install -y libsndfile1-dev &> /dev/null\n",
"!pip install unidecode &> /dev/null\n",
"!pip install phonemizer &> /dev/null\n",
"!pip install retry &> /dev/null\n",
"!pip install python-socketio &> /dev/null\n",
"!pip install fastapi &> /dev/null\n",
"!pip install python-multipart &> /dev/null\n",
"!pip install uvicorn &> /dev/null\n",
"!pip install websockets &> /dev/null\n",
"!pip install pyOpenSSL &> /dev/null\n",
"!pip install onnxruntime-gpu &> /dev/null"
],
"metadata": {
"id": "LwZAAuqxX7yY"
},
"execution_count": 3,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# サーバの起動\n",
"\n",
"サーバを起動します。(4-1)\n",
"\n",
"サーバの起動状況を確認します。(4-2) \n",
"\n",
"このセルは繰り返し実行することになるのでCtrl+Retでセルを実行してください。\n",
"\n",
"下記のようなテキストが表示されたら起動完了です。\n",
"\n",
"**`DEBUG:asyncio:Using selector: EpollSelector`**\n",
"\n",
"```\n",
" Phase name:__main__\n",
" PHASE3:__main__\n",
" PHASE1:__main__\n",
"Start MMVC SocketIO Server\n",
" CONFIG:None, MODEL:None ONNX_MODEL:None\n",
"```\n",
"\n"
],
"metadata": {
"id": "-_2OcN9Borke"
}
},
{
"cell_type": "code",
"source": [
"# (4-1) サーバの起動\n",
"import random\n",
"PORT = 10000 + random.randint(1, 9999)\n",
"LOG_FILE = f\"LOG_FILE_{PORT}\"\n",
"\n",
"get_ipython().system_raw(f'python3 MMVCServerSIO.py -t MMVC -p {PORT} --colab True >{LOG_FILE} 2>&1 &')\n",
"#print(f\"PORT:{PORT}, LOG_FILE:{LOG_FILE}\")"
],
"metadata": {
"id": "G-nMdPxEW1rc"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# (4-2) サーバの起動確認\n",
"!sleep 30\n",
"!tail -20 {LOG_FILE}"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "chu06KpAjEK6",
"outputId": "b0efbfea-cfce-427b-bb0e-1d2c5b07f298"
},
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\u001b[32m Phase name:__main__\u001b[0m\n",
"\u001b[32m PHASE3:__main__\u001b[0m\n",
"\u001b[32m PHASE1:__main__\u001b[0m\n",
"\u001b[17mStart MMVC SocketIO Server\u001b[0m\n",
"\u001b[34m CONFIG:None, MODEL:None ONNX_MODEL:None\u001b[0m\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# プロキシを起動\n",
"ウェブサーバへのアクセスをするためのプロキシを起動します。\n",
"\n",
"表示されたURLをクリックして開くと別タブでアプリが開きます。\n",
"\n",
"Colabなので、ロードにある程度時間がかかります(30秒くらい)。"
],
"metadata": {
"id": "WhxcFLQEpctq"
}
},
{
"cell_type": "code",
"source": [
"# (5) プロキシを起動\n",
"from google.colab.output import eval_js\n",
"proxy = eval_js( \"google.colab.kernel.proxyPort(\" + str(PORT) + \")\" )\n",
"print(f\"{proxy}front/?colab=true\")"
],
"metadata": {
"id": "nkRjZm95l87C",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "9c7be773-00ef-4aef-b05f-41422c295926"
},
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"https://yro7e3q4cuk-496ff2e9c6d22116-13479-colab.googleusercontent.com/front/?colab=true\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "axkt5BjhoiPV"
},
"execution_count": 6,
"outputs": []
}
]
}

View File

@ -1,656 +0,0 @@
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyP6Wv8fttT+X2Op6MmqB/kg",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
},
"gpuClass": "standard"
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/w-okada/voice-changer/blob/dev/VoiceRecorder.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"Voice Recorder\n",
"---\n",
"\n",
"このートでは、MMVCのトレーニング用の音声を録画するアプリ\"Voice Recorder\"をColab上から起動します。\n",
"\n",
"録音された音声はこのートを通してGoogle Drive上にアップロードすることができます。\n",
"\n",
"また、従来のVoice Recorderと同様にローカルPCにダウンロードすることもできます。\n",
"\n",
"録音後にブラウザとcolab上のサーバ間でやり取りを行うので、更新に少しタイムラグが発生します。\n",
"\n",
"ご自身のPCでトレーニングを行う予定の場合は、colab上のサーバで録音するメリットはほぼありませんので、より快適な録音をするために[こちらのgithub上のVoice Recorder](https://w-okada.github.io/voice-changer/)をご使用ください。\n",
"\n",
"\n",
"より詳細な情報はこちらの[リポジトリ](https://github.com/w-okada/voice-changer)からご確認いただけます。\n"
],
"metadata": {
"id": "Lbbmx_Vjl0zo"
}
},
{
"cell_type": "markdown",
"source": [
"# 録音データを格納するフォルダを指定\n",
"\n",
"フォルダは次の二つを指定する必要があります。\n",
"1. 録音アプリ用のキャッシュデータ格納フォルダ\n",
"2. トレーニングデータの格納フォルダ\n",
"\n",
"通常、録音データはGoogle Drive上のフォルダに格納すると思います。\n",
"\n",
"まずは(1-1)を実行してドライブをマウントしてください。\n",
"\n",
"その後、(1-2)で上記の格納フォルダを指定してください。"
],
"metadata": {
"id": "mHvGrgaWnIPA"
}
},
{
"cell_type": "code",
"source": [
"# (1-1) Google Driveのマウント\n",
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "Eihm8H2X-7wm",
"outputId": "76331fb1-5ef8-40e6-a381-258b5e425853"
},
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Mounted at /content/drive\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# (1-2) 使用するモデルとコンフィグファイルの指定\n",
"RECORDER_DATA_DIR=\"/content/drive/MyDrive/VoiceChanger/voice_data\"\n",
"MMVC_DATA_DIR=\"/content/drive/MyDrive/VoiceChanger/dataset\"\n"
],
"metadata": {
"id": "nSXATMWYb4Ik"
},
"execution_count": 2,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# リポジトリのクローン\n",
"リポジトリをクローンします"
],
"metadata": {
"id": "sLBfykjBnjWc"
}
},
{
"cell_type": "code",
"source": [
"# (2) リポジトリのクローン\n",
"!git clone --depth 1 https://github.com/w-okada/voice-changer.git -b ver_1.0\n",
"%cd voice-changer/docs/\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "86wTFmqsNMnD",
"outputId": "40471833-d720-41c9-f4a7-ac15fbf18e14"
},
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cloning into 'voice-changer'...\n",
"remote: Enumerating objects: 81, done.\u001b[K\n",
"remote: Counting objects: 100% (81/81), done.\u001b[K\n",
"remote: Compressing objects: 100% (68/68), done.\u001b[K\n",
"remote: Total 81 (delta 12), reused 53 (delta 5), pack-reused 0\u001b[K\n",
"Unpacking objects: 100% (81/81), done.\n",
"Note: checking out 'f8823cb7e2025f13227f5918408cceda224bf9f0'.\n",
"\n",
"You are in 'detached HEAD' state. You can look around, make experimental\n",
"changes and commit them, and you can discard any commits you make in this\n",
"state without impacting any branches by performing another checkout.\n",
"\n",
"If you want to create a new branch to retain commits you create, you may\n",
"do so (now or later) by using -b with the checkout command again. Example:\n",
"\n",
" git checkout -b <new-branch-name>\n",
"\n",
"/content/voice-changer/docs\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# ファイルの配置\n",
"アプリケーションの挙動を記した設定ファイルをコピーします(3-1)。(3-2)はコピーした設定ファイルを表示しています。もしかしたらうまく動かないときに役立つかもしれません。"
],
"metadata": {
"id": "jmDY8W_fnuSi"
}
},
{
"cell_type": "code",
"source": [
"# (3-1) 設定ファイルのコピー\n",
"!cp ../template/setting_recorder_colab.json assets/setting.json"
],
"metadata": {
"id": "ow88ZaubluOJ"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# (3-2) 設定ファイルの内容確認\n",
"\n",
"!cat assets/setting.json"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "rpWUobjlBCNF",
"outputId": "285e0259-16af-4932-e78b-bec94f337e9c"
},
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"{\n",
" \"app_title\": \"voice-recorder\",\n",
" \"storage_type\":\"server\",\n",
" \"use_mel_spectrogram\":true,\n",
" \"text\": [\n",
" {\n",
" \"title\": \"ITA-emotion\",\n",
" \"wavPrefix\": \"emotion\",\n",
" \"file\": \"./assets/text/ITA_emotion_all.txt\",\n",
" \"file_hira\": \"./assets/text/ITA_emotion_all_hira.txt\"\n",
" },\n",
" {\n",
" \"title\": \"ITA-recitation\",\n",
" \"wavPrefix\": \"recitation\",\n",
" \"file\": \"./assets/text/ITA_recitation_all.txt\",\n",
" \"file_hira\": \"./assets/text/ITA_recitation_all_hira.txt\"\n",
" },\n",
" {\n",
" \"title\": \"wagahaiwa\",\n",
" \"wavPrefix\": \"wagahaiwa\",\n",
" \"file\": \"./assets/text/wagahaiwa.txt\",\n",
" \"file_hira\": \"./assets/text/wagahaiwa_hira.txt\"\n",
" }\n",
" ]\n",
"}\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# モジュールのインストール\n",
"\n",
"必要なモジュールをインストールします。"
],
"metadata": {
"id": "8Na2PbLZSWgZ"
}
},
{
"cell_type": "code",
"source": [
"# (4) 設定ファイルの確認\n",
"!pip install flask\n",
"!pip install flask_cors\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "LwZAAuqxX7yY",
"outputId": "ea2b3b39-d571-4d47-a38b-d0e657a335cd"
},
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Requirement already satisfied: flask in /usr/local/lib/python3.7/dist-packages (1.1.4)\n",
"Requirement already satisfied: Jinja2<3.0,>=2.10.1 in /usr/local/lib/python3.7/dist-packages (from flask) (2.11.3)\n",
"Requirement already satisfied: Werkzeug<2.0,>=0.15 in /usr/local/lib/python3.7/dist-packages (from flask) (1.0.1)\n",
"Requirement already satisfied: click<8.0,>=5.1 in /usr/local/lib/python3.7/dist-packages (from flask) (7.1.2)\n",
"Requirement already satisfied: itsdangerous<2.0,>=0.24 in /usr/local/lib/python3.7/dist-packages (from flask) (1.1.0)\n",
"Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from Jinja2<3.0,>=2.10.1->flask) (2.0.1)\n",
"Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/\n",
"Collecting flask_cors\n",
" Downloading Flask_Cors-3.0.10-py2.py3-none-any.whl (14 kB)\n",
"Requirement already satisfied: Six in /usr/local/lib/python3.7/dist-packages (from flask_cors) (1.15.0)\n",
"Requirement already satisfied: Flask>=0.9 in /usr/local/lib/python3.7/dist-packages (from flask_cors) (1.1.4)\n",
"Requirement already satisfied: Werkzeug<2.0,>=0.15 in /usr/local/lib/python3.7/dist-packages (from Flask>=0.9->flask_cors) (1.0.1)\n",
"Requirement already satisfied: itsdangerous<2.0,>=0.24 in /usr/local/lib/python3.7/dist-packages (from Flask>=0.9->flask_cors) (1.1.0)\n",
"Requirement already satisfied: Jinja2<3.0,>=2.10.1 in /usr/local/lib/python3.7/dist-packages (from Flask>=0.9->flask_cors) (2.11.3)\n",
"Requirement already satisfied: click<8.0,>=5.1 in /usr/local/lib/python3.7/dist-packages (from Flask>=0.9->flask_cors) (7.1.2)\n",
"Requirement already satisfied: MarkupSafe>=0.23 in /usr/local/lib/python3.7/dist-packages (from Jinja2<3.0,>=2.10.1->Flask>=0.9->flask_cors) (2.0.1)\n",
"Installing collected packages: flask-cors\n",
"Successfully installed flask-cors-3.0.10\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# サーバの起動\n",
"\n",
"サーバを起動します。(5-1) \n",
"\n",
"サーバの起動状況を確認します。(5-2) \n",
"\n",
"このセルは繰り返し実行することになるのでCtrl+Retでセルを実行してください。\n",
"\n",
"アクセスできるようになるまで、数秒かかります。\n",
"\n",
"下記のようなテキストが表示されたら起動完了です。\n",
"\n",
"```\n",
"[2022-09-13 22:20:49,936] INFO in recorderServer: START APP\n",
" * Serving Flask app \"recorderServer\" (lazy loading)\n",
" * Environment: production\n",
" WARNING: This is a development server. Do not use it in a production deployment.\n",
" Use a production WSGI server instead.\n",
" * Debug mode: on\n",
"[2022-09-13 22:20:49,946] INFO in _internal: * Running on http://0.0.0.0:8018/ (Press CTRL+C to quit)\n",
"[2022-09-13 22:20:49,947] INFO in _internal: * Restarting with stat\n",
"[2022-09-13 22:20:50,166] INFO in recorderServer: START APP\n",
"[2022-09-13 22:20:50,174] WARNING in _internal: * Debugger is active!\n",
"[2022-09-13 22:20:50,200] INFO in _internal: * Debugger PIN: 334-166-753\n",
"```\n",
"\n"
],
"metadata": {
"id": "-_2OcN9Borke"
}
},
{
"cell_type": "code",
"source": [
"# (5-1) サーバの起動\n",
"PORT=8018\n",
"get_ipython().system_raw(f'python3 recorderServer.py {PORT} {RECORDER_DATA_DIR} >foo 2>&1 &')"
],
"metadata": {
"id": "iNOAB7zISI6J"
},
"execution_count": 7,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# (5-2) サーバの起動確認 (Ctrl+Retで実行)\n",
"!cat foo"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "chu06KpAjEK6",
"outputId": "6f5cbed9-65a7-4570-f58a-5447e402947c"
},
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[2022-11-08 19:11:17,679] INFO in recorderServer: START APP\n",
" * Serving Flask app \"recorderServer\" (lazy loading)\n",
" * Environment: production\n",
" WARNING: This is a development server. Do not use it in a production deployment.\n",
" Use a production WSGI server instead.\n",
" * Debug mode: on\n",
"[2022-11-08 19:11:17,696] INFO in _internal: * Running on http://0.0.0.0:8018/ (Press CTRL+C to quit)\n",
"[2022-11-08 19:11:17,697] INFO in _internal: * Restarting with stat\n",
"[2022-11-08 19:11:17,893] INFO in recorderServer: START APP\n",
"[2022-11-08 19:11:17,900] WARNING in _internal: * Debugger is active!\n",
"[2022-11-08 19:11:17,930] INFO in _internal: * Debugger PIN: 225-344-519\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# プロキシを起動\n",
"ウェブサーバへのアクセスをするためのプロキシを起動します。\n",
"\n",
"表示されたURLをクリックして開くと別タブでアプリが開きます。\n",
"\n",
"Colabなので、ロードにある程度時間がかかります(30秒くらい)。"
],
"metadata": {
"id": "WhxcFLQEpctq"
}
},
{
"cell_type": "code",
"source": [
"# (7) プロキシを起動\n",
"from google.colab import output\n",
"\n",
"output.serve_kernel_port_as_window(PORT)"
],
"metadata": {
"id": "nkRjZm95l87C",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 34
},
"outputId": "7d2664b8-945c-4ee6-b49f-51f7f96cf388"
},
"execution_count": 11,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.Javascript object>"
],
"application/javascript": [
"(async (port, path, text, element) => {\n",
" if (!google.colab.kernel.accessAllowed) {\n",
" return;\n",
" }\n",
" element.appendChild(document.createTextNode(''));\n",
" const url = await google.colab.kernel.proxyPort(port);\n",
" const anchor = document.createElement('a');\n",
" anchor.href = new URL(path, url).toString();\n",
" anchor.target = '_blank';\n",
" anchor.setAttribute('data-href', url + path);\n",
" anchor.textContent = text;\n",
" element.appendChild(anchor);\n",
" })(8018, \"/\", \"https://localhost:8018/\", window.element)"
]
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"# トレーニング用データフォルダ\n",
"\n",
"以下、トレーニング用のフォルダを作成します。\n",
"\n",
"\n"
],
"metadata": {
"id": "ZGuYYN7oCSM4"
}
},
{
"cell_type": "code",
"source": [
"corpus_id = \"14oXoQqLxRkP8NJK8qMYGee1_q2uEED1z\"\n",
"\n",
"data_setting = [\n",
" [\"user\", \"\", \"\", \"00_myvoice\", \"107\"],\n",
" [\"zundamon\", \"1h8Ajyvoig7Hl3LSSt2vYX0sUHX3JDF3R\", \"1205_zundamon\", \"01_target_zundamon\", \"100\"],\n",
" [\"tsumugi\", \"14zE0F_5ZCQWXf6m6SUPF5Y3gpL6yb7zk\", \"344_tsumugi\", \"02_target_tsumugi\", \"103\"],\n",
" [\"metan\", \"1iCrpzhqXm-0YdktOPM8M1pMtgQIDF3r4\", \"459_methane\", \"03_target_metan\", \"102\"],\n",
" [\"sora\", \"1MXfMRG_sjbsaLihm7wEASG2PwuCponZF\", \"912_sora\", \"04_target_ksora\", \"101\"],\n",
"]"
],
"metadata": {
"id": "3PhrmCD2LaCH"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import os, glob\n",
"\n",
"os.makedirs(MMVC_DATA_DIR, exist_ok=True)\n",
"speaker_list = os.path.join(MMVC_DATA_DIR, \"multi_speaker_correspondence.txt\")\n",
"!echo \"00_myvoice|107\" > {speaker_list}\n",
"!echo \"01_target_zundamon|100\" >> {speaker_list}\n",
"!echo \"02_target_tsumugi|103\" >> {speaker_list}\n",
"!echo \"03_target_metan|102\" >> {speaker_list}\n",
"!echo \"04_target_ksora|101\" >> {speaker_list}\n",
"\n",
"!cat {speaker_list}\n",
"\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "f5l6ggSyACLs",
"outputId": "4db3571a-46e6-4fd9-c560-628cf4af9284"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"00_myvoice|107\n",
"01_target_zundamon|100\n",
"02_target_tsumugi|103\n",
"03_target_metan|102\n",
"04_target_ksora|101\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"!rm -rf /content/drive/MyDrive/VoiceChanger/train_data/00_myvoice/wav/*"
],
"metadata": {
"id": "UEVb2GGZSesY"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"import gdown\n",
"\n",
"gdown.download(f'https://drive.google.com/uc?id={corpus_id}', f'ita_corpus.zip', quiet=False)\n",
"!unzip -oq 'ita_corpus.zip'\n",
"\n",
"for chara in data_setting:\n",
" chara_root_dir = os.path.join(MMVC_DATA_DIR, chara[3])\n",
" os.makedirs(chara_root_dir, exist_ok=True)\n",
" \n",
" chara_text_dir = os.path.join(chara_root_dir, \"text\")\n",
" os.makedirs(chara_text_dir, exist_ok=True)\n",
" chara_wav_dir = os.path.join(chara_root_dir, \"wav\")\n",
" os.makedirs(chara_wav_dir, exist_ok=True)\n",
"\n",
" if chara[0] != \"user\":\n",
" gdown.download(f'https://drive.google.com/uc?id={chara[1]}', f'{chara[0]}.zip', quiet=False)\n",
" !unzip -f '{chara[0]}.zip'\n",
" !cp -rf {chara[2]}/* {chara_root_dir}/\n",
"\n",
" if chara[0] == \"user\":\n",
" !cp MMVC向けITAコーパス文章ファイル_配布用/ITA_emotion_hira_100file/* {chara_text_dir}\n",
" !cp MMVC向けITAコーパス文章ファイル_配布用/ITA_recitation_hira_324file/* {chara_text_dir}\n",
"\n",
" file_list = [os.path.abspath(p) for p in glob.glob(f\"{RECORDER_DATA_DIR}/*/*.zip\")]\n",
" for f in list(file_list):\n",
" # print(f)\n",
" basename = os.path.basename(f)\n",
" wavname = os.path.splitext(basename)[0] + \".wav\"\n",
" full_path = os.path.join(chara_wav_dir, wavname)\n",
" # print(basename, wavname, full_path)\n",
" !unzip -oq {f} vf24kTrim.wav\n",
" !cp vf24kTrim.wav {full_path}\n",
"\n",
"\n",
"\n",
"\n"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "L8UsVp3dDs4R",
"outputId": "5d640caf-87b0-45a6-aa0c-76295e537f6a"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=14oXoQqLxRkP8NJK8qMYGee1_q2uEED1z\n",
"To: /content/voice-changer/docs/ita_corpus.zip\n",
"100%|██████████| 1.20M/1.20M [00:00<00:00, 87.9MB/s]\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"/content/drive/MyDrive/VoiceChanger/voice_data/ITA-emotion/emotion000.zip\n",
"/content/drive/MyDrive/VoiceChanger/voice_data/ITA-emotion/emotion002.zip\n",
"/content/drive/MyDrive/VoiceChanger/voice_data/ITA-emotion/emotion001.zip\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1h8Ajyvoig7Hl3LSSt2vYX0sUHX3JDF3R\n",
"To: /content/voice-changer/docs/zundamon.zip\n",
"100%|██████████| 55.6M/55.6M [00:00<00:00, 251MB/s]\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Archive: zundamon.zip\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=14zE0F_5ZCQWXf6m6SUPF5Y3gpL6yb7zk\n",
"To: /content/voice-changer/docs/tsumugi.zip\n",
"100%|██████████| 73.0M/73.0M [00:00<00:00, 226MB/s]\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Archive: tsumugi.zip\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1iCrpzhqXm-0YdktOPM8M1pMtgQIDF3r4\n",
"To: /content/voice-changer/docs/metan.zip\n",
"100%|██████████| 51.8M/51.8M [00:00<00:00, 219MB/s]\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Archive: metan.zip\n"
]
},
{
"output_type": "stream",
"name": "stderr",
"text": [
"Downloading...\n",
"From: https://drive.google.com/uc?id=1MXfMRG_sjbsaLihm7wEASG2PwuCponZF\n",
"To: /content/voice-changer/docs/sora.zip\n",
"100%|██████████| 70.2M/70.2M [00:00<00:00, 184MB/s]\n"
]
},
{
"output_type": "stream",
"name": "stdout",
"text": [
"Archive: sora.zip\n"
]
}
]
},
{
"cell_type": "code",
"source": [],
"metadata": {
"id": "yHmaXx31EOta"
},
"execution_count": null,
"outputs": []
}
]
}

11
client/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"workbench.colorCustomizations": {
"tab.activeBackground": "#65952acc"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.printWidth": 1024,
"prettier.tabWidth": 4,
"files.associations": {
"*.css": "postcss"
}
}

3
client/buildAllDemo.sh Executable file
View File

@ -0,0 +1,3 @@
#!/bin/bash
cd demo && ncu -u && npm install && npm run build:prod && cd -

11
client/demo/.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"workbench.colorCustomizations": {
"tab.activeBackground": "#65952acc"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.printWidth": 1024,
"prettier.tabWidth": 4,
"files.associations": {
"*.css": "postcss"
}
}

View File

@ -0,0 +1,11 @@
# cd ~/git-work/voice-changer-js/lib/ ; npm run build:dev; cd -
# rm -rf node_modules/@dannadori/voice-changer-js
# mkdir -p node_modules/@dannadori/voice-changer-js/dist
# cp -r ~/git-work/voice-changer-js/lib/package.json node_modules/@dannadori/voice-changer-js/
# cp -r ~/git-work/voice-changer-js/lib/dist node_modules/@dannadori/voice-changer-js/
cd ~/git-work/voice-changer-js/lib/ ; npm run build:prod; cd -
rm -rf node_modules/@dannadori/voice-changer-js
mkdir -p node_modules/@dannadori/voice-changer-js/dist
cp -r ~/git-work/voice-changer-js/lib/package.json node_modules/@dannadori/voice-changer-js/
cp -r ~/git-work/voice-changer-js/lib/dist node_modules/@dannadori/voice-changer-js/

View File

@ -0,0 +1,928 @@
<?xml version='1.0' encoding='utf-8'?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ns2="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="100 60 420 450" version="1.1">
<metadata>
<rdf:RDF>
<ns2:Work>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:date>2023-11-19T11:21:56.358384</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:creator>
<ns2:Agent>
<dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>
</ns2:Agent>
</dc:creator>
</ns2:Work>
</rdf:RDF>
</metadata>
<defs>
<style type="text/css">
* {
stroke-linejoin: round;
stroke-linecap: butt
}
</style>
<style type="text/css">
.beatrice-node-pointer {
cursor: pointer;
}
.beatrice-node-pointer:hover {
stroke: gray;
}
.beatrice-node-pointer-selected {
stroke: #ef6767c2;
stroke-width: 3
}
.beatrice-text-pointer {
cursor: pointer;
pointer-events: none
}
.beatrice-text-pointer:hover {
/* ホバー時のスタイルは既に設定されたスタイルと異なる特定の属性を変更することができます。 */
}
</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 576 L 576 576 L 576 0 L 0 0 z " style="fill: #ffffff" />
</g>
<g id="axes_1">
<g id="LineCollection_1">
<path d="M 403.96157 149.258085 L 366.630583 148.159991 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 396.547407 371.476481 L 372.120414 365.421971 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 396.547407 371.476481 L 416.760989 346.999139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 396.547407 371.476481 L 404.238335 402.754731 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 258.035169 326.134244 L 298.859694 332.465911 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 167.453327 366.897955 L 203.987537 347.931194 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 436.352807 416.173738 L 404.238335 402.754731 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 391.514336 242.048236 L 417.560846 259.464346 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 391.514336 242.048236 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 391.514336 242.048236 L 424.070309 219.021704 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 205.541044 459.711101 L 230.303076 436.148139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 160.44225 292.540336 L 167.396334 325.961848 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.679012 107.607273 L 366.630583 148.159991 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 325.345004 219.195921 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 325.345004 219.195921 L 297.530501 194.55124 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 363.075301 201.701937 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 363.075301 201.701937 L 341.462109 170.414842 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 366.630583 148.159991 L 341.462109 170.414842 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 167.396334 325.961848 L 203.987537 347.931194 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 262.111309 181.887977 L 297.530501 194.55124 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 189.293496 262.735141 L 222.122563 261.416721 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 277.95603 462.622539 L 293.230217 421.393405 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 333.932593 269.342364 L 301.9174 258.124913 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 333.932593 269.342364 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 334.666605 338.097578 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 203.987537 347.931194 L 242.811958 354.082183 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 276.198518 388.99868 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 298.859694 332.465911 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 242.811958 354.082183 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 276.198518 388.99868 L 293.230217 421.393405 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 293.230217 421.393405 L 309.530924 454.827332 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 293.230217 421.393405 L 260.004712 426.426278 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 423.853712 378.321354 L 404.238335 402.754731 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 205.214352 217.066163 L 222.122563 261.416721 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 154.047193 423.153273 L 193.933786 408.004355 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 298.859694 332.465911 L 277.79477 306.980241 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 277.79477 306.980241 L 282.261978 282.779534 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 260.004712 426.426278 L 230.303076 436.148139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 260.004712 426.426278 L 228.689744 409.959215 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 260.004712 426.426278 L 261.506403 474.152727 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 301.9174 258.124913 L 282.261978 282.779534 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 254.897329 263.033159 L 282.261978 282.779534 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 254.897329 263.033159 L 222.122563 261.416721 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 321.267463 403.021207 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.750267 380.131711 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.750267 380.131711 L 372.120414 365.421971 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.750267 380.131711 L 351.226176 419.342667 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 404.238335 402.754731 L 400.607869 434.730447 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 193.933786 408.004355 L 230.303076 436.148139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
</g>
<g id="PathCollection_1">
<defs>
<path id="C0_0_b0ffb3bf4a"
d="M 0 11.18034 C 2.965061 11.18034 5.80908 10.002309 7.905694 7.905694 C 10.002309 5.80908 11.18034 2.965061 11.18034 -0 C 11.18034 -2.965061 10.002309 -5.80908 7.905694 -7.905694 C 5.80908 -10.002309 2.965061 -11.18034 0 -11.18034 C -2.965061 -11.18034 -5.80908 -10.002309 -7.905694 -7.905694 C -10.002309 -5.80908 -11.18034 -2.965061 -11.18034 0 C -11.18034 2.965061 -10.002309 5.80908 -7.905694 7.905694 C -5.80908 10.002309 -2.965061 11.18034 0 11.18034 z " />
</defs>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-0"
onclick="(()=&gt;{console.log('node 0')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="403.96157" y="149.258085" style="fill: #e7f5d2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-1"
onclick="(()=&gt;{console.log('node 1')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="396.547407" y="371.476481" style="fill: #fbe8f2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-2"
onclick="(()=&gt;{console.log('node 2')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="258.035169" y="326.134244" style="fill: #cfebaa" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-3"
onclick="(()=&gt;{console.log('node 3')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="167.453327" y="366.897955" style="fill: #f1f6e8" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-4"
onclick="(()=&gt;{console.log('node 4')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="436.352807" y="416.173738" style="fill: #e89ac6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-5"
onclick="(()=&gt;{console.log('node 5')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="391.514336" y="242.048236" style="fill: #f3bcdd" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-6"
onclick="(()=&gt;{console.log('node 6')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="205.541044" y="459.711101" style="fill: #fbd9ec" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-7"
onclick="(()=&gt;{console.log('node 7')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="160.44225" y="292.540336" style="fill: #9ed067" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-8"
onclick="(()=&gt;{console.log('node 8')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="424.070309" y="219.021704" style="fill: #e1f3c7" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-9"
onclick="(()=&gt;{console.log('node 9')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="345.679012" y="107.607273" style="fill: #d0ecad" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-10"
onclick="(()=&gt;{console.log('node 10')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="325.345004" y="219.195921" style="fill: #eff6e4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-11"
onclick="(()=&gt;{console.log('node 11')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="363.075301" y="201.701937" style="fill: #f9f0f5" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-12"
onclick="(()=&gt;{console.log('node 12')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="366.630583" y="148.159991" style="fill: #ebf6dc" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-13"
onclick="(()=&gt;{console.log('node 13')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="341.462109" y="170.414842" style="fill: #fad6ea" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-14"
onclick="(()=&gt;{console.log('node 14')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="167.396334" y="325.961848" style="fill: #f5f7f3" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-15"
onclick="(()=&gt;{console.log('node 15')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="262.111309" y="181.887977" style="fill: #e9f5d6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-16"
onclick="(()=&gt;{console.log('node 16')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="189.293496" y="262.735141" style="fill: #fce5f1" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-17"
onclick="(()=&gt;{console.log('node 17')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="277.95603" y="462.622539" style="fill: #c4e699" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-18"
onclick="(()=&gt;{console.log('node 18')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="333.932593" y="269.342364" style="fill: #f8f4f6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-19"
onclick="(()=&gt;{console.log('node 19')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="416.760989" y="346.999139" style="fill: #eef6e2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-20"
onclick="(()=&gt;{console.log('node 20')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="334.666605" y="338.097578" style="fill: #f5f7f3" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-21"
onclick="(()=&gt;{console.log('node 21')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="203.987537" y="347.931194" style="fill: #edf6df" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-22"
onclick="(()=&gt;{console.log('node 22')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="288.059985" y="363.924972" style="fill: #ddf1c1" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-23"
onclick="(()=&gt;{console.log('node 23')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="276.198518" y="388.99868" style="fill: #f5f7f3" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-24"
onclick="(()=&gt;{console.log('node 24')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="293.230217" y="421.393405" style="fill: #f3f7ef" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-25"
onclick="(()=&gt;{console.log('node 25')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="423.853712" y="378.321354" style="fill: #edf6df" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-26"
onclick="(()=&gt;{console.log('node 26')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="205.214352" y="217.066163" style="fill: #e7f5d2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-27"
onclick="(()=&gt;{console.log('node 27')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="242.811958" y="354.082183" style="fill: #d2ecb0" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-28"
onclick="(()=&gt;{console.log('node 28')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="154.047193" y="423.153273" style="fill: #e6f5d0" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-29"
onclick="(()=&gt;{console.log('node 29')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="298.859694" y="332.465911" style="fill: #ecf6de" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-30"
onclick="(()=&gt;{console.log('node 30')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="277.79477" y="306.980241" style="fill: #eaf5d9" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-31"
onclick="(()=&gt;{console.log('node 31')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="260.004712" y="426.426278" style="fill: #f9f1f5" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-32"
onclick="(()=&gt;{console.log('node 32')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="301.9174" y="258.124913" style="fill: #dbf0bf" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-33"
onclick="(()=&gt;{console.log('node 33')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="254.897329" y="263.033159" style="fill: #eff6e4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-34"
onclick="(()=&gt;{console.log('node 34')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="321.267463" y="403.021207" style="fill: #d0ecad" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-35"
onclick="(()=&gt;{console.log('node 35')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="345.750267" y="380.131711" style="fill: #f9eef4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-36"
onclick="(()=&gt;{console.log('node 36')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="404.238335" y="402.754731" style="fill: #f9eef4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-37"
onclick="(()=&gt;{console.log('node 37')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="355.734145" y="235.68791" style="fill: #f9eef4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-38"
onclick="(()=&gt;{console.log('node 38')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="193.933786" y="408.004355" style="fill: #f0f6e7" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-39"
onclick="(()=&gt;{console.log('node 39')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="297.530501" y="194.55124" style="fill: #f3f6ed" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-40"
onclick="(()=&gt;{console.log('node 40')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="320.07566" y="368.578481" style="fill: #dbf0bf" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-41"
onclick="(()=&gt;{console.log('node 41')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="228.689744" y="409.959215" style="fill: #f9eff4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-42"
onclick="(()=&gt;{console.log('node 42')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="351.226176" y="419.342667" style="fill: #cfebaa" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-43"
onclick="(()=&gt;{console.log('node 43')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="372.120414" y="365.421971" style="fill: #f7f6f7" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-44"
onclick="(()=&gt;{console.log('node 44')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="230.303076" y="436.148139" style="fill: #f8cee6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-45"
onclick="(()=&gt;{console.log('node 45')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="261.506403" y="474.152727" style="fill: #e6f5d0" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-46"
onclick="(()=&gt;{console.log('node 46')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="417.560846" y="259.464346" style="fill: #b7e085" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-47"
onclick="(()=&gt;{console.log('node 47')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="400.607869" y="434.730447" style="fill: #f8cee6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-48"
onclick="(()=&gt;{console.log('node 48')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="282.261978" y="282.779534" style="fill: #d6eeb6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-49"
onclick="(()=&gt;{console.log('node 49')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="222.122563" y="261.416721" style="fill: #edf6df" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-50"
onclick="(()=&gt;{console.log('node 50')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="309.530924" y="454.827332" style="fill: #f9eef4" />
</g>
</g>
<g id="beatrice-text-female-0" onclick="(()=&gt;{console.log('text 0 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(399.786883 152.569335) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-32"
d="M 1844 884 L 3897 884 L 3897 0 L 506 0 L 506 884 L 2209 2388 Q 2438 2594 2547 2791 Q 2656 2988 2656 3200 Q 2656 3528 2436 3728 Q 2216 3928 1850 3928 Q 1569 3928 1234 3808 Q 900 3688 519 3450 L 519 4475 Q 925 4609 1322 4679 Q 1719 4750 2100 4750 Q 2938 4750 3402 4381 Q 3866 4013 3866 3353 Q 3866 2972 3669 2642 Q 3472 2313 2841 1759 L 1844 884 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-32" />
</g>
</g>
</g>
<g id="beatrice-text-female-1" onclick="(()=&gt;{console.log('text 1 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(392.37272 374.787731) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-34"
d="M 2356 3675 L 1038 1722 L 2356 1722 L 2356 3675 z M 2156 4666 L 3494 4666 L 3494 1722 L 4159 1722 L 4159 850 L 3494 850 L 3494 0 L 2356 0 L 2356 850 L 288 850 L 288 1881 L 2156 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-34" />
</g>
</g>
</g>
<g id="beatrice-text-female-2" onclick="(()=&gt;{console.log('text 2 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(253.860482 329.445494) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-37"
d="M 428 4666 L 3944 4666 L 3944 3988 L 2125 0 L 953 0 L 2675 3781 L 428 3781 L 428 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-37" />
</g>
</g>
</g>
<g id="beatrice-text-female-3" onclick="(()=&gt;{console.log('text 3 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(163.27864 370.209205) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-38"
d="M 2228 2088 Q 1891 2088 1709 1903 Q 1528 1719 1528 1375 Q 1528 1031 1709 848 Q 1891 666 2228 666 Q 2563 666 2741 848 Q 2919 1031 2919 1375 Q 2919 1722 2741 1905 Q 2563 2088 2228 2088 z M 1350 2484 Q 925 2613 709 2878 Q 494 3144 494 3541 Q 494 4131 934 4440 Q 1375 4750 2228 4750 Q 3075 4750 3515 4442 Q 3956 4134 3956 3541 Q 3956 3144 3739 2878 Q 3522 2613 3097 2484 Q 3572 2353 3814 2058 Q 4056 1763 4056 1313 Q 4056 619 3595 264 Q 3134 -91 2228 -91 Q 1319 -91 855 264 Q 391 619 391 1313 Q 391 1763 633 2058 Q 875 2353 1350 2484 z M 1631 3419 Q 1631 3141 1786 2991 Q 1941 2841 2228 2841 Q 2509 2841 2662 2991 Q 2816 3141 2816 3419 Q 2816 3697 2662 3845 Q 2509 3994 2228 3994 Q 1941 3994 1786 3844 Q 1631 3694 1631 3419 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-38" />
</g>
</g>
</g>
<g id="beatrice-text-female-4" onclick="(()=&gt;{console.log('text 4 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(428.003432 419.484988) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-31"
d="M 750 831 L 1813 831 L 1813 3847 L 722 3622 L 722 4441 L 1806 4666 L 2950 4666 L 2950 831 L 4013 831 L 4013 0 L 750 0 L 750 831 z "
transform="scale(0.015625)" />
<path id="DejaVuSans-Bold-30"
d="M 2944 2338 Q 2944 3213 2780 3570 Q 2616 3928 2228 3928 Q 1841 3928 1675 3570 Q 1509 3213 1509 2338 Q 1509 1453 1675 1090 Q 1841 728 2228 728 Q 2613 728 2778 1090 Q 2944 1453 2944 2338 z M 4147 2328 Q 4147 1169 3647 539 Q 3147 -91 2228 -91 Q 1306 -91 806 539 Q 306 1169 306 2328 Q 306 3491 806 4120 Q 1306 4750 2228 4750 Q 3147 4750 3647 4120 Q 4147 3491 4147 2328 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-5" onclick="(()=&gt;{console.log('text 5 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(383.164961 245.359486) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-6" onclick="(()=&gt;{console.log('text 6 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(197.191669 463.022351) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-35"
d="M 678 4666 L 3669 4666 L 3669 3781 L 1638 3781 L 1638 3059 Q 1775 3097 1914 3117 Q 2053 3138 2203 3138 Q 3056 3138 3531 2711 Q 4006 2284 4006 1522 Q 4006 766 3489 337 Q 2972 -91 2053 -91 Q 1656 -91 1267 -14 Q 878 63 494 219 L 494 1166 Q 875 947 1217 837 Q 1559 728 1863 728 Q 2300 728 2551 942 Q 2803 1156 2803 1522 Q 2803 1891 2551 2103 Q 2300 2316 1863 2316 Q 1603 2316 1309 2248 Q 1016 2181 678 2041 L 678 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-7" onclick="(()=&gt;{console.log('text 7 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(152.092875 295.851586) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-36"
d="M 2316 2303 Q 2000 2303 1842 2098 Q 1684 1894 1684 1484 Q 1684 1075 1842 870 Q 2000 666 2316 666 Q 2634 666 2792 870 Q 2950 1075 2950 1484 Q 2950 1894 2792 2098 Q 2634 2303 2316 2303 z M 3803 4544 L 3803 3681 Q 3506 3822 3243 3889 Q 2981 3956 2731 3956 Q 2194 3956 1894 3657 Q 1594 3359 1544 2772 Q 1750 2925 1990 3001 Q 2231 3078 2516 3078 Q 3231 3078 3670 2659 Q 4109 2241 4109 1563 Q 4109 813 3618 361 Q 3128 -91 2303 -91 Q 1394 -91 895 523 Q 397 1138 397 2266 Q 397 3422 980 4083 Q 1563 4744 2578 4744 Q 2900 4744 3203 4694 Q 3506 4644 3803 4544 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-8" onclick="(()=&gt;{console.log('text 8 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(415.720934 222.332954) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-9" onclick="(()=&gt;{console.log('text 9 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(337.329637 110.918523) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-10" onclick="(()=&gt;{console.log('text 10 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(316.995629 222.507171) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-39"
d="M 641 103 L 641 966 Q 928 831 1190 764 Q 1453 697 1709 697 Q 2247 697 2547 995 Q 2847 1294 2900 1881 Q 2688 1725 2447 1647 Q 2206 1569 1925 1569 Q 1209 1569 770 1986 Q 331 2403 331 3084 Q 331 3838 820 4291 Q 1309 4744 2131 4744 Q 3044 4744 3544 4128 Q 4044 3513 4044 2388 Q 4044 1231 3459 570 Q 2875 -91 1856 -91 Q 1528 -91 1228 -42 Q 928 6 641 103 z M 2125 2350 Q 2441 2350 2600 2554 Q 2759 2759 2759 3169 Q 2759 3575 2600 3781 Q 2441 3988 2125 3988 Q 1809 3988 1650 3781 Q 1491 3575 1491 3169 Q 1491 2759 1650 2554 Q 1809 2350 2125 2350 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-11" onclick="(()=&gt;{console.log('text 11 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(354.725926 205.013187) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-12" onclick="(()=&gt;{console.log('text 12 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(358.281208 151.471241) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-13" onclick="(()=&gt;{console.log('text 13 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(333.112734 173.726092) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-14" onclick="(()=&gt;{console.log('text 14 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(159.046959 329.273098) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-15" onclick="(()=&gt;{console.log('text 15 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(253.761934 185.199227) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-16" onclick="(()=&gt;{console.log('text 16 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(180.944121 266.046391) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-33"
d="M 2981 2516 Q 3453 2394 3698 2092 Q 3944 1791 3944 1325 Q 3944 631 3412 270 Q 2881 -91 1863 -91 Q 1503 -91 1142 -33 Q 781 25 428 141 L 428 1069 Q 766 900 1098 814 Q 1431 728 1753 728 Q 2231 728 2486 893 Q 2741 1059 2741 1369 Q 2741 1688 2480 1852 Q 2219 2016 1709 2016 L 1228 2016 L 1228 2791 L 1734 2791 Q 2188 2791 2409 2933 Q 2631 3075 2631 3366 Q 2631 3634 2415 3781 Q 2200 3928 1806 3928 Q 1516 3928 1219 3862 Q 922 3797 628 3669 L 628 4550 Q 984 4650 1334 4700 Q 1684 4750 2022 4750 Q 2931 4750 3382 4451 Q 3834 4153 3834 3553 Q 3834 3144 3618 2883 Q 3403 2622 2981 2516 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-17" onclick="(()=&gt;{console.log('text 17 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(269.606655 465.933789) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-18" onclick="(()=&gt;{console.log('text 18 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(325.583218 272.653614) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-19" onclick="(()=&gt;{console.log('text 19 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(408.411614 350.310389) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-20" onclick="(()=&gt;{console.log('text 20 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(326.31723 341.408828) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-21" onclick="(()=&gt;{console.log('text 21 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(195.638162 351.242444) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-22" onclick="(()=&gt;{console.log('text 22 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(279.71061 367.236222) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-23" onclick="(()=&gt;{console.log('text 23 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(267.849143 392.30993) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-24" onclick="(()=&gt;{console.log('text 24 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(284.880842 424.704655) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-25" onclick="(()=&gt;{console.log('text 25 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(415.504337 381.632604) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-26" onclick="(()=&gt;{console.log('text 26 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(196.864977 220.377413) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-27" onclick="(()=&gt;{console.log('text 27 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(234.462583 357.393433) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-28" onclick="(()=&gt;{console.log('text 28 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(145.697818 426.464523) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-29" onclick="(()=&gt;{console.log('text 29 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(290.510319 335.777161) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-30" onclick="(()=&gt;{console.log('text 30 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(269.445395 310.291491) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-31" onclick="(()=&gt;{console.log('text 31 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(251.655337 429.737528) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-32" onclick="(()=&gt;{console.log('text 32 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(293.568025 261.436163) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-33" onclick="(()=&gt;{console.log('text 33 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(246.547954 266.344409) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-34" onclick="(()=&gt;{console.log('text 34 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(312.918088 406.332457) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-35" onclick="(()=&gt;{console.log('text 35 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(337.400892 383.442961) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-36" onclick="(()=&gt;{console.log('text 36 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(395.88896 406.065981) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-37" onclick="(()=&gt;{console.log('text 37 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(347.38477 238.99916) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-38" onclick="(()=&gt;{console.log('text 38 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(185.584411 411.315605) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-39" onclick="(()=&gt;{console.log('text 39 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(289.181126 197.86249) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-40" onclick="(()=&gt;{console.log('text 40 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(311.726285 371.889731) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-41" onclick="(()=&gt;{console.log('text 41 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(220.340369 413.270465) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-42" onclick="(()=&gt;{console.log('text 42 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(342.876801 422.653917) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-43" onclick="(()=&gt;{console.log('text 43 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(363.771039 368.733221) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-44" onclick="(()=&gt;{console.log('text 44 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(221.953701 439.459389) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-45" onclick="(()=&gt;{console.log('text 45 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(253.157028 477.463977) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-46" onclick="(()=&gt;{console.log('text 46 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(409.211471 262.775596) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-47" onclick="(()=&gt;{console.log('text 47 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(392.258494 438.041697) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-48" onclick="(()=&gt;{console.log('text 48 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(273.912603 286.090784) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-49" onclick="(()=&gt;{console.log('text 49 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(213.773188 264.727971) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-50" onclick="(()=&gt;{console.log('text 50 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(301.181549 458.138582) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="pe3de578e26">
<rect x="124.405104" y="69.12" width="341.589792" height="443.52" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,898 @@
<?xml version='1.0' encoding='utf-8'?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ns2="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="100 60 420 450" version="1.1">
<metadata>
<rdf:RDF>
<ns2:Work>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:date>2023-11-19T11:21:55.705408</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:creator>
<ns2:Agent>
<dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>
</ns2:Agent>
</dc:creator>
</ns2:Work>
</rdf:RDF>
</metadata>
<defs>
<style type="text/css">
* {
stroke-linejoin: round;
stroke-linecap: butt
}
</style>
<style type="text/css">
.beatrice-node-pointer {
cursor: pointer;
}
.beatrice-node-pointer:hover {
stroke: gray;
}
.beatrice-node-pointer-selected {
stroke: #ef6767c2;
stroke-width: 3
}
.beatrice-text-pointer {
cursor: pointer;
pointer-events: none
}
.beatrice-text-pointer:hover {
/* ホバー時のスタイルは既に設定されたスタイルと異なる特定の属性を変更することができます。 */
}
</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 576 L 576 576 L 576 0 L 0 0 z " style="fill: #ffffff" />
</g>
<g id="axes_1">
<g id="LineCollection_1">
<path d="M 383.475478 335.382791 L 350.123561 336.312105 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 383.475478 335.382791 L 393.562573 295.917472 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 383.475478 335.382791 L 396.396073 371.656412 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 395.592267 184.349842 L 344.302973 166.290216 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 166.614267 246.553188 L 214.405523 244.575019 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 389.299516 416.267064 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 367.134249 434.454954 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 396.396073 371.656412 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 321.091057 403.95329 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 291.699254 114.456198 L 287.429936 148.935339 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 309.72476 346.813492 L 326.464644 303.679747 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 396.396073 371.656412 L 422.276969 403.842356 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 396.396073 371.656412 L 419.504487 334.14189 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 311.713 188.802087 L 278.840744 190.572938 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 311.713 188.802087 L 287.429936 148.935339 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 311.713 188.802087 L 344.302973 166.290216 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 213.805036 285.720019 L 216.196468 317.113868 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 213.805036 285.720019 L 241.321249 255.242558 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 213.805036 285.720019 L 169.41455 268.66905 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 326.464644 303.679747 L 341.073251 272.287852 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 326.464644 303.679747 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 326.464644 303.679747 L 350.123561 336.312105 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 468.104517 290.196764 L 453.314054 329.209099 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 252.522958 107.607273 L 287.429936 148.935339 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 241.817 158.353487 L 278.840744 190.572938 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 278.840744 190.572938 L 264.569363 223.030096 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 190.32114 223.314542 L 214.405523 244.575019 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 233.41271 348.401671 L 216.196468 317.113868 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 122.295483 352.502553 L 162.445269 355.484449 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 158.624602 400.46174 L 162.445269 355.484449 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 214.405523 244.575019 L 241.321249 255.242558 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 214.405523 244.575019 L 207.563253 203.013335 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 264.569363 223.030096 L 298.808991 236.296491 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 264.569363 223.030096 L 241.321249 255.242558 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 264.569363 223.030096 L 236.649711 206.251683 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 220.79649 394.869471 L 213.931911 434.927829 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 220.79649 394.869471 L 208.453065 361.465389 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 241.321249 255.242558 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 257.120877 296.156882 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 453.314054 329.209099 L 419.504487 334.14189 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 287.180764 309.56402 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 287.429936 148.935339 L 321.071206 134.027026 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 300.632415 433.812968 L 321.091057 403.95329 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 216.196468 317.113868 L 181.944484 318.835753 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 216.196468 317.113868 L 208.453065 361.465389 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 419.504487 334.14189 L 436.061109 363.566053 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 366.514998 474.152727 L 367.134249 434.454954 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 208.453065 361.465389 L 162.445269 355.484449 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
</g>
<g id="PathCollection_1">
<defs>
<path id="C0_0_3858269516"
d="M 0 11.18034 C 2.965061 11.18034 5.80908 10.002309 7.905694 7.905694 C 10.002309 5.80908 11.18034 2.965061 11.18034 -0 C 11.18034 -2.965061 10.002309 -5.80908 7.905694 -7.905694 C 5.80908 -10.002309 2.965061 -11.18034 0 -11.18034 C -2.965061 -11.18034 -5.80908 -10.002309 -7.905694 -7.905694 C -10.002309 -5.80908 -11.18034 -2.965061 -11.18034 0 C -11.18034 2.965061 -10.002309 5.80908 -7.905694 7.905694 C -5.80908 10.002309 -2.965061 11.18034 0 11.18034 z " />
</defs>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-0" onclick="(()=&gt;{console.log('node 0')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="383.475478" y="335.382791" style="fill: #fde2bb" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-1" onclick="(()=&gt;{console.log('node 1')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="393.562573" y="295.917472" style="fill: #fdba68" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-2" onclick="(()=&gt;{console.log('node 2')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="395.592267" y="184.349842" style="fill: #fbe9cf" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-3" onclick="(()=&gt;{console.log('node 3')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="166.614267" y="246.553188" style="fill: #7e70ab" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-4" onclick="(()=&gt;{console.log('node 4')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="362.886037" y="395.352171" style="fill: #e8e9f1" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-5" onclick="(()=&gt;{console.log('node 5')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="291.699254" y="114.456198" style="fill: #f9b158" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-6" onclick="(()=&gt;{console.log('node 6')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="309.72476" y="346.813492" style="fill: #e4e5f0" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-7" onclick="(()=&gt;{console.log('node 7')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="396.396073" y="371.656412" style="fill: #fdcc8c" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-8" onclick="(()=&gt;{console.log('node 8')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="311.713" y="188.802087" style="fill: #fedeb3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-9" onclick="(()=&gt;{console.log('node 9')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="213.805036" y="285.720019" style="fill: #bab5d7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-10"
onclick="(()=&gt;{console.log('node 10')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="326.464644" y="303.679747" style="fill: #eaebf2" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-11"
onclick="(()=&gt;{console.log('node 11')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="468.104517" y="290.196764" style="fill: #f7f7f6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-12"
onclick="(()=&gt;{console.log('node 12')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="169.41455" y="268.66905" style="fill: #dfe1ee" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-13"
onclick="(()=&gt;{console.log('node 13')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="252.522958" y="107.607273" style="fill: #eff0f4" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-14"
onclick="(()=&gt;{console.log('node 14')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="241.817" y="158.353487" style="fill: #e58a20" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-15"
onclick="(()=&gt;{console.log('node 15')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="278.840744" y="190.572938" style="fill: #fedbac" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-16"
onclick="(()=&gt;{console.log('node 16')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="190.32114" y="223.314542" style="fill: #dfe1ee" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-17"
onclick="(()=&gt;{console.log('node 17')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="233.41271" y="348.401671" style="fill: #c3c0dd" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-18"
onclick="(()=&gt;{console.log('node 18')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="122.295483" y="352.502553" style="fill: #fed8a6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-19"
onclick="(()=&gt;{console.log('node 19')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="158.624602" y="400.46174" style="fill: #f7f6f3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-20"
onclick="(()=&gt;{console.log('node 20')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="214.405523" y="244.575019" style="fill: #f9f2e9" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-21"
onclick="(()=&gt;{console.log('node 21')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="264.569363" y="223.030096" style="fill: #faecd7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-22"
onclick="(()=&gt;{console.log('node 22')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="220.79649" y="394.869471" style="fill: #fbead2" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-23"
onclick="(()=&gt;{console.log('node 23')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="344.302973" y="166.290216" style="fill: #feddaf" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-24"
onclick="(()=&gt;{console.log('node 24')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="241.321249" y="255.242558" style="fill: #c3c0dd" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-25"
onclick="(()=&gt;{console.log('node 25')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="257.120877" y="296.156882" style="fill: #f9f0e4" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-26"
onclick="(()=&gt;{console.log('node 26')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="207.563253" y="203.013335" style="fill: #fbebd5" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-27"
onclick="(()=&gt;{console.log('node 27')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="453.314054" y="329.209099" style="fill: #fdc47b" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-28"
onclick="(()=&gt;{console.log('node 28')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="350.123561" y="336.312105" style="fill: #fbe9cf" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-29"
onclick="(()=&gt;{console.log('node 29')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="287.180764" y="309.56402" style="fill: #f7f6f3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-30"
onclick="(()=&gt;{console.log('node 30')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="287.429936" y="148.935339" style="fill: #fbebd5" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-31"
onclick="(()=&gt;{console.log('node 31')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="281.878613" y="277.846944" style="fill: #d1d1e6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-32"
onclick="(()=&gt;{console.log('node 32')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="300.632415" y="433.812968" style="fill: #fde2bb" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-33"
onclick="(()=&gt;{console.log('node 33')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="216.196468" y="317.113868" style="fill: #dddfed" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-34"
onclick="(()=&gt;{console.log('node 34')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="419.504487" y="334.14189" style="fill: #fdc57f" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-35"
onclick="(()=&gt;{console.log('node 35')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="321.071206" y="134.027026" style="fill: #fee0b6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-36"
onclick="(()=&gt;{console.log('node 36')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="366.514998" y="474.152727" style="fill: #fdbd6e" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-37"
onclick="(()=&gt;{console.log('node 37')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="208.453065" y="361.465389" style="fill: #cccbe3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-38"
onclick="(()=&gt;{console.log('node 38')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="236.649711" y="206.251683" style="fill: #faecd7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-39"
onclick="(()=&gt;{console.log('node 39')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="298.808991" y="236.296491" style="fill: #fdc57f" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-40"
onclick="(()=&gt;{console.log('node 40')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="181.944484" y="318.835753" style="fill: #f9f0e4" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-41"
onclick="(()=&gt;{console.log('node 41')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="367.134249" y="434.454954" style="fill: #f6f6f7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-42"
onclick="(()=&gt;{console.log('node 42')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="422.276969" y="403.842356" style="fill: #fdbf72" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-43"
onclick="(()=&gt;{console.log('node 43')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="321.091057" y="403.95329" style="fill: #f8f5f1" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-44"
onclick="(()=&gt;{console.log('node 44')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="162.445269" y="355.484449" style="fill: #eaebf2" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-45"
onclick="(()=&gt;{console.log('node 45')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="341.073251" y="272.287852" style="fill: #f6aa4f" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-46"
onclick="(()=&gt;{console.log('node 46')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="389.299516" y="416.267064" style="fill: #de8013" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-47"
onclick="(()=&gt;{console.log('node 47')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="213.931911" y="434.927829" style="fill: #fbb55e" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-48"
onclick="(()=&gt;{console.log('node 48')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="436.061109" y="363.566053" style="fill: #ebecf3" />
</g>
</g>
<g id="beatrice-text-male-0" onclick="(()=&gt;{console.log('text 0 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(379.30079 338.694041) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-31"
d="M 750 831 L 1813 831 L 1813 3847 L 722 3622 L 722 4441 L 1806 4666 L 2950 4666 L 2950 831 L 4013 831 L 4013 0 L 750 0 L 750 831 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
</g>
</g>
</g>
<g id="beatrice-text-male-1" onclick="(()=&gt;{console.log('text 1 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(389.387885 299.228722) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-33"
d="M 2981 2516 Q 3453 2394 3698 2092 Q 3944 1791 3944 1325 Q 3944 631 3412 270 Q 2881 -91 1863 -91 Q 1503 -91 1142 -33 Q 781 25 428 141 L 428 1069 Q 766 900 1098 814 Q 1431 728 1753 728 Q 2231 728 2486 893 Q 2741 1059 2741 1369 Q 2741 1688 2480 1852 Q 2219 2016 1709 2016 L 1228 2016 L 1228 2791 L 1734 2791 Q 2188 2791 2409 2933 Q 2631 3075 2631 3366 Q 2631 3634 2415 3781 Q 2200 3928 1806 3928 Q 1516 3928 1219 3862 Q 922 3797 628 3669 L 628 4550 Q 984 4650 1334 4700 Q 1684 4750 2022 4750 Q 2931 4750 3382 4451 Q 3834 4153 3834 3553 Q 3834 3144 3618 2883 Q 3403 2622 2981 2516 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
</g>
</g>
</g>
<g id="beatrice-text-male-2" onclick="(()=&gt;{console.log('text 2 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(391.41758 187.661092) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-35"
d="M 678 4666 L 3669 4666 L 3669 3781 L 1638 3781 L 1638 3059 Q 1775 3097 1914 3117 Q 2053 3138 2203 3138 Q 3056 3138 3531 2711 Q 4006 2284 4006 1522 Q 4006 766 3489 337 Q 2972 -91 2053 -91 Q 1656 -91 1267 -14 Q 878 63 494 219 L 494 1166 Q 875 947 1217 837 Q 1559 728 1863 728 Q 2300 728 2551 942 Q 2803 1156 2803 1522 Q 2803 1891 2551 2103 Q 2300 2316 1863 2316 Q 1603 2316 1309 2248 Q 1016 2181 678 2041 L 678 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-35" />
</g>
</g>
</g>
<g id="beatrice-text-male-3" onclick="(()=&gt;{console.log('text 3 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(162.43958 249.864438) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-36"
d="M 2316 2303 Q 2000 2303 1842 2098 Q 1684 1894 1684 1484 Q 1684 1075 1842 870 Q 2000 666 2316 666 Q 2634 666 2792 870 Q 2950 1075 2950 1484 Q 2950 1894 2792 2098 Q 2634 2303 2316 2303 z M 3803 4544 L 3803 3681 Q 3506 3822 3243 3889 Q 2981 3956 2731 3956 Q 2194 3956 1894 3657 Q 1594 3359 1544 2772 Q 1750 2925 1990 3001 Q 2231 3078 2516 3078 Q 3231 3078 3670 2659 Q 4109 2241 4109 1563 Q 4109 813 3618 361 Q 3128 -91 2303 -91 Q 1394 -91 895 523 Q 397 1138 397 2266 Q 397 3422 980 4083 Q 1563 4744 2578 4744 Q 2900 4744 3203 4694 Q 3506 4644 3803 4544 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-36" />
</g>
</g>
</g>
<g id="beatrice-text-male-4" onclick="(()=&gt;{console.log('text 4 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(358.71135 398.663421) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-39"
d="M 641 103 L 641 966 Q 928 831 1190 764 Q 1453 697 1709 697 Q 2247 697 2547 995 Q 2847 1294 2900 1881 Q 2688 1725 2447 1647 Q 2206 1569 1925 1569 Q 1209 1569 770 1986 Q 331 2403 331 3084 Q 331 3838 820 4291 Q 1309 4744 2131 4744 Q 3044 4744 3544 4128 Q 4044 3513 4044 2388 Q 4044 1231 3459 570 Q 2875 -91 1856 -91 Q 1528 -91 1228 -42 Q 928 6 641 103 z M 2125 2350 Q 2441 2350 2600 2554 Q 2759 2759 2759 3169 Q 2759 3575 2600 3781 Q 2441 3988 2125 3988 Q 1809 3988 1650 3781 Q 1491 3575 1491 3169 Q 1491 2759 1650 2554 Q 1809 2350 2125 2350 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-39" />
</g>
</g>
</g>
<g id="beatrice-text-male-5" onclick="(()=&gt;{console.log('text 5 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(283.349879 117.767448) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-6" onclick="(()=&gt;{console.log('text 6 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(301.375385 350.124742) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-32"
d="M 1844 884 L 3897 884 L 3897 0 L 506 0 L 506 884 L 2209 2388 Q 2438 2594 2547 2791 Q 2656 2988 2656 3200 Q 2656 3528 2436 3728 Q 2216 3928 1850 3928 Q 1569 3928 1234 3808 Q 900 3688 519 3450 L 519 4475 Q 925 4609 1322 4679 Q 1719 4750 2100 4750 Q 2938 4750 3402 4381 Q 3866 4013 3866 3353 Q 3866 2972 3669 2642 Q 3472 2313 2841 1759 L 1844 884 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-7" onclick="(()=&gt;{console.log('text 7 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(388.046698 374.967662) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-8" onclick="(()=&gt;{console.log('text 8 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(303.363625 192.113337) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-30"
d="M 2944 2338 Q 2944 3213 2780 3570 Q 2616 3928 2228 3928 Q 1841 3928 1675 3570 Q 1509 3213 1509 2338 Q 1509 1453 1675 1090 Q 1841 728 2228 728 Q 2613 728 2778 1090 Q 2944 1453 2944 2338 z M 4147 2328 Q 4147 1169 3647 539 Q 3147 -91 2228 -91 Q 1306 -91 806 539 Q 306 1169 306 2328 Q 306 3491 806 4120 Q 1306 4750 2228 4750 Q 3147 4750 3647 4120 Q 4147 3491 4147 2328 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-9" onclick="(()=&gt;{console.log('text 9 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(205.455661 289.031269) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-10" onclick="(()=&gt;{console.log('text 10 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(318.115269 306.990997) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-11" onclick="(()=&gt;{console.log('text 11 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(459.755142 293.508014) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-12" onclick="(()=&gt;{console.log('text 12 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(161.065175 271.9803) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-38"
d="M 2228 2088 Q 1891 2088 1709 1903 Q 1528 1719 1528 1375 Q 1528 1031 1709 848 Q 1891 666 2228 666 Q 2563 666 2741 848 Q 2919 1031 2919 1375 Q 2919 1722 2741 1905 Q 2563 2088 2228 2088 z M 1350 2484 Q 925 2613 709 2878 Q 494 3144 494 3541 Q 494 4131 934 4440 Q 1375 4750 2228 4750 Q 3075 4750 3515 4442 Q 3956 4134 3956 3541 Q 3956 3144 3739 2878 Q 3522 2613 3097 2484 Q 3572 2353 3814 2058 Q 4056 1763 4056 1313 Q 4056 619 3595 264 Q 3134 -91 2228 -91 Q 1319 -91 855 264 Q 391 619 391 1313 Q 391 1763 633 2058 Q 875 2353 1350 2484 z M 1631 3419 Q 1631 3141 1786 2991 Q 1941 2841 2228 2841 Q 2509 2841 2662 2991 Q 2816 3141 2816 3419 Q 2816 3697 2662 3845 Q 2509 3994 2228 3994 Q 1941 3994 1786 3844 Q 1631 3694 1631 3419 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-13" onclick="(()=&gt;{console.log('text 13 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(244.173583 110.918523) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-14" onclick="(()=&gt;{console.log('text 14 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(233.467625 161.664737) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-15" onclick="(()=&gt;{console.log('text 15 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(270.491369 193.884188) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-16" onclick="(()=&gt;{console.log('text 16 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(181.971765 226.625792) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-34"
d="M 2356 3675 L 1038 1722 L 2356 1722 L 2356 3675 z M 2156 4666 L 3494 4666 L 3494 1722 L 4159 1722 L 4159 850 L 3494 850 L 3494 0 L 2356 0 L 2356 850 L 288 850 L 288 1881 L 2156 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-17" onclick="(()=&gt;{console.log('text 17 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(225.063335 351.712921) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-37"
d="M 428 4666 L 3944 4666 L 3944 3988 L 2125 0 L 953 0 L 2675 3781 L 428 3781 L 428 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-18" onclick="(()=&gt;{console.log('text 18 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(113.946108 355.813803) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-19" onclick="(()=&gt;{console.log('text 19 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(150.275227 403.77299) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-20" onclick="(()=&gt;{console.log('text 20 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(206.056148 247.886269) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-21" onclick="(()=&gt;{console.log('text 21 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(256.219988 226.341346) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-22" onclick="(()=&gt;{console.log('text 22 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(212.447115 398.180721) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-23" onclick="(()=&gt;{console.log('text 23 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(335.953598 169.601466) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-24" onclick="(()=&gt;{console.log('text 24 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(232.971874 258.553808) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-25" onclick="(()=&gt;{console.log('text 25 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(248.771502 299.468132) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-26" onclick="(()=&gt;{console.log('text 26 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(199.213878 206.324585) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-27" onclick="(()=&gt;{console.log('text 27 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(444.964679 332.520349) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-28" onclick="(()=&gt;{console.log('text 28 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(341.774186 339.623355) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-29" onclick="(()=&gt;{console.log('text 29 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(278.831389 312.87527) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-30" onclick="(()=&gt;{console.log('text 30 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(279.080561 152.246589) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-31" onclick="(()=&gt;{console.log('text 31 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(273.529238 281.158194) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-32" onclick="(()=&gt;{console.log('text 32 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(292.28304 437.124218) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-33" onclick="(()=&gt;{console.log('text 33 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(207.847093 320.425118) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-34" onclick="(()=&gt;{console.log('text 34 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(411.155112 337.45314) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-35" onclick="(()=&gt;{console.log('text 35 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(312.721831 137.338276) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-36" onclick="(()=&gt;{console.log('text 36 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(358.165623 477.463977) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-37" onclick="(()=&gt;{console.log('text 37 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(200.10369 364.776639) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-38" onclick="(()=&gt;{console.log('text 38 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(228.300336 209.562933) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-39" onclick="(()=&gt;{console.log('text 39 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(290.459616 239.607741) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-40" onclick="(()=&gt;{console.log('text 40 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(173.595109 322.147003) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-41" onclick="(()=&gt;{console.log('text 41 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(358.784874 437.766204) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-42" onclick="(()=&gt;{console.log('text 42 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(413.927594 407.153606) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-43" onclick="(()=&gt;{console.log('text 43 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(312.741682 407.26454) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-44" onclick="(()=&gt;{console.log('text 44 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(154.095894 358.795699) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-45" onclick="(()=&gt;{console.log('text 45 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(332.723876 275.599102) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-46" onclick="(()=&gt;{console.log('text 46 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(380.950141 419.578314) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-47" onclick="(()=&gt;{console.log('text 47 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(205.582536 438.239079) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-48" onclick="(()=&gt;{console.log('text 48 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(423.537047 366.877303) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
<use xlink:href="#DejaVuSans-Bold-30" x="139.160156" />
</g>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="pd42c8a995e">
<rect x="85.985534" y="69.12" width="418.428931" height="443.52" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 54 KiB

BIN
client/demo/dist/assets/buymeacoffee.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,30 @@
{
"type": "demo",
"id": "RVC",
"front": {
"modelSlotControl": [
{
"name": "headerArea",
"options": {
"mainTitle": "Realtime Voice Changer Client",
"subTitle": ""
}
},
{
"name": "modelSlotArea",
"options": {}
},
{
"name": "characterArea",
"options": {}
},
{
"name": "configArea",
"options": {
"detectors": ["dio", "harvest", "crepe", "crepe_full", "crepe_tiny", "rmvpe", "rmvpe_onnx", "fcpe"],
"inputChunkNums": [1, 2, 4, 6, 8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 2048, 4096, 8192, 16384]
}
}
]
}
}

View File

@ -0,0 +1,30 @@
{
"type": "demo",
"id": "RVC",
"front": {
"modelSlotControl": [
{
"name": "headerArea",
"options": {
"mainTitle": "Realtime Voice Changer Client",
"subTitle": "for RVC"
}
},
{
"name": "modelSlotArea",
"options": {}
},
{
"name": "characterArea",
"options": {}
},
{
"name": "configArea",
"options": {
"detectors": ["dio", "harvest", "crepe"],
"inputChunkNums": [8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 2048]
}
}
]
}
}

View File

View File

@ -0,0 +1 @@
onnxdirectML-cuda

View File

@ -0,0 +1 @@
web

View File

@ -0,0 +1 @@
-.-.-.-

BIN
client/demo/dist/assets/icons/blank.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 473 B

After

Width:  |  Height:  |  Size: 473 B

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg>

After

Width:  |  Height:  |  Size: 311 B

View File

Before

Width:  |  Height:  |  Size: 522 B

After

Width:  |  Height:  |  Size: 522 B

View File

Before

Width:  |  Height:  |  Size: 365 B

After

Width:  |  Height:  |  Size: 365 B

View File

Before

Width:  |  Height:  |  Size: 327 B

After

Width:  |  Height:  |  Size: 327 B

BIN
client/demo/dist/assets/icons/human.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 395 B

After

Width:  |  Height:  |  Size: 395 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tool"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path></svg>

After

Width:  |  Height:  |  Size: 386 B

View File

Before

Width:  |  Height:  |  Size: 403 B

After

Width:  |  Height:  |  Size: 403 B

View File

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,5 +1,9 @@
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */
/*!**********************!*\
!*** ./src/index.ts ***!
\**********************/
/**
* @license React
* react-dom.production.min.js

File diff suppressed because it is too large Load Diff

View File

@ -4,51 +4,75 @@
"description": "",
"main": ".eslintrc.js",
"scripts": {
"clean": "rimraf dist/*",
"clean": "rimraf dist/",
"webpack:prod": "npx webpack --config webpack.prod.js",
"webpack:dev": "npx webpack --config webpack.dev.js",
"build:prod": "npm-run-all clean webpack:prod",
"build:dev": "npm-run-all clean webpack:dev",
"start": "webpack-dev-server --config webpack.dev.js",
"test": "echo \"Error: no test specified\" && exit 1"
"build:mod": "cd ../lib && npm run build:dev && cd - && cp -r ../lib/dist/* node_modules/@dannadori/voice-changer-client-js/dist/",
"build:mod_dos": "cd ../lib && npm run build:dev && cd ../demo && npm-run-all build:mod_copy",
"build:mod_copy": "XCOPY ..\\lib\\dist\\* .\\node_modules\\@dannadori\\voice-changer-client-js\\dist\\* /s /e /h /y",
"test": "echo \"Error: no test specified\" && exit 1",
"____ comment ____": "ウェブバージョンのスクリプト",
"clean:web": "rimraf dist_web/",
"webpack:web:prod": "npx webpack --config webpack_web.prod.js && copy .\\public\\info_web .\\dist_web\\info && copy .\\public\\assets\\gui_settings\\edition_web.txt .\\dist_web\\assets\\gui_settings\\edition.txt",
"webpack:web:dev": "npx webpack --config webpack_web.dev.js && copy .\\public\\info_web .\\dist_web\\info && copy .\\public\\assets\\gui_settings\\edition_web.txt .\\dist_web\\assets\\gui_settings\\edition.txt",
"build:web:prod": "npm-run-all clean:web webpack:web:prod",
"build:web:dev": "npm-run-all clean:web webpack:web:dev",
"start:web": "webpack-dev-server --config webpack_web.dev.js"
},
"keywords": [],
"author": "",
"keywords": [
"voice conversion"
],
"author": "wataru.okada@flect.co.jp",
"license": "ISC",
"devDependencies": {
"@babel/plugin-transform-runtime": "^7.19.6",
"@babel/preset-env": "^7.20.2",
"@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.18.6",
"@types/node": "^18.11.18",
"@types/react": "^18.0.26",
"@types/react-dom": "^18.0.10",
"autoprefixer": "^10.4.13",
"babel-loader": "^9.1.2",
"copy-webpack-plugin": "^11.0.0",
"css-loader": "^6.7.3",
"eslint": "^8.31.0",
"eslint-config-prettier": "^8.6.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.32.0",
"eslint-webpack-plugin": "^3.2.0",
"html-loader": "^4.2.0",
"html-webpack-plugin": "^5.5.0",
"@babel/core": "^7.24.0",
"@babel/plugin-transform-runtime": "^7.24.0",
"@babel/preset-env": "^7.24.0",
"@babel/preset-react": "^7.23.3",
"@babel/preset-typescript": "^7.23.3",
"@types/node": "^20.11.21",
"@types/react": "^18.2.60",
"@types/react-dom": "^18.2.19",
"autoprefixer": "^10.4.17",
"babel-loader": "^9.1.3",
"copy-webpack-plugin": "^12.0.2",
"css-loader": "^6.10.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-react": "^7.33.2",
"eslint-webpack-plugin": "^4.0.1",
"html-loader": "^5.0.0",
"html-webpack-plugin": "^5.6.0",
"npm-run-all": "^4.1.5",
"postcss-loader": "^7.0.2",
"postcss-nested": "^6.0.0",
"prettier": "^2.8.2",
"rimraf": "^3.0.2",
"style-loader": "^3.3.1",
"ts-loader": "^9.4.2",
"tsconfig-paths": "^4.1.2",
"typescript": "^4.9.4",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1"
"postcss-loader": "^8.1.1",
"postcss-nested": "^6.0.1",
"prettier": "^3.2.5",
"rimraf": "^5.0.5",
"style-loader": "^3.3.4",
"ts-loader": "^9.5.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^5.3.3",
"webpack": "^5.90.3",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^5.0.2"
},
"dependencies": {
"@dannadori/voice-changer-client-js": "file:../lib",
"@alexanderolsen/libsamplerate-js": "^2.1.1",
"@dannadori/voice-changer-client-js": "^1.0.182",
"@dannadori/voice-changer-js": "^1.0.2",
"@dannadori/worker-manager": "^1.0.20",
"@fortawesome/fontawesome-svg-core": "^6.5.1",
"@fortawesome/free-brands-svg-icons": "^6.5.1",
"@fortawesome/free-regular-svg-icons": "^6.5.1",
"@fortawesome/free-solid-svg-icons": "^6.5.1",
"@fortawesome/react-fontawesome": "^0.2.0",
"@tensorflow/tfjs": "^4.17.0",
"onnxruntime-web": "^1.17.1",
"protobufjs": "^7.2.6",
"react": "^18.2.0",
"react-dom": "^18.2.0"
}

View File

@ -0,0 +1,928 @@
<?xml version='1.0' encoding='utf-8'?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ns2="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="100 60 420 450" version="1.1">
<metadata>
<rdf:RDF>
<ns2:Work>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:date>2023-11-19T11:21:56.358384</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:creator>
<ns2:Agent>
<dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>
</ns2:Agent>
</dc:creator>
</ns2:Work>
</rdf:RDF>
</metadata>
<defs>
<style type="text/css">
* {
stroke-linejoin: round;
stroke-linecap: butt
}
</style>
<style type="text/css">
.beatrice-node-pointer {
cursor: pointer;
}
.beatrice-node-pointer:hover {
stroke: gray;
}
.beatrice-node-pointer-selected {
stroke: #ef6767c2;
stroke-width: 3
}
.beatrice-text-pointer {
cursor: pointer;
pointer-events: none
}
.beatrice-text-pointer:hover {
/* ホバー時のスタイルは既に設定されたスタイルと異なる特定の属性を変更することができます。 */
}
</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 576 L 576 576 L 576 0 L 0 0 z " style="fill: #ffffff" />
</g>
<g id="axes_1">
<g id="LineCollection_1">
<path d="M 403.96157 149.258085 L 366.630583 148.159991 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 396.547407 371.476481 L 372.120414 365.421971 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 396.547407 371.476481 L 416.760989 346.999139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 396.547407 371.476481 L 404.238335 402.754731 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 258.035169 326.134244 L 298.859694 332.465911 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 167.453327 366.897955 L 203.987537 347.931194 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 436.352807 416.173738 L 404.238335 402.754731 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 391.514336 242.048236 L 417.560846 259.464346 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 391.514336 242.048236 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 391.514336 242.048236 L 424.070309 219.021704 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 205.541044 459.711101 L 230.303076 436.148139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 160.44225 292.540336 L 167.396334 325.961848 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.679012 107.607273 L 366.630583 148.159991 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 325.345004 219.195921 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 325.345004 219.195921 L 297.530501 194.55124 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 363.075301 201.701937 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 363.075301 201.701937 L 341.462109 170.414842 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 366.630583 148.159991 L 341.462109 170.414842 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 167.396334 325.961848 L 203.987537 347.931194 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 262.111309 181.887977 L 297.530501 194.55124 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 189.293496 262.735141 L 222.122563 261.416721 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 277.95603 462.622539 L 293.230217 421.393405 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 333.932593 269.342364 L 301.9174 258.124913 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 333.932593 269.342364 L 355.734145 235.68791 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 334.666605 338.097578 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 203.987537 347.931194 L 242.811958 354.082183 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 276.198518 388.99868 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 298.859694 332.465911 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 288.059985 363.924972 L 242.811958 354.082183 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 276.198518 388.99868 L 293.230217 421.393405 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 293.230217 421.393405 L 309.530924 454.827332 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 293.230217 421.393405 L 260.004712 426.426278 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 423.853712 378.321354 L 404.238335 402.754731 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 205.214352 217.066163 L 222.122563 261.416721 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 154.047193 423.153273 L 193.933786 408.004355 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 298.859694 332.465911 L 277.79477 306.980241 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 277.79477 306.980241 L 282.261978 282.779534 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 260.004712 426.426278 L 230.303076 436.148139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 260.004712 426.426278 L 228.689744 409.959215 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 260.004712 426.426278 L 261.506403 474.152727 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 301.9174 258.124913 L 282.261978 282.779534 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 254.897329 263.033159 L 282.261978 282.779534 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 254.897329 263.033159 L 222.122563 261.416721 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 321.267463 403.021207 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.750267 380.131711 L 320.07566 368.578481 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.750267 380.131711 L 372.120414 365.421971 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 345.750267 380.131711 L 351.226176 419.342667 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 404.238335 402.754731 L 400.607869 434.730447 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
<path d="M 193.933786 408.004355 L 230.303076 436.148139 " clip-path="url(#pe3de578e26)"
style="fill: none; stroke: #808080" />
</g>
<g id="PathCollection_1">
<defs>
<path id="C0_0_b0ffb3bf4a"
d="M 0 11.18034 C 2.965061 11.18034 5.80908 10.002309 7.905694 7.905694 C 10.002309 5.80908 11.18034 2.965061 11.18034 -0 C 11.18034 -2.965061 10.002309 -5.80908 7.905694 -7.905694 C 5.80908 -10.002309 2.965061 -11.18034 0 -11.18034 C -2.965061 -11.18034 -5.80908 -10.002309 -7.905694 -7.905694 C -10.002309 -5.80908 -11.18034 -2.965061 -11.18034 0 C -11.18034 2.965061 -10.002309 5.80908 -7.905694 7.905694 C -5.80908 10.002309 -2.965061 11.18034 0 11.18034 z " />
</defs>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-0"
onclick="(()=&gt;{console.log('node 0')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="403.96157" y="149.258085" style="fill: #e7f5d2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-1"
onclick="(()=&gt;{console.log('node 1')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="396.547407" y="371.476481" style="fill: #fbe8f2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-2"
onclick="(()=&gt;{console.log('node 2')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="258.035169" y="326.134244" style="fill: #cfebaa" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-3"
onclick="(()=&gt;{console.log('node 3')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="167.453327" y="366.897955" style="fill: #f1f6e8" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-4"
onclick="(()=&gt;{console.log('node 4')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="436.352807" y="416.173738" style="fill: #e89ac6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-5"
onclick="(()=&gt;{console.log('node 5')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="391.514336" y="242.048236" style="fill: #f3bcdd" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-6"
onclick="(()=&gt;{console.log('node 6')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="205.541044" y="459.711101" style="fill: #fbd9ec" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-7"
onclick="(()=&gt;{console.log('node 7')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="160.44225" y="292.540336" style="fill: #9ed067" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-8"
onclick="(()=&gt;{console.log('node 8')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="424.070309" y="219.021704" style="fill: #e1f3c7" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-9"
onclick="(()=&gt;{console.log('node 9')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="345.679012" y="107.607273" style="fill: #d0ecad" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-10"
onclick="(()=&gt;{console.log('node 10')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="325.345004" y="219.195921" style="fill: #eff6e4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-11"
onclick="(()=&gt;{console.log('node 11')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="363.075301" y="201.701937" style="fill: #f9f0f5" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-12"
onclick="(()=&gt;{console.log('node 12')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="366.630583" y="148.159991" style="fill: #ebf6dc" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-13"
onclick="(()=&gt;{console.log('node 13')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="341.462109" y="170.414842" style="fill: #fad6ea" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-14"
onclick="(()=&gt;{console.log('node 14')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="167.396334" y="325.961848" style="fill: #f5f7f3" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-15"
onclick="(()=&gt;{console.log('node 15')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="262.111309" y="181.887977" style="fill: #e9f5d6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-16"
onclick="(()=&gt;{console.log('node 16')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="189.293496" y="262.735141" style="fill: #fce5f1" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-17"
onclick="(()=&gt;{console.log('node 17')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="277.95603" y="462.622539" style="fill: #c4e699" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-18"
onclick="(()=&gt;{console.log('node 18')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="333.932593" y="269.342364" style="fill: #f8f4f6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-19"
onclick="(()=&gt;{console.log('node 19')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="416.760989" y="346.999139" style="fill: #eef6e2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-20"
onclick="(()=&gt;{console.log('node 20')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="334.666605" y="338.097578" style="fill: #f5f7f3" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-21"
onclick="(()=&gt;{console.log('node 21')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="203.987537" y="347.931194" style="fill: #edf6df" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-22"
onclick="(()=&gt;{console.log('node 22')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="288.059985" y="363.924972" style="fill: #ddf1c1" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-23"
onclick="(()=&gt;{console.log('node 23')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="276.198518" y="388.99868" style="fill: #f5f7f3" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-24"
onclick="(()=&gt;{console.log('node 24')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="293.230217" y="421.393405" style="fill: #f3f7ef" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-25"
onclick="(()=&gt;{console.log('node 25')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="423.853712" y="378.321354" style="fill: #edf6df" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-26"
onclick="(()=&gt;{console.log('node 26')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="205.214352" y="217.066163" style="fill: #e7f5d2" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-27"
onclick="(()=&gt;{console.log('node 27')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="242.811958" y="354.082183" style="fill: #d2ecb0" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-28"
onclick="(()=&gt;{console.log('node 28')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="154.047193" y="423.153273" style="fill: #e6f5d0" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-29"
onclick="(()=&gt;{console.log('node 29')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="298.859694" y="332.465911" style="fill: #ecf6de" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-30"
onclick="(()=&gt;{console.log('node 30')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="277.79477" y="306.980241" style="fill: #eaf5d9" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-31"
onclick="(()=&gt;{console.log('node 31')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="260.004712" y="426.426278" style="fill: #f9f1f5" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-32"
onclick="(()=&gt;{console.log('node 32')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="301.9174" y="258.124913" style="fill: #dbf0bf" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-33"
onclick="(()=&gt;{console.log('node 33')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="254.897329" y="263.033159" style="fill: #eff6e4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-34"
onclick="(()=&gt;{console.log('node 34')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="321.267463" y="403.021207" style="fill: #d0ecad" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-35"
onclick="(()=&gt;{console.log('node 35')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="345.750267" y="380.131711" style="fill: #f9eef4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-36"
onclick="(()=&gt;{console.log('node 36')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="404.238335" y="402.754731" style="fill: #f9eef4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-37"
onclick="(()=&gt;{console.log('node 37')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="355.734145" y="235.68791" style="fill: #f9eef4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-38"
onclick="(()=&gt;{console.log('node 38')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="193.933786" y="408.004355" style="fill: #f0f6e7" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-39"
onclick="(()=&gt;{console.log('node 39')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="297.530501" y="194.55124" style="fill: #f3f6ed" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-40"
onclick="(()=&gt;{console.log('node 40')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="320.07566" y="368.578481" style="fill: #dbf0bf" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-41"
onclick="(()=&gt;{console.log('node 41')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="228.689744" y="409.959215" style="fill: #f9eff4" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-42"
onclick="(()=&gt;{console.log('node 42')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="351.226176" y="419.342667" style="fill: #cfebaa" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-43"
onclick="(()=&gt;{console.log('node 43')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="372.120414" y="365.421971" style="fill: #f7f6f7" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-44"
onclick="(()=&gt;{console.log('node 44')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="230.303076" y="436.148139" style="fill: #f8cee6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-45"
onclick="(()=&gt;{console.log('node 45')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="261.506403" y="474.152727" style="fill: #e6f5d0" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-46"
onclick="(()=&gt;{console.log('node 46')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="417.560846" y="259.464346" style="fill: #b7e085" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-47"
onclick="(()=&gt;{console.log('node 47')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="400.607869" y="434.730447" style="fill: #f8cee6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-48"
onclick="(()=&gt;{console.log('node 48')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="282.261978" y="282.779534" style="fill: #d6eeb6" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-49"
onclick="(()=&gt;{console.log('node 49')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="222.122563" y="261.416721" style="fill: #edf6df" />
</g>
<g clip-path="url(#pe3de578e26)" id="beatrice-node-female-50"
onclick="(()=&gt;{console.log('node 50')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_b0ffb3bf4a" x="309.530924" y="454.827332" style="fill: #f9eef4" />
</g>
</g>
<g id="beatrice-text-female-0" onclick="(()=&gt;{console.log('text 0 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(399.786883 152.569335) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-32"
d="M 1844 884 L 3897 884 L 3897 0 L 506 0 L 506 884 L 2209 2388 Q 2438 2594 2547 2791 Q 2656 2988 2656 3200 Q 2656 3528 2436 3728 Q 2216 3928 1850 3928 Q 1569 3928 1234 3808 Q 900 3688 519 3450 L 519 4475 Q 925 4609 1322 4679 Q 1719 4750 2100 4750 Q 2938 4750 3402 4381 Q 3866 4013 3866 3353 Q 3866 2972 3669 2642 Q 3472 2313 2841 1759 L 1844 884 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-32" />
</g>
</g>
</g>
<g id="beatrice-text-female-1" onclick="(()=&gt;{console.log('text 1 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(392.37272 374.787731) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-34"
d="M 2356 3675 L 1038 1722 L 2356 1722 L 2356 3675 z M 2156 4666 L 3494 4666 L 3494 1722 L 4159 1722 L 4159 850 L 3494 850 L 3494 0 L 2356 0 L 2356 850 L 288 850 L 288 1881 L 2156 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-34" />
</g>
</g>
</g>
<g id="beatrice-text-female-2" onclick="(()=&gt;{console.log('text 2 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(253.860482 329.445494) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-37"
d="M 428 4666 L 3944 4666 L 3944 3988 L 2125 0 L 953 0 L 2675 3781 L 428 3781 L 428 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-37" />
</g>
</g>
</g>
<g id="beatrice-text-female-3" onclick="(()=&gt;{console.log('text 3 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(163.27864 370.209205) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-38"
d="M 2228 2088 Q 1891 2088 1709 1903 Q 1528 1719 1528 1375 Q 1528 1031 1709 848 Q 1891 666 2228 666 Q 2563 666 2741 848 Q 2919 1031 2919 1375 Q 2919 1722 2741 1905 Q 2563 2088 2228 2088 z M 1350 2484 Q 925 2613 709 2878 Q 494 3144 494 3541 Q 494 4131 934 4440 Q 1375 4750 2228 4750 Q 3075 4750 3515 4442 Q 3956 4134 3956 3541 Q 3956 3144 3739 2878 Q 3522 2613 3097 2484 Q 3572 2353 3814 2058 Q 4056 1763 4056 1313 Q 4056 619 3595 264 Q 3134 -91 2228 -91 Q 1319 -91 855 264 Q 391 619 391 1313 Q 391 1763 633 2058 Q 875 2353 1350 2484 z M 1631 3419 Q 1631 3141 1786 2991 Q 1941 2841 2228 2841 Q 2509 2841 2662 2991 Q 2816 3141 2816 3419 Q 2816 3697 2662 3845 Q 2509 3994 2228 3994 Q 1941 3994 1786 3844 Q 1631 3694 1631 3419 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-38" />
</g>
</g>
</g>
<g id="beatrice-text-female-4" onclick="(()=&gt;{console.log('text 4 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(428.003432 419.484988) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-31"
d="M 750 831 L 1813 831 L 1813 3847 L 722 3622 L 722 4441 L 1806 4666 L 2950 4666 L 2950 831 L 4013 831 L 4013 0 L 750 0 L 750 831 z "
transform="scale(0.015625)" />
<path id="DejaVuSans-Bold-30"
d="M 2944 2338 Q 2944 3213 2780 3570 Q 2616 3928 2228 3928 Q 1841 3928 1675 3570 Q 1509 3213 1509 2338 Q 1509 1453 1675 1090 Q 1841 728 2228 728 Q 2613 728 2778 1090 Q 2944 1453 2944 2338 z M 4147 2328 Q 4147 1169 3647 539 Q 3147 -91 2228 -91 Q 1306 -91 806 539 Q 306 1169 306 2328 Q 306 3491 806 4120 Q 1306 4750 2228 4750 Q 3147 4750 3647 4120 Q 4147 3491 4147 2328 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-5" onclick="(()=&gt;{console.log('text 5 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(383.164961 245.359486) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-6" onclick="(()=&gt;{console.log('text 6 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(197.191669 463.022351) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-35"
d="M 678 4666 L 3669 4666 L 3669 3781 L 1638 3781 L 1638 3059 Q 1775 3097 1914 3117 Q 2053 3138 2203 3138 Q 3056 3138 3531 2711 Q 4006 2284 4006 1522 Q 4006 766 3489 337 Q 2972 -91 2053 -91 Q 1656 -91 1267 -14 Q 878 63 494 219 L 494 1166 Q 875 947 1217 837 Q 1559 728 1863 728 Q 2300 728 2551 942 Q 2803 1156 2803 1522 Q 2803 1891 2551 2103 Q 2300 2316 1863 2316 Q 1603 2316 1309 2248 Q 1016 2181 678 2041 L 678 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-7" onclick="(()=&gt;{console.log('text 7 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(152.092875 295.851586) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-36"
d="M 2316 2303 Q 2000 2303 1842 2098 Q 1684 1894 1684 1484 Q 1684 1075 1842 870 Q 2000 666 2316 666 Q 2634 666 2792 870 Q 2950 1075 2950 1484 Q 2950 1894 2792 2098 Q 2634 2303 2316 2303 z M 3803 4544 L 3803 3681 Q 3506 3822 3243 3889 Q 2981 3956 2731 3956 Q 2194 3956 1894 3657 Q 1594 3359 1544 2772 Q 1750 2925 1990 3001 Q 2231 3078 2516 3078 Q 3231 3078 3670 2659 Q 4109 2241 4109 1563 Q 4109 813 3618 361 Q 3128 -91 2303 -91 Q 1394 -91 895 523 Q 397 1138 397 2266 Q 397 3422 980 4083 Q 1563 4744 2578 4744 Q 2900 4744 3203 4694 Q 3506 4644 3803 4544 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-8" onclick="(()=&gt;{console.log('text 8 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(415.720934 222.332954) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-9" onclick="(()=&gt;{console.log('text 9 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(337.329637 110.918523) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-10" onclick="(()=&gt;{console.log('text 10 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(316.995629 222.507171) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-39"
d="M 641 103 L 641 966 Q 928 831 1190 764 Q 1453 697 1709 697 Q 2247 697 2547 995 Q 2847 1294 2900 1881 Q 2688 1725 2447 1647 Q 2206 1569 1925 1569 Q 1209 1569 770 1986 Q 331 2403 331 3084 Q 331 3838 820 4291 Q 1309 4744 2131 4744 Q 3044 4744 3544 4128 Q 4044 3513 4044 2388 Q 4044 1231 3459 570 Q 2875 -91 1856 -91 Q 1528 -91 1228 -42 Q 928 6 641 103 z M 2125 2350 Q 2441 2350 2600 2554 Q 2759 2759 2759 3169 Q 2759 3575 2600 3781 Q 2441 3988 2125 3988 Q 1809 3988 1650 3781 Q 1491 3575 1491 3169 Q 1491 2759 1650 2554 Q 1809 2350 2125 2350 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-11" onclick="(()=&gt;{console.log('text 11 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(354.725926 205.013187) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-12" onclick="(()=&gt;{console.log('text 12 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(358.281208 151.471241) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-13" onclick="(()=&gt;{console.log('text 13 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(333.112734 173.726092) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-14" onclick="(()=&gt;{console.log('text 14 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(159.046959 329.273098) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-15" onclick="(()=&gt;{console.log('text 15 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(253.761934 185.199227) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-16" onclick="(()=&gt;{console.log('text 16 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(180.944121 266.046391) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-33"
d="M 2981 2516 Q 3453 2394 3698 2092 Q 3944 1791 3944 1325 Q 3944 631 3412 270 Q 2881 -91 1863 -91 Q 1503 -91 1142 -33 Q 781 25 428 141 L 428 1069 Q 766 900 1098 814 Q 1431 728 1753 728 Q 2231 728 2486 893 Q 2741 1059 2741 1369 Q 2741 1688 2480 1852 Q 2219 2016 1709 2016 L 1228 2016 L 1228 2791 L 1734 2791 Q 2188 2791 2409 2933 Q 2631 3075 2631 3366 Q 2631 3634 2415 3781 Q 2200 3928 1806 3928 Q 1516 3928 1219 3862 Q 922 3797 628 3669 L 628 4550 Q 984 4650 1334 4700 Q 1684 4750 2022 4750 Q 2931 4750 3382 4451 Q 3834 4153 3834 3553 Q 3834 3144 3618 2883 Q 3403 2622 2981 2516 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-17" onclick="(()=&gt;{console.log('text 17 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(269.606655 465.933789) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-18" onclick="(()=&gt;{console.log('text 18 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(325.583218 272.653614) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-19" onclick="(()=&gt;{console.log('text 19 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(408.411614 350.310389) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-20" onclick="(()=&gt;{console.log('text 20 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(326.31723 341.408828) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-21" onclick="(()=&gt;{console.log('text 21 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(195.638162 351.242444) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-22" onclick="(()=&gt;{console.log('text 22 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(279.71061 367.236222) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-23" onclick="(()=&gt;{console.log('text 23 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(267.849143 392.30993) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-24" onclick="(()=&gt;{console.log('text 24 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(284.880842 424.704655) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-25" onclick="(()=&gt;{console.log('text 25 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(415.504337 381.632604) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-26" onclick="(()=&gt;{console.log('text 26 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(196.864977 220.377413) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-27" onclick="(()=&gt;{console.log('text 27 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(234.462583 357.393433) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-28" onclick="(()=&gt;{console.log('text 28 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(145.697818 426.464523) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-29" onclick="(()=&gt;{console.log('text 29 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(290.510319 335.777161) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-30" onclick="(()=&gt;{console.log('text 30 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(269.445395 310.291491) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-31" onclick="(()=&gt;{console.log('text 31 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(251.655337 429.737528) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-32" onclick="(()=&gt;{console.log('text 32 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(293.568025 261.436163) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-33" onclick="(()=&gt;{console.log('text 33 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(246.547954 266.344409) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-34" onclick="(()=&gt;{console.log('text 34 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(312.918088 406.332457) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-35" onclick="(()=&gt;{console.log('text 35 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(337.400892 383.442961) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-36" onclick="(()=&gt;{console.log('text 36 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(395.88896 406.065981) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-37" onclick="(()=&gt;{console.log('text 37 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(347.38477 238.99916) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-38" onclick="(()=&gt;{console.log('text 38 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(185.584411 411.315605) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-39" onclick="(()=&gt;{console.log('text 39 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(289.181126 197.86249) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-40" onclick="(()=&gt;{console.log('text 40 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(311.726285 371.889731) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-41" onclick="(()=&gt;{console.log('text 41 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(220.340369 413.270465) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-42" onclick="(()=&gt;{console.log('text 42 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(342.876801 422.653917) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-43" onclick="(()=&gt;{console.log('text 43 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(363.771039 368.733221) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-44" onclick="(()=&gt;{console.log('text 44 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(221.953701 439.459389) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-45" onclick="(()=&gt;{console.log('text 45 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(253.157028 477.463977) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-46" onclick="(()=&gt;{console.log('text 46 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(409.211471 262.775596) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-47" onclick="(()=&gt;{console.log('text 47 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(392.258494 438.041697) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-48" onclick="(()=&gt;{console.log('text 48 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(273.912603 286.090784) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-49" onclick="(()=&gt;{console.log('text 49 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(213.773188 264.727971) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-female-50" onclick="(()=&gt;{console.log('text 50 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pe3de578e26)">
<g transform="translate(301.181549 458.138582) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="pe3de578e26">
<rect x="124.405104" y="69.12" width="341.589792" height="443.52" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 56 KiB

View File

@ -0,0 +1,898 @@
<?xml version='1.0' encoding='utf-8'?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:ns2="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%" viewBox="100 60 420 450" version="1.1">
<metadata>
<rdf:RDF>
<ns2:Work>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:date>2023-11-19T11:21:55.705408</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:creator>
<ns2:Agent>
<dc:title>Matplotlib v3.7.1, https://matplotlib.org/</dc:title>
</ns2:Agent>
</dc:creator>
</ns2:Work>
</rdf:RDF>
</metadata>
<defs>
<style type="text/css">
* {
stroke-linejoin: round;
stroke-linecap: butt
}
</style>
<style type="text/css">
.beatrice-node-pointer {
cursor: pointer;
}
.beatrice-node-pointer:hover {
stroke: gray;
}
.beatrice-node-pointer-selected {
stroke: #ef6767c2;
stroke-width: 3
}
.beatrice-text-pointer {
cursor: pointer;
pointer-events: none
}
.beatrice-text-pointer:hover {
/* ホバー時のスタイルは既に設定されたスタイルと異なる特定の属性を変更することができます。 */
}
</style>
</defs>
<g id="figure_1">
<g id="patch_1">
<path d="M 0 576 L 576 576 L 576 0 L 0 0 z " style="fill: #ffffff" />
</g>
<g id="axes_1">
<g id="LineCollection_1">
<path d="M 383.475478 335.382791 L 350.123561 336.312105 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 383.475478 335.382791 L 393.562573 295.917472 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 383.475478 335.382791 L 396.396073 371.656412 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 395.592267 184.349842 L 344.302973 166.290216 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 166.614267 246.553188 L 214.405523 244.575019 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 389.299516 416.267064 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 367.134249 434.454954 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 396.396073 371.656412 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 362.886037 395.352171 L 321.091057 403.95329 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 291.699254 114.456198 L 287.429936 148.935339 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 309.72476 346.813492 L 326.464644 303.679747 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 396.396073 371.656412 L 422.276969 403.842356 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 396.396073 371.656412 L 419.504487 334.14189 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 311.713 188.802087 L 278.840744 190.572938 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 311.713 188.802087 L 287.429936 148.935339 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 311.713 188.802087 L 344.302973 166.290216 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 213.805036 285.720019 L 216.196468 317.113868 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 213.805036 285.720019 L 241.321249 255.242558 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 213.805036 285.720019 L 169.41455 268.66905 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 326.464644 303.679747 L 341.073251 272.287852 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 326.464644 303.679747 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 326.464644 303.679747 L 350.123561 336.312105 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 468.104517 290.196764 L 453.314054 329.209099 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 252.522958 107.607273 L 287.429936 148.935339 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 241.817 158.353487 L 278.840744 190.572938 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 278.840744 190.572938 L 264.569363 223.030096 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 190.32114 223.314542 L 214.405523 244.575019 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 233.41271 348.401671 L 216.196468 317.113868 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 122.295483 352.502553 L 162.445269 355.484449 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 158.624602 400.46174 L 162.445269 355.484449 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 214.405523 244.575019 L 241.321249 255.242558 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 214.405523 244.575019 L 207.563253 203.013335 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 264.569363 223.030096 L 298.808991 236.296491 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 264.569363 223.030096 L 241.321249 255.242558 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 264.569363 223.030096 L 236.649711 206.251683 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 220.79649 394.869471 L 213.931911 434.927829 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 220.79649 394.869471 L 208.453065 361.465389 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 241.321249 255.242558 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 257.120877 296.156882 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 453.314054 329.209099 L 419.504487 334.14189 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 287.180764 309.56402 L 281.878613 277.846944 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 287.429936 148.935339 L 321.071206 134.027026 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 300.632415 433.812968 L 321.091057 403.95329 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 216.196468 317.113868 L 181.944484 318.835753 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 216.196468 317.113868 L 208.453065 361.465389 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 419.504487 334.14189 L 436.061109 363.566053 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 366.514998 474.152727 L 367.134249 434.454954 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
<path d="M 208.453065 361.465389 L 162.445269 355.484449 " clip-path="url(#pd42c8a995e)"
style="fill: none; stroke: #808080" />
</g>
<g id="PathCollection_1">
<defs>
<path id="C0_0_3858269516"
d="M 0 11.18034 C 2.965061 11.18034 5.80908 10.002309 7.905694 7.905694 C 10.002309 5.80908 11.18034 2.965061 11.18034 -0 C 11.18034 -2.965061 10.002309 -5.80908 7.905694 -7.905694 C 5.80908 -10.002309 2.965061 -11.18034 0 -11.18034 C -2.965061 -11.18034 -5.80908 -10.002309 -7.905694 -7.905694 C -10.002309 -5.80908 -11.18034 -2.965061 -11.18034 0 C -11.18034 2.965061 -10.002309 5.80908 -7.905694 7.905694 C -5.80908 10.002309 -2.965061 11.18034 0 11.18034 z " />
</defs>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-0" onclick="(()=&gt;{console.log('node 0')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="383.475478" y="335.382791" style="fill: #fde2bb" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-1" onclick="(()=&gt;{console.log('node 1')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="393.562573" y="295.917472" style="fill: #fdba68" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-2" onclick="(()=&gt;{console.log('node 2')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="395.592267" y="184.349842" style="fill: #fbe9cf" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-3" onclick="(()=&gt;{console.log('node 3')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="166.614267" y="246.553188" style="fill: #7e70ab" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-4" onclick="(()=&gt;{console.log('node 4')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="362.886037" y="395.352171" style="fill: #e8e9f1" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-5" onclick="(()=&gt;{console.log('node 5')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="291.699254" y="114.456198" style="fill: #f9b158" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-6" onclick="(()=&gt;{console.log('node 6')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="309.72476" y="346.813492" style="fill: #e4e5f0" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-7" onclick="(()=&gt;{console.log('node 7')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="396.396073" y="371.656412" style="fill: #fdcc8c" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-8" onclick="(()=&gt;{console.log('node 8')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="311.713" y="188.802087" style="fill: #fedeb3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-9" onclick="(()=&gt;{console.log('node 9')})()"
class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="213.805036" y="285.720019" style="fill: #bab5d7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-10"
onclick="(()=&gt;{console.log('node 10')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="326.464644" y="303.679747" style="fill: #eaebf2" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-11"
onclick="(()=&gt;{console.log('node 11')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="468.104517" y="290.196764" style="fill: #f7f7f6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-12"
onclick="(()=&gt;{console.log('node 12')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="169.41455" y="268.66905" style="fill: #dfe1ee" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-13"
onclick="(()=&gt;{console.log('node 13')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="252.522958" y="107.607273" style="fill: #eff0f4" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-14"
onclick="(()=&gt;{console.log('node 14')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="241.817" y="158.353487" style="fill: #e58a20" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-15"
onclick="(()=&gt;{console.log('node 15')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="278.840744" y="190.572938" style="fill: #fedbac" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-16"
onclick="(()=&gt;{console.log('node 16')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="190.32114" y="223.314542" style="fill: #dfe1ee" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-17"
onclick="(()=&gt;{console.log('node 17')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="233.41271" y="348.401671" style="fill: #c3c0dd" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-18"
onclick="(()=&gt;{console.log('node 18')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="122.295483" y="352.502553" style="fill: #fed8a6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-19"
onclick="(()=&gt;{console.log('node 19')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="158.624602" y="400.46174" style="fill: #f7f6f3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-20"
onclick="(()=&gt;{console.log('node 20')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="214.405523" y="244.575019" style="fill: #f9f2e9" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-21"
onclick="(()=&gt;{console.log('node 21')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="264.569363" y="223.030096" style="fill: #faecd7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-22"
onclick="(()=&gt;{console.log('node 22')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="220.79649" y="394.869471" style="fill: #fbead2" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-23"
onclick="(()=&gt;{console.log('node 23')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="344.302973" y="166.290216" style="fill: #feddaf" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-24"
onclick="(()=&gt;{console.log('node 24')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="241.321249" y="255.242558" style="fill: #c3c0dd" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-25"
onclick="(()=&gt;{console.log('node 25')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="257.120877" y="296.156882" style="fill: #f9f0e4" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-26"
onclick="(()=&gt;{console.log('node 26')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="207.563253" y="203.013335" style="fill: #fbebd5" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-27"
onclick="(()=&gt;{console.log('node 27')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="453.314054" y="329.209099" style="fill: #fdc47b" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-28"
onclick="(()=&gt;{console.log('node 28')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="350.123561" y="336.312105" style="fill: #fbe9cf" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-29"
onclick="(()=&gt;{console.log('node 29')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="287.180764" y="309.56402" style="fill: #f7f6f3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-30"
onclick="(()=&gt;{console.log('node 30')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="287.429936" y="148.935339" style="fill: #fbebd5" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-31"
onclick="(()=&gt;{console.log('node 31')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="281.878613" y="277.846944" style="fill: #d1d1e6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-32"
onclick="(()=&gt;{console.log('node 32')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="300.632415" y="433.812968" style="fill: #fde2bb" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-33"
onclick="(()=&gt;{console.log('node 33')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="216.196468" y="317.113868" style="fill: #dddfed" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-34"
onclick="(()=&gt;{console.log('node 34')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="419.504487" y="334.14189" style="fill: #fdc57f" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-35"
onclick="(()=&gt;{console.log('node 35')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="321.071206" y="134.027026" style="fill: #fee0b6" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-36"
onclick="(()=&gt;{console.log('node 36')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="366.514998" y="474.152727" style="fill: #fdbd6e" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-37"
onclick="(()=&gt;{console.log('node 37')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="208.453065" y="361.465389" style="fill: #cccbe3" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-38"
onclick="(()=&gt;{console.log('node 38')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="236.649711" y="206.251683" style="fill: #faecd7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-39"
onclick="(()=&gt;{console.log('node 39')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="298.808991" y="236.296491" style="fill: #fdc57f" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-40"
onclick="(()=&gt;{console.log('node 40')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="181.944484" y="318.835753" style="fill: #f9f0e4" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-41"
onclick="(()=&gt;{console.log('node 41')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="367.134249" y="434.454954" style="fill: #f6f6f7" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-42"
onclick="(()=&gt;{console.log('node 42')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="422.276969" y="403.842356" style="fill: #fdbf72" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-43"
onclick="(()=&gt;{console.log('node 43')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="321.091057" y="403.95329" style="fill: #f8f5f1" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-44"
onclick="(()=&gt;{console.log('node 44')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="162.445269" y="355.484449" style="fill: #eaebf2" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-45"
onclick="(()=&gt;{console.log('node 45')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="341.073251" y="272.287852" style="fill: #f6aa4f" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-46"
onclick="(()=&gt;{console.log('node 46')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="389.299516" y="416.267064" style="fill: #de8013" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-47"
onclick="(()=&gt;{console.log('node 47')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="213.931911" y="434.927829" style="fill: #fbb55e" />
</g>
<g clip-path="url(#pd42c8a995e)" id="beatrice-node-male-48"
onclick="(()=&gt;{console.log('node 48')})()" class="beatrice-node-pointer">
<use xlink:href="#C0_0_3858269516" x="436.061109" y="363.566053" style="fill: #ebecf3" />
</g>
</g>
<g id="beatrice-text-male-0" onclick="(()=&gt;{console.log('text 0 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(379.30079 338.694041) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-31"
d="M 750 831 L 1813 831 L 1813 3847 L 722 3622 L 722 4441 L 1806 4666 L 2950 4666 L 2950 831 L 4013 831 L 4013 0 L 750 0 L 750 831 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
</g>
</g>
</g>
<g id="beatrice-text-male-1" onclick="(()=&gt;{console.log('text 1 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(389.387885 299.228722) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-33"
d="M 2981 2516 Q 3453 2394 3698 2092 Q 3944 1791 3944 1325 Q 3944 631 3412 270 Q 2881 -91 1863 -91 Q 1503 -91 1142 -33 Q 781 25 428 141 L 428 1069 Q 766 900 1098 814 Q 1431 728 1753 728 Q 2231 728 2486 893 Q 2741 1059 2741 1369 Q 2741 1688 2480 1852 Q 2219 2016 1709 2016 L 1228 2016 L 1228 2791 L 1734 2791 Q 2188 2791 2409 2933 Q 2631 3075 2631 3366 Q 2631 3634 2415 3781 Q 2200 3928 1806 3928 Q 1516 3928 1219 3862 Q 922 3797 628 3669 L 628 4550 Q 984 4650 1334 4700 Q 1684 4750 2022 4750 Q 2931 4750 3382 4451 Q 3834 4153 3834 3553 Q 3834 3144 3618 2883 Q 3403 2622 2981 2516 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
</g>
</g>
</g>
<g id="beatrice-text-male-2" onclick="(()=&gt;{console.log('text 2 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(391.41758 187.661092) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-35"
d="M 678 4666 L 3669 4666 L 3669 3781 L 1638 3781 L 1638 3059 Q 1775 3097 1914 3117 Q 2053 3138 2203 3138 Q 3056 3138 3531 2711 Q 4006 2284 4006 1522 Q 4006 766 3489 337 Q 2972 -91 2053 -91 Q 1656 -91 1267 -14 Q 878 63 494 219 L 494 1166 Q 875 947 1217 837 Q 1559 728 1863 728 Q 2300 728 2551 942 Q 2803 1156 2803 1522 Q 2803 1891 2551 2103 Q 2300 2316 1863 2316 Q 1603 2316 1309 2248 Q 1016 2181 678 2041 L 678 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-35" />
</g>
</g>
</g>
<g id="beatrice-text-male-3" onclick="(()=&gt;{console.log('text 3 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(162.43958 249.864438) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-36"
d="M 2316 2303 Q 2000 2303 1842 2098 Q 1684 1894 1684 1484 Q 1684 1075 1842 870 Q 2000 666 2316 666 Q 2634 666 2792 870 Q 2950 1075 2950 1484 Q 2950 1894 2792 2098 Q 2634 2303 2316 2303 z M 3803 4544 L 3803 3681 Q 3506 3822 3243 3889 Q 2981 3956 2731 3956 Q 2194 3956 1894 3657 Q 1594 3359 1544 2772 Q 1750 2925 1990 3001 Q 2231 3078 2516 3078 Q 3231 3078 3670 2659 Q 4109 2241 4109 1563 Q 4109 813 3618 361 Q 3128 -91 2303 -91 Q 1394 -91 895 523 Q 397 1138 397 2266 Q 397 3422 980 4083 Q 1563 4744 2578 4744 Q 2900 4744 3203 4694 Q 3506 4644 3803 4544 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-36" />
</g>
</g>
</g>
<g id="beatrice-text-male-4" onclick="(()=&gt;{console.log('text 4 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(358.71135 398.663421) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-39"
d="M 641 103 L 641 966 Q 928 831 1190 764 Q 1453 697 1709 697 Q 2247 697 2547 995 Q 2847 1294 2900 1881 Q 2688 1725 2447 1647 Q 2206 1569 1925 1569 Q 1209 1569 770 1986 Q 331 2403 331 3084 Q 331 3838 820 4291 Q 1309 4744 2131 4744 Q 3044 4744 3544 4128 Q 4044 3513 4044 2388 Q 4044 1231 3459 570 Q 2875 -91 1856 -91 Q 1528 -91 1228 -42 Q 928 6 641 103 z M 2125 2350 Q 2441 2350 2600 2554 Q 2759 2759 2759 3169 Q 2759 3575 2600 3781 Q 2441 3988 2125 3988 Q 1809 3988 1650 3781 Q 1491 3575 1491 3169 Q 1491 2759 1650 2554 Q 1809 2350 2125 2350 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-39" />
</g>
</g>
</g>
<g id="beatrice-text-male-5" onclick="(()=&gt;{console.log('text 5 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(283.349879 117.767448) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-6" onclick="(()=&gt;{console.log('text 6 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(301.375385 350.124742) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-32"
d="M 1844 884 L 3897 884 L 3897 0 L 506 0 L 506 884 L 2209 2388 Q 2438 2594 2547 2791 Q 2656 2988 2656 3200 Q 2656 3528 2436 3728 Q 2216 3928 1850 3928 Q 1569 3928 1234 3808 Q 900 3688 519 3450 L 519 4475 Q 925 4609 1322 4679 Q 1719 4750 2100 4750 Q 2938 4750 3402 4381 Q 3866 4013 3866 3353 Q 3866 2972 3669 2642 Q 3472 2313 2841 1759 L 1844 884 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-7" onclick="(()=&gt;{console.log('text 7 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(388.046698 374.967662) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-8" onclick="(()=&gt;{console.log('text 8 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(303.363625 192.113337) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-30"
d="M 2944 2338 Q 2944 3213 2780 3570 Q 2616 3928 2228 3928 Q 1841 3928 1675 3570 Q 1509 3213 1509 2338 Q 1509 1453 1675 1090 Q 1841 728 2228 728 Q 2613 728 2778 1090 Q 2944 1453 2944 2338 z M 4147 2328 Q 4147 1169 3647 539 Q 3147 -91 2228 -91 Q 1306 -91 806 539 Q 306 1169 306 2328 Q 306 3491 806 4120 Q 1306 4750 2228 4750 Q 3147 4750 3647 4120 Q 4147 3491 4147 2328 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-9" onclick="(()=&gt;{console.log('text 9 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(205.455661 289.031269) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-10" onclick="(()=&gt;{console.log('text 10 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(318.115269 306.990997) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-11" onclick="(()=&gt;{console.log('text 11 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(459.755142 293.508014) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-12" onclick="(()=&gt;{console.log('text 12 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(161.065175 271.9803) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-38"
d="M 2228 2088 Q 1891 2088 1709 1903 Q 1528 1719 1528 1375 Q 1528 1031 1709 848 Q 1891 666 2228 666 Q 2563 666 2741 848 Q 2919 1031 2919 1375 Q 2919 1722 2741 1905 Q 2563 2088 2228 2088 z M 1350 2484 Q 925 2613 709 2878 Q 494 3144 494 3541 Q 494 4131 934 4440 Q 1375 4750 2228 4750 Q 3075 4750 3515 4442 Q 3956 4134 3956 3541 Q 3956 3144 3739 2878 Q 3522 2613 3097 2484 Q 3572 2353 3814 2058 Q 4056 1763 4056 1313 Q 4056 619 3595 264 Q 3134 -91 2228 -91 Q 1319 -91 855 264 Q 391 619 391 1313 Q 391 1763 633 2058 Q 875 2353 1350 2484 z M 1631 3419 Q 1631 3141 1786 2991 Q 1941 2841 2228 2841 Q 2509 2841 2662 2991 Q 2816 3141 2816 3419 Q 2816 3697 2662 3845 Q 2509 3994 2228 3994 Q 1941 3994 1786 3844 Q 1631 3694 1631 3419 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-32" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-13" onclick="(()=&gt;{console.log('text 13 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(244.173583 110.918523) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-14" onclick="(()=&gt;{console.log('text 14 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(233.467625 161.664737) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-15" onclick="(()=&gt;{console.log('text 15 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(270.491369 193.884188) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-16" onclick="(()=&gt;{console.log('text 16 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(181.971765 226.625792) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-34"
d="M 2356 3675 L 1038 1722 L 2356 1722 L 2356 3675 z M 2156 4666 L 3494 4666 L 3494 1722 L 4159 1722 L 4159 850 L 3494 850 L 3494 0 L 2356 0 L 2356 850 L 288 850 L 288 1881 L 2156 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-17" onclick="(()=&gt;{console.log('text 17 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(225.063335 351.712921) scale(0.12 -0.12)">
<defs>
<path id="DejaVuSans-Bold-37"
d="M 428 4666 L 3944 4666 L 3944 3988 L 2125 0 L 953 0 L 2675 3781 L 428 3781 L 428 4666 z "
transform="scale(0.015625)" />
</defs>
<use xlink:href="#DejaVuSans-Bold-33" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-18" onclick="(()=&gt;{console.log('text 18 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(113.946108 355.813803) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-19" onclick="(()=&gt;{console.log('text 19 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(150.275227 403.77299) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-20" onclick="(()=&gt;{console.log('text 20 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(206.056148 247.886269) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-21" onclick="(()=&gt;{console.log('text 21 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(256.219988 226.341346) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-22" onclick="(()=&gt;{console.log('text 22 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(212.447115 398.180721) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-23" onclick="(()=&gt;{console.log('text 23 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(335.953598 169.601466) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-24" onclick="(()=&gt;{console.log('text 24 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(232.971874 258.553808) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-25" onclick="(()=&gt;{console.log('text 25 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(248.771502 299.468132) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-34" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-26" onclick="(()=&gt;{console.log('text 26 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(199.213878 206.324585) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-27" onclick="(()=&gt;{console.log('text 27 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(444.964679 332.520349) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-32" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-28" onclick="(()=&gt;{console.log('text 28 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(341.774186 339.623355) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-35" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-29" onclick="(()=&gt;{console.log('text 29 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(278.831389 312.87527) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-36" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-30" onclick="(()=&gt;{console.log('text 30 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(279.080561 152.246589) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-31" onclick="(()=&gt;{console.log('text 31 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(273.529238 281.158194) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-32" onclick="(()=&gt;{console.log('text 32 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(292.28304 437.124218) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-33" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-33" onclick="(()=&gt;{console.log('text 33 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(207.847093 320.425118) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-34" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-34" onclick="(()=&gt;{console.log('text 34 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(411.155112 337.45314) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-35" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-35" onclick="(()=&gt;{console.log('text 35 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(312.721831 137.338276) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-36" onclick="(()=&gt;{console.log('text 36 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(358.165623 477.463977) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-37" onclick="(()=&gt;{console.log('text 37 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(200.10369 364.776639) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-38" onclick="(()=&gt;{console.log('text 38 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(228.300336 209.562933) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-37" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-39" onclick="(()=&gt;{console.log('text 39 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(290.459616 239.607741) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-40" onclick="(()=&gt;{console.log('text 40 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(173.595109 322.147003) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-31" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-41" onclick="(()=&gt;{console.log('text 41 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(358.784874 437.766204) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-36" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-42" onclick="(()=&gt;{console.log('text 42 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(413.927594 407.153606) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-43" onclick="(()=&gt;{console.log('text 43 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(312.741682 407.26454) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-44" onclick="(()=&gt;{console.log('text 44 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(154.095894 358.795699) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-38" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-45" onclick="(()=&gt;{console.log('text 45 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(332.723876 275.599102) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-37" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-46" onclick="(()=&gt;{console.log('text 46 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(380.950141 419.578314) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-38" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-47" onclick="(()=&gt;{console.log('text 47 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(205.582536 438.239079) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-39" />
<use xlink:href="#DejaVuSans-Bold-39" x="69.580078" />
</g>
</g>
</g>
<g id="beatrice-text-male-48" onclick="(()=&gt;{console.log('text 48 clicked')})()"
class="beatrice-text-pointer">
<g clip-path="url(#pd42c8a995e)">
<g transform="translate(423.537047 366.877303) scale(0.12 -0.12)">
<use xlink:href="#DejaVuSans-Bold-31" />
<use xlink:href="#DejaVuSans-Bold-30" x="69.580078" />
<use xlink:href="#DejaVuSans-Bold-30" x="139.160156" />
</g>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="pd42c8a995e">
<rect x="85.985534" y="69.12" width="418.428931" height="443.52" />
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,30 @@
{
"type": "demo",
"id": "RVC",
"front": {
"modelSlotControl": [
{
"name": "headerArea",
"options": {
"mainTitle": "Realtime Voice Changer Client",
"subTitle": ""
}
},
{
"name": "modelSlotArea",
"options": {}
},
{
"name": "characterArea",
"options": {}
},
{
"name": "configArea",
"options": {
"detectors": ["dio", "harvest", "crepe", "crepe_full", "crepe_tiny", "rmvpe", "rmvpe_onnx", "fcpe"],
"inputChunkNums": [1, 2, 4, 6, 8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 2048, 4096, 8192, 16384]
}
}
]
}
}

View File

@ -0,0 +1,30 @@
{
"type": "demo",
"id": "RVC",
"front": {
"modelSlotControl": [
{
"name": "headerArea",
"options": {
"mainTitle": "Realtime Voice Changer Client",
"subTitle": "for RVC"
}
},
{
"name": "modelSlotArea",
"options": {}
},
{
"name": "characterArea",
"options": {}
},
{
"name": "configArea",
"options": {
"detectors": ["dio", "harvest", "crepe"],
"inputChunkNums": [8, 16, 24, 32, 40, 48, 64, 80, 96, 112, 128, 192, 256, 320, 384, 448, 512, 576, 640, 704, 768, 832, 896, 960, 1024, 2048]
}
}
]
}
}

View File

@ -0,0 +1 @@
onnxdirectML-cuda

View File

@ -0,0 +1 @@
web

View File

@ -0,0 +1 @@
-.-.-.-

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-folder"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg>

After

Width:  |  Height:  |  Size: 311 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-tool"><path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"></path></svg>

After

Width:  |  Height:  |  Size: 386 B

View File

@ -0,0 +1 @@
{}

Binary file not shown.

View File

@ -0,0 +1,40 @@
[
{ "mode": "normal", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "normal", "z_index": 1, "number": 50, "layer_path": "ROOT_!目_*通常" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*通常→" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*∩∩" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "normal", "z_index": 2, "number": 80, "layer_path": "ROOT_!口_*にこ" },
{ "mode": "normal", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*おすまし" },
{ "mode": "normal", "z_index": 3, "number": 100, "layer_path": "ROOT_!眉_*平行" },
{ "mode": "normal", "z_index": 3, "number": 100, "layer_path": "ROOT_!眉_*通常" },
{ "mode": "normal", "z_index": 4, "number": 100, "layer_path": "ROOT_表情_なし" },
{ "mode": "normal", "z_index": 4, "number": 100, "layer_path": "ROOT_表情_赤面" },
{ "mode": "normal", "z_index": 5, "number": 100, "layer_path": "ROOT_漫符_なし" },
{ "mode": "talking", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "talking", "z_index": 1, "number": 50, "layer_path": "ROOT_!目_*通常" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*通常→" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*∩∩" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*お" },
{ "mode": "talking", "z_index": 2, "number": 5, "layer_path": "ROOT_!口_*え" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_* -" },
{ "mode": "talking", "z_index": 2, "number": 5, "layer_path": "ROOT_!口_*う" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*にこ" },
{ "mode": "talking", "z_index": 3, "number": 20, "layer_path": "ROOT_!眉_*平行" },
{ "mode": "talking", "z_index": 3, "number": 40, "layer_path": "ROOT_!眉_*通常" },
{ "mode": "talking", "z_index": 3, "number": 40, "layer_path": "ROOT_!眉_*ドヤ" },
{ "mode": "talking", "z_index": 4, "number": 20, "layer_path": "ROOT_表情_なし" },
{ "mode": "talking", "z_index": 4, "number": 100, "layer_path": "ROOT_表情_赤面" },
{ "mode": "talking", "z_index": 5, "number": 10, "layer_path": "ROOT_漫符_なし" },
{ "mode": "talking", "z_index": 5, "number": 100, "layer_path": "ROOT_漫符_*♪" },
{ "mode": "talking", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*" },
{ "mode": "talking", "z_index": 2, "number": 1, "layer_path": "ROOT_!口_*え" },
{ "mode": "talking", "z_index": 3, "number": 1, "layer_path": "ROOT_!眉_*平行" },
{ "mode": "talking", "z_index": 4, "number": 1, "layer_path": "ROOT_表情_なし" },
{ "mode": "talking", "z_index": 5, "number": 1, "layer_path": "ROOT_漫符_なし" }
]

View File

@ -0,0 +1,6 @@
{
"charaName": "あみたろ",
"psdFile": "/assets/settings/image.psd",
"motionFile": "/assets/settings/motion.json",
"motionSpeedRate": 1
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,14 @@
[
{ "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" },
{ "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" },
{ "mode": "talking", "z_index": 0, "number": 5, "layer_path": "ROOT_talk2" },
{ "mode": "talking", "z_index": 0, "number": 10, "layer_path": "ROOT_talk1" },
{ "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u2" },
{ "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u3" },
{ "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u2" },
{ "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 4, "layer_path": "ROOT_talk-u4" }
]

View File

@ -0,0 +1,6 @@
{
"charaName": "​黄琴海月",
"psdFile": "/assets/settings/image.psd",
"motionFile": "/assets/settings/motion.json",
"motionSpeedRate": 1
}

Binary file not shown.

View File

@ -0,0 +1,4 @@
[
{ "mode": "normal", "z_index": 0, "number": 10, "layer_path": "ROOT_レイヤー2" },
{ "mode": "talking", "z_index": 0, "number": 10, "layer_path": "ROOT_レイヤー1" }
]

View File

@ -0,0 +1,6 @@
{
"charaName": "黄琴まひろ",
"psdFile": "/assets/settings/image.psd",
"motionFile": "/assets/settings/motion.json",
"motionSpeedRate": 4
}

View File

@ -0,0 +1,40 @@
[
{ "mode": "normal", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "normal", "z_index": 1, "number": 50, "layer_path": "ROOT_!目_*通常" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*通常→" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*∩∩" },
{ "mode": "normal", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "normal", "z_index": 2, "number": 80, "layer_path": "ROOT_!口_*にこ" },
{ "mode": "normal", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*おすまし" },
{ "mode": "normal", "z_index": 3, "number": 100, "layer_path": "ROOT_!眉_*平行" },
{ "mode": "normal", "z_index": 3, "number": 100, "layer_path": "ROOT_!眉_*通常" },
{ "mode": "normal", "z_index": 4, "number": 100, "layer_path": "ROOT_表情_なし" },
{ "mode": "normal", "z_index": 4, "number": 100, "layer_path": "ROOT_表情_赤面" },
{ "mode": "normal", "z_index": 5, "number": 100, "layer_path": "ROOT_漫符_なし" },
{ "mode": "talking", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "talking", "z_index": 1, "number": 50, "layer_path": "ROOT_!目_*通常" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*通常→" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*∩∩" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*お" },
{ "mode": "talking", "z_index": 2, "number": 5, "layer_path": "ROOT_!口_*え" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_* -" },
{ "mode": "talking", "z_index": 2, "number": 5, "layer_path": "ROOT_!口_*う" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*にこ" },
{ "mode": "talking", "z_index": 3, "number": 20, "layer_path": "ROOT_!眉_*平行" },
{ "mode": "talking", "z_index": 3, "number": 40, "layer_path": "ROOT_!眉_*通常" },
{ "mode": "talking", "z_index": 3, "number": 40, "layer_path": "ROOT_!眉_*ドヤ" },
{ "mode": "talking", "z_index": 4, "number": 20, "layer_path": "ROOT_表情_なし" },
{ "mode": "talking", "z_index": 4, "number": 100, "layer_path": "ROOT_表情_赤面" },
{ "mode": "talking", "z_index": 5, "number": 10, "layer_path": "ROOT_漫符_なし" },
{ "mode": "talking", "z_index": 5, "number": 100, "layer_path": "ROOT_漫符_*♪" },
{ "mode": "talking", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*" },
{ "mode": "talking", "z_index": 2, "number": 1, "layer_path": "ROOT_!口_*え" },
{ "mode": "talking", "z_index": 3, "number": 1, "layer_path": "ROOT_!眉_*平行" },
{ "mode": "talking", "z_index": 4, "number": 1, "layer_path": "ROOT_表情_なし" },
{ "mode": "talking", "z_index": 5, "number": 1, "layer_path": "ROOT_漫符_なし" }
]

View File

@ -0,0 +1,6 @@
{
"charaName": "あみたろ",
"psdFile": "/assets/settings/image.psd",
"motionFile": "/assets/settings/motion.json",
"motionSpeedRate": 1
}

Binary file not shown.

View File

@ -0,0 +1,25 @@
[
{ "mode": "normal", "z_index": 0, "number": 10, "layer_path": "ROOT_!体_!体 ※選択肢なし" },
{ "mode": "normal", "z_index": 1, "number": 200, "layer_path": "ROOT_!右腕_*右手を下げる" },
{ "mode": "normal", "z_index": 1, "number": 40, "layer_path": "ROOT_!右腕_*右手を口に当てる" },
{ "mode": "normal", "z_index": 2, "number": 10, "layer_path": "ROOT_!左腕_*左手を下げる" },
{ "mode": "normal", "z_index": 3, "number": 10, "layer_path": "ROOT_!髪おさげ_!髪(おさげ) ※選択肢なし" },
{ "mode": "normal", "z_index": 4, "number": 10, "layer_path": "ROOT_!口 _*口を閉じて微笑む" },
{ "mode": "normal", "z_index": 5, "number": 10, "layer_path": "ROOT_!頬 _*通常" },
{ "mode": "normal", "z_index": 6, "number": 10, "layer_path": "ROOT_!目_*目を少し細める ★デフォルト" },
{ "mode": "normal", "z_index": 7, "number": 100, "layer_path": "ROOT_!眉 _*通常眉" },
{ "mode": "normal", "z_index": 7, "number": 10, "layer_path": "ROOT_!眉 _*通常眉:少し下げ" },
{ "mode": "talking", "z_index": 0, "number": 10, "layer_path": "ROOT_!体_!体 ※選択肢なし" },
{ "mode": "talking", "z_index": 1, "number": 200, "layer_path": "ROOT_!右腕_*右手を下げる" },
{ "mode": "talking", "z_index": 1, "number": 40, "layer_path": "ROOT_!右腕_*右手を口に当てる" },
{ "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!左腕_*左手を下げる" },
{ "mode": "talking", "z_index": 3, "number": 10, "layer_path": "ROOT_!髪おさげ_!髪(おさげ) ※選択肢なし" },
{ "mode": "talking", "z_index": 4, "number": 3, "layer_path": "ROOT_!口 _*口を閉じて微笑む" },
{ "mode": "talking", "z_index": 4, "number": 3, "layer_path": "ROOT_!口 _*小さく笑う" },
{ "mode": "talking", "z_index": 4, "number": 3, "layer_path": "ROOT_!口 _*大きく笑う" },
{ "mode": "talking", "z_index": 5, "number": 10, "layer_path": "ROOT_!頬 _*通常" },
{ "mode": "talking", "z_index": 6, "number": 10, "layer_path": "ROOT_!目_*目を少し細める ★デフォルト" },
{ "mode": "talking", "z_index": 7, "number": 100, "layer_path": "ROOT_!眉 _*通常眉" },
{ "mode": "talking", "z_index": 7, "number": 10, "layer_path": "ROOT_!眉 _*通常眉:少し下げ" }
]

View File

@ -0,0 +1,6 @@
{
"charaName": "つくよみちゃん",
"psdFile": "/assets/settings/image.psd",
"motionFile": "/assets/settings/motion.json",
"motionSpeedRate": 4
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -1,56 +1,138 @@
import * as React from "react";
import { createRoot } from "react-dom/client";
import "./css/App.css"
import { useMemo, } from "react";
import { useMicrophoneOptions } from "./100_options_microphone";
import { library } from "@fortawesome/fontawesome-svg-core";
import { fas } from "@fortawesome/free-solid-svg-icons";
import { far } from "@fortawesome/free-regular-svg-icons";
import { fab } from "@fortawesome/free-brands-svg-icons";
import { ErrorInfo, useEffect, useMemo, useState } from "react";
import "./css/App.css";
import ErrorBoundary from "./001_provider/900_ErrorBoundary";
import { AppStateProvider } from "./001_provider/001_AppStateProvider";
import { AppRootProvider, useAppRoot } from "./001_provider/001_AppRootProvider";
import { useIndexedDB } from "@dannadori/voice-changer-client-js";
import { Demo } from "./components/demo/010_Demo";
import { useMessageBuilder } from "./hooks/useMessageBuilder";
import { removeDB as webDBRemove } from "@dannadori/voice-changer-js";
library.add(fas, far, fab);
const container = document.getElementById("app")!;
const root = createRoot(container);
const App = () => {
const { appGuiSettingState } = useAppRoot();
const front = useMemo(() => {
if (appGuiSettingState.appGuiSetting.type == "demo") {
return <Demo></Demo>;
} else {
return <>unknown gui type. {appGuiSettingState.appGuiSetting.type}</>;
}
}, [appGuiSettingState.appGuiSetting.type]);
const { voiceChangerSetting } = useMicrophoneOptions()
return <>{front}</>;
};
const onClearSettingClicked = async () => {
//@ts-ignore
await chrome.storage.local.clear();
//@ts-ignore
await chrome.storage.sync.clear();
const AppStateWrapper = () => {
const { appGuiSettingState, getGUISetting } = useAppRoot();
const messageBuilderState = useMessageBuilder();
// エラーメッセージ登録
useMemo(() => {
messageBuilderState.setMessage(__filename, "Problem", { ja: "ちょっと問題が起きたみたいです。", en: "Looks like there's a bit of a problem." });
messageBuilderState.setMessage(__filename, "Problem-sub1", { ja: "このアプリで管理している情報をクリアすると回復する場合があります。", en: "" });
messageBuilderState.setMessage(__filename, "Problem-sub2", { ja: "下記のボタンを押して情報をクリアします。", en: "If you clear the information being managed by this app, it may be recoverable." });
messageBuilderState.setMessage(__filename, "Problem-action1", { ja: "アプリを初期化", en: "Initialize" });
messageBuilderState.setMessage(__filename, "Problem-action2", { ja: "初期化せずリロード", en: "Reload without initialize" });
}, []);
location.reload()
}
// エラーバウンダリー設定
const [error, setError] = useState<{ error: Error; errorInfo: ErrorInfo | null; reason: any }>();
const { removeDB } = useIndexedDB({ clientType: null });
const clearRow = useMemo(() => {
const errorComponent = useMemo(() => {
const errorName = error?.error.name || "no error name";
const errorMessage = error?.error.message || "no error message";
const errorInfos = (error?.errorInfo?.componentStack || "no error stack").split("\n");
const reasonMessage = (error?.reason || "no reason").toString();
const reasonStack = (error?.reason.stack || "no stack").split("\n") as string[];
const onClearCacheClicked = async () => {
await removeDB();
await webDBRemove();
location.reload();
};
const onReloadClicked = () => {
location.reload();
};
return (
<>
<div className="body-row split-3-3-4 left-padding-1">
<div className="body-button-container">
<div className="body-button" onClick={onClearSettingClicked}>clear setting</div>
<div className="error-container">
<div className="top-error-message">{messageBuilderState.getMessage(__filename, "Problem")}</div>
<div className="top-error-description">
<p> {messageBuilderState.getMessage(__filename, "Problem-sub1")}</p>
<p> {messageBuilderState.getMessage(__filename, "Problem-sub2")}</p>
<p>
<button onClick={onClearCacheClicked}>{messageBuilderState.getMessage(__filename, "Problem-action1")}</button>
</p>
<p>
<button onClick={onReloadClicked}>{messageBuilderState.getMessage(__filename, "Problem-action2")}</button>
</p>
</div>
<div className="error-detail">
<div className="error-name">{errorName}</div>
<div className="error-message">{errorMessage}</div>
<div className="error-info-container">
{errorInfos.map((x) => {
return (
<div className="error-info-line" key={x}>
{x}
</div>
);
})}
</div>
<div className="body-item-text"></div>
<div className="body-item-text"></div>
</div>
</>
)
}, [])
return (
<div className="body">
<div className="body-row">
<div className="body-top-title">
Voice Changer Setting
<div className="error-detail">
<div className="error-name">{reasonMessage}</div>
<div className="error-message"></div>
<div className="error-info-container">
{reasonStack.map((x) => {
return (
<div className="error-info-line" key={x}>
{x}
</div>
);
})}
</div>
</div>
</div>
{clearRow}
{voiceChangerSetting}
<div>
<audio id="audio-output"></audio>
</div>
</div>
)
}
);
}, [error]);
const updateError = (error: Error, errorInfo: React.ErrorInfo | null, reason: any) => {
setError({ error, errorInfo, reason });
};
useEffect(() => {
const loadDefaultModelType = async () => {
getGUISetting();
};
loadDefaultModelType();
}, []);
if (!appGuiSettingState.guiSettingLoaded) {
return <>loading...</>;
} else {
return (
<ErrorBoundary fallback={errorComponent} onError={updateError}>
<AppStateProvider>
<App></App>
</AppStateProvider>
</ErrorBoundary>
);
}
};
root.render(
<App></App>
<AppRootProvider>
<AppStateWrapper></AppStateWrapper>
</AppRootProvider>,
);

View File

@ -0,0 +1,83 @@
import { useEffect, useState } from "react"
export type AppGuiSetting = {
type: "demo",
front: {
"modelSlotControl": GuiComponentSetting[],
}
}
export type GuiComponentSetting = {
"name": string,
"options": any
}
const InitialAppGuiDemoSetting: AppGuiSetting = {
type: "demo",
front: {
"modelSlotControl": []
}
}
export type AppGuiSettingState = {
appGuiSetting: AppGuiSetting
guiSettingLoaded: boolean
version: string
edition: string
}
export type AppGuiSettingStateAndMethod = AppGuiSettingState & {
getAppGuiSetting: (url: string) => Promise<void>
clearAppGuiSetting: () => void
}
export const useAppGuiSetting = (): AppGuiSettingStateAndMethod => {
const [guiSettingLoaded, setGuiSettingLoaded] = useState<boolean>(false)
const [appGuiSetting, setAppGuiSetting] = useState<AppGuiSetting>(InitialAppGuiDemoSetting)
const [version, setVersion] = useState<string>("")
const [edition, setEdition] = useState<string>("")
const getAppGuiSetting = async (url: string) => {
const res = await fetch(`${url}`, {
method: "GET",
})
const appSetting = await res.json() as AppGuiSetting
setAppGuiSetting(appSetting)
setGuiSettingLoaded(true)
}
const clearAppGuiSetting = () => {
setAppGuiSetting(InitialAppGuiDemoSetting)
setGuiSettingLoaded(false)
}
useEffect(() => {
const getVersionInfo = async () => {
const res = await fetch(`/assets/gui_settings/version.txt`, {
method: "GET",
})
const version = await res.text()
setVersion(version)
}
getVersionInfo()
}, [])
useEffect(() => {
const getVersionInfo = async () => {
const res = await fetch(`/assets/gui_settings/edition.txt`, {
method: "GET",
})
const edition = await res.text()
setEdition(edition)
}
getVersionInfo()
}, [])
return {
appGuiSetting,
guiSettingLoaded,
version,
edition,
getAppGuiSetting,
clearAppGuiSetting,
}
}

View File

@ -0,0 +1,45 @@
import { useEffect, useState } from "react"
export type AudioConfigState = {
audioContext: AudioContext | null
}
export const useAudioConfig = (): AudioConfigState => {
const [audioContext, setAudioContext] = useState<AudioContext | null>(null)
useEffect(() => {
const createAudioContext = () => {
const url = new URL(window.location.href);
const params = url.searchParams;
const sampleRate = params.get('sample_rate') || null
let ctx: AudioContext
if(sampleRate){
if(sampleRate == "default"){
console.log(`Sample rate: default`)
ctx = new AudioContext()
}else{
console.log(`Sample rate: ${sampleRate}`)
ctx = new AudioContext({ sampleRate: Number(sampleRate)})
}
}else{
console.log(`Sample rate: default(48000)`)
ctx = new AudioContext({ sampleRate: 48000})
}
console.log(ctx)
setAudioContext(ctx)
document.removeEventListener('touchstart', createAudioContext);
document.removeEventListener('mousedown', createAudioContext);
}
document.addEventListener('touchstart', createAudioContext, false);
document.addEventListener('mousedown', createAudioContext, false);
}, [])
const ret: AudioConfigState = {
audioContext
}
return ret
}

View File

@ -0,0 +1,23 @@
import { ClientState, useClient } from "@dannadori/voice-changer-client-js"
export type UseVCClientProps = {
audioContext: AudioContext | null
}
export type VCClientState = {
clientState: ClientState
}
export const useVCClient = (props: UseVCClientProps): VCClientState => {
const clientState = useClient({
audioContext: props.audioContext
})
const ret: VCClientState = {
clientState
}
return ret
}

View File

@ -0,0 +1,37 @@
import { useRef } from "react"
export type Message = {
file: string,
id: string,
message: { [lang: string]: string }
}
export type MessageBuilderStateAndMethod = {
setMessage: (file: string, id: string, message: { [lang: string]: string }) => void
getMessage: (file: string, id: string) => string
}
export const useMessageBuilder_old = (): MessageBuilderStateAndMethod => {
const messagesRef = useRef<Message[]>([])
const setMessage = (file: string, id: string, message: { [lang: string]: string }) => {
if (messagesRef.current.find(x => { return x.file == file && x.id == id })) {
console.warn("duplicate message is registerd", file, id, message)
} else {
messagesRef.current.push({ file, id, message })
}
}
const getMessage = (file: string, id: string) => {
let lang = window.navigator.language
if (lang != "ja") {
lang = "en"
}
console.log(messagesRef.current)
return messagesRef.current.find(x => { return x.file == file && x.id == id })?.message[lang] || "unknwon message"
}
return {
setMessage,
getMessage
}
}

View File

@ -0,0 +1,299 @@
import { ClientState, WebModelSlot } from "@dannadori/voice-changer-client-js";
import { VoiceChangerJSClientConfig, VoiceChangerJSClient, ProgressUpdateType, ProgreeeUpdateCallbcckInfo, VoiceChangerType, InputLengthKey, ResponseTimeInfo } from "@dannadori/voice-changer-js";
import { useEffect, useMemo, useRef, useState } from "react";
export type UseWebInfoProps = {
clientState: ClientState | null;
webEdition: boolean;
};
export const WebModelLoadingState = {
none: "none",
loading: "loading",
warmup: "warmup",
ready: "ready",
} as const;
export type WebModelLoadingState = (typeof WebModelLoadingState)[keyof typeof WebModelLoadingState];
export type VoiceChangerConfig = {
config: VoiceChangerJSClientConfig;
modelUrl: string;
portrait: string;
name: string;
termOfUse: string;
sampleRate: ModelSampleRateStr;
useF0: boolean;
inputLength: InputLengthKey;
progressCallback?: ((data: any) => void) | null;
};
export type WebInfoState = {
voiceChangerConfig: VoiceChangerConfig;
webModelLoadingState: WebModelLoadingState;
progressLoadPreprocess: number;
progressLoadVCModel: number;
progressWarmup: number;
webModelslot: WebModelSlot;
upkey: number;
responseTimeInfo: ResponseTimeInfo;
};
export type WebInfoStateAndMethod = WebInfoState & {
loadVoiceChanagerModel: () => Promise<void>;
setUpkey: (upkey: number) => void;
setVoiceChangerConfig: (voiceChangerType: VoiceChangerType, sampleRate: ModelSampleRateStr, useF0: boolean, inputLength: InputLengthKey) => void;
};
const ModelSampleRateStr = {
"40k": "40k",
"32k": "32k",
"16k": "16k",
} as const;
type ModelSampleRateStr = (typeof ModelSampleRateStr)[keyof typeof ModelSampleRateStr];
const noF0ModelUrl: { [modelType in VoiceChangerType]: { [inputLength in InputLengthKey]: { [sampleRate in ModelSampleRateStr]: string } } } = {
rvcv1: {
"24000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_nof0_24000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_nof0_24000.bin",
},
"16000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_nof0_16000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_nof0_16000.bin",
},
"12000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_nof0_12000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_nof0_12000.bin",
},
"8000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_nof0_8000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_nof0_8000.bin",
},
},
rvcv2: {
"24000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_nof0_24000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_nof0_24000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_nof0_24000.bin",
},
"16000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_nof0_16000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_nof0_16000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_nof0_16000.bin",
},
"12000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_nof0_12000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_nof0_12000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_nof0_12000.bin",
},
"8000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_nof0_8000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_nof0_8000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_nof0_8000.bin",
},
},
};
const f0ModelUrl: { [modelType in VoiceChangerType]: { [inputLength in InputLengthKey]: { [sampleRate in ModelSampleRateStr]: string } } } = {
rvcv1: {
"24000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_f0_24000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_f0_24000.bin",
},
"16000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_f0_16000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_f0_16000.bin",
},
"12000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_f0_12000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_f0_12000.bin",
},
"8000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_40k_f0_8000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv1_amitaro_v1_32k_f0_8000.bin",
},
},
rvcv2: {
"24000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_f0_24000.bin",
// "32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_f0_24000.bin",
"32k": "https://192.168.0.247:8080/models/rvcv2_exp_v2_32k_f0_24000.bin",
// "16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_f0_24000.bin",
// "16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/vctk/rvcv2_vctk_v2_16k_f0_24000.bin",
"16k": "https://192.168.0.247:8080/models/rvcv2_vctk_v2_16k_f0_24000.bin",
},
"16000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_f0_16000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_f0_16000.bin",
// "16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_f0_16000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/vctk/rvcv2_vctk_v2_16k_f0_16000.bin",
},
"12000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_f0_12000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_f0_12000.bin",
// "16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_f0_12000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/vctk/rvcv2_vctk_v2_16k_f0_16000.bin",
},
"8000": {
"40k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_40k_f0_8000.bin",
"32k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_32k_f0_8000.bin",
// "16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_f0_8000.bin",
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/vctk/rvcv2_vctk_v2_16k_f0_8000.bin",
},
},
};
export const useWebInfo = (props: UseWebInfoProps): WebInfoStateAndMethod => {
const initVoiceChangerType: VoiceChangerType = "rvcv2";
const initInputLength: InputLengthKey = "24000";
const initUseF0 = true;
const initSampleRate: ModelSampleRateStr = "32k";
const progressCallback = (data: ProgreeeUpdateCallbcckInfo) => {
if (data.progressUpdateType === ProgressUpdateType.loadPreprocessModel) {
setProgressLoadPreprocess(data.progress);
} else if (data.progressUpdateType === ProgressUpdateType.loadVCModel) {
setProgressLoadVCModel(data.progress);
} else if (data.progressUpdateType === ProgressUpdateType.checkResponseTime) {
setProgressWarmup(data.progress);
}
};
const generateVoiceChangerConfig = (voiceChangerType: VoiceChangerType, sampleRate: ModelSampleRateStr, useF0: boolean, inputLength: InputLengthKey) => {
let modelUrl;
if (useF0) {
modelUrl = f0ModelUrl[voiceChangerType][inputLength][sampleRate];
} else {
modelUrl = noF0ModelUrl[voiceChangerType][inputLength][sampleRate];
}
const config: VoiceChangerConfig = {
config: {
voiceChangerType: voiceChangerType,
inputLength: inputLength,
baseUrl: window.location.origin,
inputSamplingRate: 48000,
outputSamplingRate: 48000,
},
modelUrl: modelUrl,
portrait: "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/amitaro.png",
name: "あみたろ",
termOfUse: "https://huggingface.co/wok000/vcclient_model/raw/main/rvc/amitaro_contentvec_256/term_of_use.txt",
sampleRate: sampleRate,
useF0: useF0,
inputLength: inputLength,
progressCallback,
};
return config;
};
const [voiceChangerConfig, _setVoiceChangerConfig] = useState<VoiceChangerConfig>(generateVoiceChangerConfig(initVoiceChangerType, initSampleRate, initUseF0, initInputLength));
const [webModelLoadingState, setWebModelLoadingState] = useState<WebModelLoadingState>(WebModelLoadingState.none);
const [progressLoadPreprocess, setProgressLoadPreprocess] = useState<number>(0);
const [progressLoadVCModel, setProgressLoadVCModel] = useState<number>(0);
const [progressWarmup, setProgressWarmup] = useState<number>(0);
const [upkey, setUpkey] = useState<number>(0);
const [responseTimeInfo, setResponseTimeInfo] = useState<ResponseTimeInfo>({
responseTime: 0,
realDuration: 0,
rtf: 0,
});
const voiceChangerJSClient = useRef<VoiceChangerJSClient>();
const webModelslot: WebModelSlot = useMemo(() => {
return {
slotIndex: -1,
voiceChangerType: "WebModel",
name: voiceChangerConfig.name,
description: "",
credit: "",
termsOfUseUrl: voiceChangerConfig.termOfUse,
iconFile: voiceChangerConfig.portrait,
speakers: {},
defaultTune: 0,
modelType: "pyTorchRVCNono",
f0: voiceChangerConfig.useF0,
samplingRate: 0,
modelFile: "",
};
}, []);
const setVoiceChangerConfig = (voiceChangerType: VoiceChangerType, sampleRate: ModelSampleRateStr, useF0: boolean, inputLength: InputLengthKey) => {
const config = generateVoiceChangerConfig(voiceChangerType, sampleRate, useF0, inputLength);
_setVoiceChangerConfig(config);
};
// useEffect(() => {
// setVoiceChangerConfig({ ...voiceChangerConfig, progressCallback });
// }, []);
const loadVoiceChanagerModel = async () => {
if (!props.clientState) {
throw new Error("[useWebInfo] clientState is null");
}
if (!props.clientState.initialized) {
console.warn("[useWebInfo] clientState is not initialized yet");
return;
}
if (!props.webEdition) {
console.warn("[useWebInfo] this is not web edition");
return;
}
console.log("loadVoiceChanagerModel1", voiceChangerConfig);
setWebModelLoadingState("loading");
voiceChangerJSClient.current = new VoiceChangerJSClient();
await voiceChangerJSClient.current.initialize(voiceChangerConfig.config, voiceChangerConfig.modelUrl, voiceChangerConfig.progressCallback);
console.log("loadVoiceChanagerModel2");
// worm up
setWebModelLoadingState("warmup");
const warmupResult = await voiceChangerJSClient.current.checkResponseTime();
console.log("warmup result", warmupResult);
// check time
const responseTimeInfo = await voiceChangerJSClient.current.checkResponseTime();
console.log("responseTimeInfo", responseTimeInfo);
setResponseTimeInfo(responseTimeInfo);
props.clientState?.setInternalAudioProcessCallback({
processAudio: async (data: Uint8Array) => {
const audioF32 = new Float32Array(data.buffer);
const res = await voiceChangerJSClient.current!.convert(audioF32);
const audio = new Uint8Array(res[0].buffer);
if (res[1]) {
console.log("RESPONSE!", res[1]);
setResponseTimeInfo(res[1]);
}
return audio;
},
});
setWebModelLoadingState("ready");
};
useEffect(() => {
if (!voiceChangerJSClient.current) {
console.log("setupkey", voiceChangerJSClient.current);
return;
}
voiceChangerJSClient.current.setUpkey(upkey);
}, [upkey]);
useEffect(() => {
console.log("change voice ", voiceChangerConfig);
setProgressLoadPreprocess(0);
setProgressLoadVCModel(0);
setProgressWarmup(0);
loadVoiceChanagerModel();
}, [voiceChangerConfig, props.clientState?.initialized]);
return {
voiceChangerConfig,
webModelLoadingState,
progressLoadPreprocess,
progressLoadVCModel,
progressWarmup,
webModelslot,
upkey,
responseTimeInfo,
loadVoiceChanagerModel,
setUpkey,
setVoiceChangerConfig,
};
};

View File

@ -0,0 +1,38 @@
import React, { useContext } from "react";
import { ReactNode } from "react";
import { AppGuiSettingStateAndMethod, useAppGuiSetting } from "../001_globalHooks/001_useAppGuiSetting";
import { AudioConfigState, useAudioConfig } from "../001_globalHooks/001_useAudioConfig";
type Props = {
children: ReactNode;
};
type AppRootValue = {
audioContextState: AudioConfigState;
appGuiSettingState: AppGuiSettingStateAndMethod;
getGUISetting: () => Promise<void>;
};
const AppRootContext = React.createContext<AppRootValue | null>(null);
export const useAppRoot = (): AppRootValue => {
const state = useContext(AppRootContext);
if (!state) {
throw new Error("useAppState must be used within AppStateProvider");
}
return state;
};
export const AppRootProvider = ({ children }: Props) => {
const audioContextState = useAudioConfig();
const appGuiSettingState = useAppGuiSetting();
const getGUISetting = async () => {
await appGuiSettingState.getAppGuiSetting(`/assets/gui_settings/GUI.json`);
};
const providerValue: AppRootValue = {
audioContextState,
appGuiSettingState,
getGUISetting,
};
return <AppRootContext.Provider value={providerValue}>{children}</AppRootContext.Provider>;
};

View File

@ -0,0 +1,79 @@
import { ClientState } from "@dannadori/voice-changer-client-js";
import { VoiceChangerJSClient } from "@dannadori/voice-changer-js";
import React, { useContext, useEffect, useRef } from "react";
import { ReactNode } from "react";
import { useVCClient } from "../001_globalHooks/001_useVCClient";
import { useAppRoot } from "./001_AppRootProvider";
import { useMessageBuilder } from "../hooks/useMessageBuilder";
import { WebInfoStateAndMethod, useWebInfo } from "../001_globalHooks/100_useWebInfo";
type Props = {
children: ReactNode;
};
type AppStateValue = ClientState & {
audioContext: AudioContext;
initializedRef: React.MutableRefObject<boolean>;
webInfoState: WebInfoStateAndMethod;
webEdition: boolean;
};
const AppStateContext = React.createContext<AppStateValue | null>(null);
export const useAppState = (): AppStateValue => {
const state = useContext(AppStateContext);
if (!state) {
throw new Error("useAppState must be used within AppStateProvider");
}
return state;
};
export const AppStateProvider = ({ children }: Props) => {
const appRoot = useAppRoot();
const webEdition = appRoot.appGuiSettingState.edition.indexOf("web") >= 0;
const clientState = useVCClient({ audioContext: appRoot.audioContextState.audioContext });
const messageBuilderState = useMessageBuilder();
const webInfoState = useWebInfo({ clientState: clientState.clientState, webEdition: webEdition });
// const voiceChangerJSClient = useRef<VoiceChangerJSClient>();
useEffect(() => {
messageBuilderState.setMessage(__filename, "ioError", {
ja: "エラーが頻発しています。対象としているフレームワークのモデルがロードされているか確認してください。",
en: "Frequent errors occur. Please check if the model of the framework being targeted is loaded.",
});
}, []);
const initializedRef = useRef<boolean>(false);
useEffect(() => {
if (clientState.clientState.initialized) {
initializedRef.current = true;
clientState.clientState.getInfo();
// clientState.clientState.setVoiceChangerClientSetting({
// ...clientState.clientState.setting.voiceChangerClientSetting
// })
}
}, [clientState.clientState.initialized]);
useEffect(() => {
if (clientState.clientState.ioErrorCount > 100) {
alert(messageBuilderState.getMessage(__filename, "ioError"));
clientState.clientState.resetIoErrorCount();
}
}, [clientState.clientState.ioErrorCount]);
useEffect(() => {
if (appRoot.appGuiSettingState.edition.indexOf("web") >= 0 && clientState.clientState.initialized) {
clientState.clientState.setWorkletNodeSetting({ ...clientState.clientState.setting.workletNodeSetting, protocol: "internal" });
// webInfoState.loadVoiceChanagerModel(); // hook内でuseEffectでinvoke
}
}, [clientState.clientState.initialized]);
const providerValue: AppStateValue = {
audioContext: appRoot.audioContextState.audioContext!,
...clientState.clientState,
initializedRef,
webInfoState,
webEdition,
};
return <AppStateContext.Provider value={providerValue}>{children}</AppStateContext.Provider>;
};

Some files were not shown because too many files have changed in this diff Show More