modify animation setting, update supportting onnx for mmvc v.1.5.x

This commit is contained in:
wataru 2023-04-03 01:22:44 +09:00
parent 9718afaa0d
commit 586d83c550
40 changed files with 6933 additions and 6223 deletions

1
.gitignore vendored
View File

@ -26,6 +26,7 @@ server/model_so-vits-svc-40/
server/model_so-vits-svc-40_mahiro/ server/model_so-vits-svc-40_mahiro/
server/model_so-vits-svc-40_amitaro/ server/model_so-vits-svc-40_amitaro/
server/model_so-vits-svc-40_tsukuyomi/ server/model_so-vits-svc-40_tsukuyomi/
server/model_so-vits-svc-40_kikotokurage
model_DDSP-SVC/ model_DDSP-SVC/
server/model_sovits server/model_sovits
server/test server/test

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"@types/react": "^18.0.31", "@types/react": "^18.0.32",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.0.11",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
@ -51,7 +51,7 @@
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@dannadori/voice-changer-client-js": "^1.0.99", "@dannadori/voice-changer-client-js": "^1.0.101",
"@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0", "@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0", "@fortawesome/free-regular-svg-icons": "^6.4.0",

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"@types/react": "^18.0.31", "@types/react": "^18.0.32",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.0.11",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
@ -51,7 +51,7 @@
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@dannadori/voice-changer-client-js": "^1.0.99", "@dannadori/voice-changer-client-js": "^1.0.101",
"@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0", "@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0", "@fortawesome/free-regular-svg-icons": "^6.4.0",

View File

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

View File

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

View File

@ -2,13 +2,13 @@
{ "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" }, { "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" },
{ "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" }, { "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" },
{ "mode": "talking", "z_index": 0, "number": 40, "layer_path": "ROOT_normal1" }, { "mode": "talking", "z_index": 0, "number": 5, "layer_path": "ROOT_talk2" },
{ "mode": "talking", "z_index": 0, "number": 50, "layer_path": "ROOT_talk2" }, { "mode": "talking", "z_index": 0, "number": 10, "layer_path": "ROOT_talk1" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_talk1" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u2" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_normal2" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u1" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u3" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u2" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u3" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u2" },
{ "mode": "talking", "z_index": 0, "number": 40, "layer_path": "ROOT_talk-u4" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_normal1" } { "mode": "talking", "z_index": 0, "number": 4, "layer_path": "ROOT_talk-u4" }
] ]

View File

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

View File

@ -1,14 +1,40 @@
[ [
{ "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" }, { "mode": "normal", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" }, { "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": 40, "layer_path": "ROOT_normal1" }, { "mode": "talking", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "talking", "z_index": 0, "number": 50, "layer_path": "ROOT_talk2" }, { "mode": "talking", "z_index": 1, "number": 50, "layer_path": "ROOT_!目_*通常" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_talk1" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*通常→" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_normal2" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u1" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*∩∩" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u2" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u3" }, { "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*お" },
{ "mode": "talking", "z_index": 0, "number": 40, "layer_path": "ROOT_talk-u4" }, { "mode": "talking", "z_index": 2, "number": 5, "layer_path": "ROOT_!口_*え" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_normal1" } { "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

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

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"@types/react": "^18.0.31", "@types/react": "^18.0.32",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.0.11",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
@ -51,8 +51,8 @@
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@dannadori/psdanimator": "^1.0.17", "@dannadori/psdanimator": "^1.0.19",
"@dannadori/voice-changer-client-js": "^1.0.99", "@dannadori/voice-changer-client-js": "^1.0.101",
"@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0", "@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0", "@fortawesome/free-regular-svg-icons": "^6.4.0",

View File

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

View File

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

View File

@ -2,13 +2,13 @@
{ "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" }, { "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" },
{ "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" }, { "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" },
{ "mode": "talking", "z_index": 0, "number": 40, "layer_path": "ROOT_normal1" }, { "mode": "talking", "z_index": 0, "number": 5, "layer_path": "ROOT_talk2" },
{ "mode": "talking", "z_index": 0, "number": 50, "layer_path": "ROOT_talk2" }, { "mode": "talking", "z_index": 0, "number": 10, "layer_path": "ROOT_talk1" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_talk1" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u2" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_normal2" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u1" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u3" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u2" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u3" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u2" },
{ "mode": "talking", "z_index": 0, "number": 40, "layer_path": "ROOT_talk-u4" }, { "mode": "talking", "z_index": 0, "number": 11, "layer_path": "ROOT_talk-u1" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_normal1" } { "mode": "talking", "z_index": 0, "number": 4, "layer_path": "ROOT_talk-u4" }
] ]

View File

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

View File

@ -1,14 +1,40 @@
[ [
{ "mode": "normal", "z_index": 0, "number": 40, "layer_path": "ROOT_normal2" }, { "mode": "normal", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "normal", "z_index": 0, "number": 100, "layer_path": "ROOT_normal3" }, { "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": 40, "layer_path": "ROOT_normal1" }, { "mode": "talking", "z_index": 0, "number": 1, "layer_path": "ROOT_全身" },
{ "mode": "talking", "z_index": 0, "number": 50, "layer_path": "ROOT_talk2" }, { "mode": "talking", "z_index": 1, "number": 50, "layer_path": "ROOT_!目_*通常" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_talk1" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*通常→" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_normal2" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u1" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*∩∩" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u2" }, { "mode": "talking", "z_index": 1, "number": 1, "layer_path": "ROOT_!目_*微笑" },
{ "mode": "talking", "z_index": 0, "number": 110, "layer_path": "ROOT_talk-u3" }, { "mode": "talking", "z_index": 2, "number": 10, "layer_path": "ROOT_!口_*お" },
{ "mode": "talking", "z_index": 0, "number": 40, "layer_path": "ROOT_talk-u4" }, { "mode": "talking", "z_index": 2, "number": 5, "layer_path": "ROOT_!口_*え" },
{ "mode": "talking", "z_index": 0, "number": 100, "layer_path": "ROOT_normal1" } { "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

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

View File

@ -26,7 +26,7 @@ export const usePsdAnimation = (): PsdAnimationStateAndMethod => {
const canvas = document.getElementById(TSUKUYOMI_CANVAS) as HTMLCanvasElement const canvas = document.getElementById(TSUKUYOMI_CANVAS) as HTMLCanvasElement
// const c = generateConfig(psdFile, canvas, 640, 480, true) // const c = generateConfig(psdFile, canvas, 640, 480, true)
const c = generateConfig(psd, canvas, 640, 640, false) const c = generateConfig(psd, canvas, 640, 640, false)
c.processorURL = "https://cdn.jsdelivr.net/npm/@dannadori/psdanimator@1.0.17/dist/process.js" c.processorURL = "https://cdn.jsdelivr.net/npm/@dannadori/psdanimator@1.0.19/dist/process.js"
c.transfer = [c.canvas] c.transfer = [c.canvas]
await w.init(c) await w.init(c)
console.log("[psd animator] Initialized") console.log("[psd animator] Initialized")

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"@types/react": "^18.0.31", "@types/react": "^18.0.32",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.0.11",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
@ -51,7 +51,7 @@
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@dannadori/voice-changer-client-js": "^1.0.99", "@dannadori/voice-changer-client-js": "^1.0.101",
"@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0", "@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0", "@fortawesome/free-regular-svg-icons": "^6.4.0",

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"@types/react": "^18.0.31", "@types/react": "^18.0.32",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.0.11",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
@ -51,7 +51,7 @@
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@dannadori/voice-changer-client-js": "^1.0.99", "@dannadori/voice-changer-client-js": "^1.0.101",
"@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0", "@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0", "@fortawesome/free-regular-svg-icons": "^6.4.0",

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,7 +24,7 @@
"@babel/preset-react": "^7.18.6", "@babel/preset-react": "^7.18.6",
"@babel/preset-typescript": "^7.21.4", "@babel/preset-typescript": "^7.21.4",
"@types/node": "^18.15.11", "@types/node": "^18.15.11",
"@types/react": "^18.0.31", "@types/react": "^18.0.32",
"@types/react-dom": "^18.0.11", "@types/react-dom": "^18.0.11",
"autoprefixer": "^10.4.14", "autoprefixer": "^10.4.14",
"babel-loader": "^9.1.2", "babel-loader": "^9.1.2",
@ -51,7 +51,7 @@
"webpack-dev-server": "^4.13.2" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@dannadori/voice-changer-client-js": "^1.0.99", "@dannadori/voice-changer-client-js": "^1.0.101",
"@fortawesome/fontawesome-svg-core": "^6.4.0", "@fortawesome/fontawesome-svg-core": "^6.4.0",
"@fortawesome/free-brands-svg-icons": "^6.4.0", "@fortawesome/free-brands-svg-icons": "^6.4.0",
"@fortawesome/free-regular-svg-icons": "^6.4.0", "@fortawesome/free-regular-svg-icons": "^6.4.0",

View File

@ -1,16 +1,16 @@
{ {
"name": "@dannadori/voice-changer-client-js", "name": "@dannadori/voice-changer-client-js",
"version": "1.0.99", "version": "1.0.101",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@dannadori/voice-changer-client-js", "name": "@dannadori/voice-changer-client-js",
"version": "1.0.99", "version": "1.0.101",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"@types/readable-stream": "^2.3.15", "@types/readable-stream": "^2.3.15",
"amazon-chime-sdk-js": "^3.11.0", "amazon-chime-sdk-js": "^3.12.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"localforage": "^1.10.0", "localforage": "^1.10.0",
"react": "^18.2.0", "react": "^18.2.0",
@ -18,24 +18,24 @@
"socket.io-client": "^4.6.1" "socket.io-client": "^4.6.1"
}, },
"devDependencies": { "devDependencies": {
"@types/audioworklet": "^0.0.38", "@types/audioworklet": "^0.0.41",
"@types/node": "^18.15.0", "@types/node": "^18.15.11",
"@types/react": "18.0.28", "@types/react": "18.0.32",
"@types/react-dom": "18.0.11", "@types/react-dom": "18.0.11",
"eslint": "^8.36.0", "eslint": "^8.37.0",
"eslint-config-prettier": "^8.7.0", "eslint-config-prettier": "^8.8.0",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.32.2", "eslint-plugin-react": "^7.32.2",
"eslint-webpack-plugin": "^4.0.0", "eslint-webpack-plugin": "^4.0.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"prettier": "^2.8.4", "prettier": "^2.8.7",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
"rimraf": "^4.4.0", "rimraf": "^4.4.1",
"ts-loader": "^9.4.2", "ts-loader": "^9.4.2",
"typescript": "^4.9.5", "typescript": "^5.0.3",
"webpack": "^5.76.1", "webpack": "^5.77.0",
"webpack-cli": "^5.0.1", "webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1" "webpack-dev-server": "^4.13.2"
} }
}, },
"node_modules/@aws-crypto/ie11-detection": { "node_modules/@aws-crypto/ie11-detection": {
@ -1428,14 +1428,14 @@
} }
}, },
"node_modules/@eslint/eslintrc": { "node_modules/@eslint/eslintrc": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
"integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^9.5.0", "espree": "^9.5.1",
"globals": "^13.19.0", "globals": "^13.19.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
@ -1451,9 +1451,9 @@
} }
}, },
"node_modules/@eslint/js": { "node_modules/@eslint/js": {
"version": "8.36.0", "version": "8.37.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz",
"integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@ -1686,9 +1686,9 @@
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
}, },
"node_modules/@types/audioworklet": { "node_modules/@types/audioworklet": {
"version": "0.0.38", "version": "0.0.41",
"resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.38.tgz", "resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.41.tgz",
"integrity": "sha512-wChYxkstf8v8y6IFucqzZvKUMLvaXxHnY8Tjyi81AzhuP3ut7B4grzX2sxwbB+lowde8RvzFg1e8NGu5ui2qMg==", "integrity": "sha512-8BWffzGoSRz436IviQVPye75YYWfac4OKdcLgkZxb3APZxSmAOp2SMtsH1yuM1x57/z/J7bsm05Yq98Hzk1t/w==",
"dev": true "dev": true
}, },
"node_modules/@types/body-parser": { "node_modules/@types/body-parser": {
@ -1829,9 +1829,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/node": { "node_modules/@types/node": {
"version": "18.15.0", "version": "18.15.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.0.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
"integrity": "sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==" "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q=="
}, },
"node_modules/@types/prop-types": { "node_modules/@types/prop-types": {
"version": "15.7.5", "version": "15.7.5",
@ -1852,9 +1852,9 @@
"dev": true "dev": true
}, },
"node_modules/@types/react": { "node_modules/@types/react": {
"version": "18.0.28", "version": "18.0.32",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.32.tgz",
"integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "integrity": "sha512-gYGXdtPQ9Cj0w2Fwqg5/ak6BcK3Z15YgjSqtyDizWUfx7mQ8drs0NBUzRRsAdoFVTO8kJ8L2TL8Skm7OFPnLUw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/prop-types": "*", "@types/prop-types": "*",
@ -2259,9 +2259,9 @@
} }
}, },
"node_modules/amazon-chime-sdk-js": { "node_modules/amazon-chime-sdk-js": {
"version": "3.11.0", "version": "3.12.0",
"resolved": "https://registry.npmjs.org/amazon-chime-sdk-js/-/amazon-chime-sdk-js-3.11.0.tgz", "resolved": "https://registry.npmjs.org/amazon-chime-sdk-js/-/amazon-chime-sdk-js-3.12.0.tgz",
"integrity": "sha512-YBYnT/P2BxqcUoHvsjVbqKRmWnjC02ofz6DVANJXbaMEjZj5Ih55COFcYYJa0+0MPNMuvGDC6Z8PS+xjfjkgHg==", "integrity": "sha512-h71cPO67TO2ZkLlhyWyB7NDYf7abK7/aqOX8Ojju7jn+x3MZXUSmF0K9bdRHiII+7MILyK/7Yf8JmpcCswuq8Q==",
"dependencies": { "dependencies": {
"@aws-crypto/sha256-js": "^2.0.1", "@aws-crypto/sha256-js": "^2.0.1",
"@aws-sdk/client-chime-sdk-messaging": "^3.0.0", "@aws-sdk/client-chime-sdk-messaging": "^3.0.0",
@ -3230,15 +3230,15 @@
} }
}, },
"node_modules/eslint": { "node_modules/eslint": {
"version": "8.36.0", "version": "8.37.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz",
"integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@eslint/eslintrc": "^2.0.1", "@eslint/eslintrc": "^2.0.2",
"@eslint/js": "8.36.0", "@eslint/js": "8.37.0",
"@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@ -3249,8 +3249,8 @@
"doctrine": "^3.0.0", "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.1.1", "eslint-scope": "^7.1.1",
"eslint-visitor-keys": "^3.3.0", "eslint-visitor-keys": "^3.4.0",
"espree": "^9.5.0", "espree": "^9.5.1",
"esquery": "^1.4.2", "esquery": "^1.4.2",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
@ -3287,9 +3287,9 @@
} }
}, },
"node_modules/eslint-config-prettier": { "node_modules/eslint-config-prettier": {
"version": "8.7.0", "version": "8.8.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
"integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
"dev": true, "dev": true,
"bin": { "bin": {
"eslint-config-prettier": "bin/cli.js" "eslint-config-prettier": "bin/cli.js"
@ -3374,12 +3374,15 @@
} }
}, },
"node_modules/eslint-visitor-keys": { "node_modules/eslint-visitor-keys": {
"version": "3.3.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
"funding": {
"url": "https://opencollective.com/eslint"
} }
}, },
"node_modules/eslint-webpack-plugin": { "node_modules/eslint-webpack-plugin": {
@ -3407,14 +3410,14 @@
} }
}, },
"node_modules/espree": { "node_modules/espree": {
"version": "9.5.0", "version": "9.5.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
"integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"acorn": "^8.8.0", "acorn": "^8.8.0",
"acorn-jsx": "^5.3.2", "acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.3.0" "eslint-visitor-keys": "^3.4.0"
}, },
"engines": { "engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0" "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@ -4828,6 +4831,16 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/launch-editor": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz",
"integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==",
"dev": true,
"dependencies": {
"picocolors": "^1.0.0",
"shell-quote": "^1.7.3"
}
},
"node_modules/levn": { "node_modules/levn": {
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -5830,9 +5843,9 @@
} }
}, },
"node_modules/prettier": { "node_modules/prettier": {
"version": "2.8.4", "version": "2.8.7",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
"dev": true, "dev": true,
"bin": { "bin": {
"prettier": "bin-prettier.js" "prettier": "bin-prettier.js"
@ -6246,9 +6259,9 @@
} }
}, },
"node_modules/rimraf": { "node_modules/rimraf": {
"version": "4.4.0", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
"integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"glob": "^9.2.0" "glob": "^9.2.0"
@ -7179,16 +7192,16 @@
} }
}, },
"node_modules/typescript": { "node_modules/typescript": {
"version": "4.9.5", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==",
"dev": true, "dev": true,
"bin": { "bin": {
"tsc": "bin/tsc", "tsc": "bin/tsc",
"tsserver": "bin/tsserver" "tsserver": "bin/tsserver"
}, },
"engines": { "engines": {
"node": ">=4.2.0" "node": ">=12.20"
} }
}, },
"node_modules/ua-parser-js": { "node_modules/ua-parser-js": {
@ -7333,9 +7346,9 @@
} }
}, },
"node_modules/webpack": { "node_modules/webpack": {
"version": "5.76.1", "version": "5.77.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.77.0.tgz",
"integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", "integrity": "sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/eslint-scope": "^3.7.3", "@types/eslint-scope": "^3.7.3",
@ -7457,9 +7470,9 @@
} }
}, },
"node_modules/webpack-dev-server": { "node_modules/webpack-dev-server": {
"version": "4.11.1", "version": "4.13.2",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz",
"integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", "integrity": "sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@types/bonjour": "^3.5.9", "@types/bonjour": "^3.5.9",
@ -7481,6 +7494,7 @@
"html-entities": "^2.3.2", "html-entities": "^2.3.2",
"http-proxy-middleware": "^2.0.3", "http-proxy-middleware": "^2.0.3",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.1",
"launch-editor": "^2.6.0",
"open": "^8.0.9", "open": "^8.0.9",
"p-retry": "^4.5.0", "p-retry": "^4.5.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
@ -7490,7 +7504,7 @@
"sockjs": "^0.3.24", "sockjs": "^0.3.24",
"spdy": "^4.0.2", "spdy": "^4.0.2",
"webpack-dev-middleware": "^5.3.1", "webpack-dev-middleware": "^5.3.1",
"ws": "^8.4.2" "ws": "^8.13.0"
}, },
"bin": { "bin": {
"webpack-dev-server": "bin/webpack-dev-server.js" "webpack-dev-server": "bin/webpack-dev-server.js"
@ -7506,6 +7520,9 @@
"webpack": "^4.37.0 || ^5.0.0" "webpack": "^4.37.0 || ^5.0.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"webpack": {
"optional": true
},
"webpack-cli": { "webpack-cli": {
"optional": true "optional": true
} }
@ -7526,6 +7543,27 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/webpack-dev-server/node_modules/ws": {
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
"dev": true,
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/webpack-merge": { "node_modules/webpack-merge": {
"version": "5.8.0", "version": "5.8.0",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz",
@ -9083,14 +9121,14 @@
"dev": true "dev": true
}, },
"@eslint/eslintrc": { "@eslint/eslintrc": {
"version": "2.0.1", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.1.tgz", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.2.tgz",
"integrity": "sha512-eFRmABvW2E5Ho6f5fHLqgena46rOj7r7OKHYfLElqcBfGFHHpjBhivyi5+jOEQuSpdc/1phIZJlbC2te+tZNIw==", "integrity": "sha512-3W4f5tDUra+pA+FzgugqL2pRimUTDJWKr7BINqOpkZrC0uYI0NIc0/JFgBROCU07HR6GieA5m3/rsPIhDmCXTQ==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "^6.12.4", "ajv": "^6.12.4",
"debug": "^4.3.2", "debug": "^4.3.2",
"espree": "^9.5.0", "espree": "^9.5.1",
"globals": "^13.19.0", "globals": "^13.19.0",
"ignore": "^5.2.0", "ignore": "^5.2.0",
"import-fresh": "^3.2.1", "import-fresh": "^3.2.1",
@ -9100,9 +9138,9 @@
} }
}, },
"@eslint/js": { "@eslint/js": {
"version": "8.36.0", "version": "8.37.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.36.0.tgz", "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.37.0.tgz",
"integrity": "sha512-lxJ9R5ygVm8ZWgYdUweoq5ownDlJ4upvoWmO4eLxBYHdMo+vZ/Rx0EN6MbKWDJOSUGrqJy2Gt+Dyv/VKml0fjg==", "integrity": "sha512-x5vzdtOOGgFVDCUs81QRB2+liax8rFg3+7hqM+QhBG0/G3F1ZsoYl97UrqgHgQ9KKT7G6c4V+aTUCgu/n22v1A==",
"dev": true "dev": true
}, },
"@humanwhocodes/config-array": { "@humanwhocodes/config-array": {
@ -9298,9 +9336,9 @@
"integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==" "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg=="
}, },
"@types/audioworklet": { "@types/audioworklet": {
"version": "0.0.38", "version": "0.0.41",
"resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.38.tgz", "resolved": "https://registry.npmjs.org/@types/audioworklet/-/audioworklet-0.0.41.tgz",
"integrity": "sha512-wChYxkstf8v8y6IFucqzZvKUMLvaXxHnY8Tjyi81AzhuP3ut7B4grzX2sxwbB+lowde8RvzFg1e8NGu5ui2qMg==", "integrity": "sha512-8BWffzGoSRz436IviQVPye75YYWfac4OKdcLgkZxb3APZxSmAOp2SMtsH1yuM1x57/z/J7bsm05Yq98Hzk1t/w==",
"dev": true "dev": true
}, },
"@types/body-parser": { "@types/body-parser": {
@ -9441,9 +9479,9 @@
"dev": true "dev": true
}, },
"@types/node": { "@types/node": {
"version": "18.15.0", "version": "18.15.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.0.tgz", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz",
"integrity": "sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==" "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q=="
}, },
"@types/prop-types": { "@types/prop-types": {
"version": "15.7.5", "version": "15.7.5",
@ -9464,9 +9502,9 @@
"dev": true "dev": true
}, },
"@types/react": { "@types/react": {
"version": "18.0.28", "version": "18.0.32",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.32.tgz",
"integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "integrity": "sha512-gYGXdtPQ9Cj0w2Fwqg5/ak6BcK3Z15YgjSqtyDizWUfx7mQ8drs0NBUzRRsAdoFVTO8kJ8L2TL8Skm7OFPnLUw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/prop-types": "*", "@types/prop-types": "*",
@ -9819,9 +9857,9 @@
"requires": {} "requires": {}
}, },
"amazon-chime-sdk-js": { "amazon-chime-sdk-js": {
"version": "3.11.0", "version": "3.12.0",
"resolved": "https://registry.npmjs.org/amazon-chime-sdk-js/-/amazon-chime-sdk-js-3.11.0.tgz", "resolved": "https://registry.npmjs.org/amazon-chime-sdk-js/-/amazon-chime-sdk-js-3.12.0.tgz",
"integrity": "sha512-YBYnT/P2BxqcUoHvsjVbqKRmWnjC02ofz6DVANJXbaMEjZj5Ih55COFcYYJa0+0MPNMuvGDC6Z8PS+xjfjkgHg==", "integrity": "sha512-h71cPO67TO2ZkLlhyWyB7NDYf7abK7/aqOX8Ojju7jn+x3MZXUSmF0K9bdRHiII+7MILyK/7Yf8JmpcCswuq8Q==",
"requires": { "requires": {
"@aws-crypto/sha256-js": "^2.0.1", "@aws-crypto/sha256-js": "^2.0.1",
"@aws-sdk/client-chime-sdk-messaging": "^3.0.0", "@aws-sdk/client-chime-sdk-messaging": "^3.0.0",
@ -10531,15 +10569,15 @@
"dev": true "dev": true
}, },
"eslint": { "eslint": {
"version": "8.36.0", "version": "8.37.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.36.0.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.37.0.tgz",
"integrity": "sha512-Y956lmS7vDqomxlaaQAHVmeb4tNMp2FWIvU/RnU5BD3IKMD/MJPr76xdyr68P8tV1iNMvN2mRK0yy3c+UjL+bw==", "integrity": "sha512-NU3Ps9nI05GUoVMxcZx1J8CNR6xOvUT4jAUMH5+z8lpp3aEdPVCImKw6PWG4PY+Vfkpr+jvMpxs/qoE7wq0sPw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.4.0", "@eslint-community/regexpp": "^4.4.0",
"@eslint/eslintrc": "^2.0.1", "@eslint/eslintrc": "^2.0.2",
"@eslint/js": "8.36.0", "@eslint/js": "8.37.0",
"@humanwhocodes/config-array": "^0.11.8", "@humanwhocodes/config-array": "^0.11.8",
"@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8", "@nodelib/fs.walk": "^1.2.8",
@ -10550,8 +10588,8 @@
"doctrine": "^3.0.0", "doctrine": "^3.0.0",
"escape-string-regexp": "^4.0.0", "escape-string-regexp": "^4.0.0",
"eslint-scope": "^7.1.1", "eslint-scope": "^7.1.1",
"eslint-visitor-keys": "^3.3.0", "eslint-visitor-keys": "^3.4.0",
"espree": "^9.5.0", "espree": "^9.5.1",
"esquery": "^1.4.2", "esquery": "^1.4.2",
"esutils": "^2.0.2", "esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3", "fast-deep-equal": "^3.1.3",
@ -10579,9 +10617,9 @@
} }
}, },
"eslint-config-prettier": { "eslint-config-prettier": {
"version": "8.7.0", "version": "8.8.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.7.0.tgz", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.8.0.tgz",
"integrity": "sha512-HHVXLSlVUhMSmyW4ZzEuvjpwqamgmlfkutD53cYXLikh4pt/modINRcCIApJ84czDxM4GZInwUrromsDdTImTA==", "integrity": "sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==",
"dev": true, "dev": true,
"requires": {} "requires": {}
}, },
@ -10639,9 +10677,9 @@
} }
}, },
"eslint-visitor-keys": { "eslint-visitor-keys": {
"version": "3.3.0", "version": "3.4.0",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.0.tgz",
"integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "integrity": "sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==",
"dev": true "dev": true
}, },
"eslint-webpack-plugin": { "eslint-webpack-plugin": {
@ -10658,14 +10696,14 @@
} }
}, },
"espree": { "espree": {
"version": "9.5.0", "version": "9.5.1",
"resolved": "https://registry.npmjs.org/espree/-/espree-9.5.0.tgz", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.1.tgz",
"integrity": "sha512-JPbJGhKc47++oo4JkEoTe2wjy4fmMwvFpgJT9cQzmfXKp22Dr6Hf1tdCteLz1h0P3t+mGvWZ+4Uankvh8+c6zw==", "integrity": "sha512-5yxtHSZXRSW5pvv3hAlXM5+/Oswi1AUFqBmbibKb5s6bp3rGIDkyXU6xCoyuuLhijr4SFwPrXRoZjz0AZDN9tg==",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "^8.8.0", "acorn": "^8.8.0",
"acorn-jsx": "^5.3.2", "acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.3.0" "eslint-visitor-keys": "^3.4.0"
} }
}, },
"esquery": { "esquery": {
@ -11688,6 +11726,16 @@
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true "dev": true
}, },
"launch-editor": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz",
"integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==",
"dev": true,
"requires": {
"picocolors": "^1.0.0",
"shell-quote": "^1.7.3"
}
},
"levn": { "levn": {
"version": "0.4.1", "version": "0.4.1",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
@ -12435,9 +12483,9 @@
"dev": true "dev": true
}, },
"prettier": { "prettier": {
"version": "2.8.4", "version": "2.8.7",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz",
"integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==",
"dev": true "dev": true
}, },
"prettier-linter-helpers": { "prettier-linter-helpers": {
@ -12734,9 +12782,9 @@
"dev": true "dev": true
}, },
"rimraf": { "rimraf": {
"version": "4.4.0", "version": "4.4.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.0.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
"integrity": "sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
"dev": true, "dev": true,
"requires": { "requires": {
"glob": "^9.2.0" "glob": "^9.2.0"
@ -13444,9 +13492,9 @@
} }
}, },
"typescript": { "typescript": {
"version": "4.9.5", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.3.tgz",
"integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "integrity": "sha512-xv8mOEDnigb/tN9PSMTwSEqAnUvkoXMQlicOb0IUVDBSQCgBSaAAROUZYy2IcUy5qU6XajK5jjjO7TMWqBTKZA==",
"dev": true "dev": true
}, },
"ua-parser-js": { "ua-parser-js": {
@ -13544,9 +13592,9 @@
} }
}, },
"webpack": { "webpack": {
"version": "5.76.1", "version": "5.77.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.77.0.tgz",
"integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", "integrity": "sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/eslint-scope": "^3.7.3", "@types/eslint-scope": "^3.7.3",
@ -13653,9 +13701,9 @@
} }
}, },
"webpack-dev-server": { "webpack-dev-server": {
"version": "4.11.1", "version": "4.13.2",
"resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz",
"integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", "integrity": "sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw==",
"dev": true, "dev": true,
"requires": { "requires": {
"@types/bonjour": "^3.5.9", "@types/bonjour": "^3.5.9",
@ -13677,6 +13725,7 @@
"html-entities": "^2.3.2", "html-entities": "^2.3.2",
"http-proxy-middleware": "^2.0.3", "http-proxy-middleware": "^2.0.3",
"ipaddr.js": "^2.0.1", "ipaddr.js": "^2.0.1",
"launch-editor": "^2.6.0",
"open": "^8.0.9", "open": "^8.0.9",
"p-retry": "^4.5.0", "p-retry": "^4.5.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
@ -13686,7 +13735,7 @@
"sockjs": "^0.3.24", "sockjs": "^0.3.24",
"spdy": "^4.0.2", "spdy": "^4.0.2",
"webpack-dev-middleware": "^5.3.1", "webpack-dev-middleware": "^5.3.1",
"ws": "^8.4.2" "ws": "^8.13.0"
}, },
"dependencies": { "dependencies": {
"rimraf": { "rimraf": {
@ -13697,6 +13746,13 @@
"requires": { "requires": {
"glob": "^7.1.3" "glob": "^7.1.3"
} }
},
"ws": {
"version": "8.13.0",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz",
"integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==",
"dev": true,
"requires": {}
} }
} }
}, },

View File

@ -1,6 +1,6 @@
{ {
"name": "@dannadori/voice-changer-client-js", "name": "@dannadori/voice-changer-client-js",
"version": "1.0.99", "version": "1.0.101",
"description": "", "description": "",
"main": "dist/index.js", "main": "dist/index.js",
"directories": { "directories": {
@ -26,28 +26,28 @@
"author": "wataru.okada@flect.co.jp", "author": "wataru.okada@flect.co.jp",
"license": "ISC", "license": "ISC",
"devDependencies": { "devDependencies": {
"@types/audioworklet": "^0.0.38", "@types/audioworklet": "^0.0.41",
"@types/node": "^18.15.0", "@types/node": "^18.15.11",
"@types/react": "18.0.28", "@types/react": "18.0.32",
"@types/react-dom": "18.0.11", "@types/react-dom": "18.0.11",
"eslint": "^8.36.0", "eslint": "^8.37.0",
"eslint-config-prettier": "^8.7.0", "eslint-config-prettier": "^8.8.0",
"eslint-plugin-prettier": "^4.2.1", "eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-react": "^7.32.2", "eslint-plugin-react": "^7.32.2",
"eslint-webpack-plugin": "^4.0.0", "eslint-webpack-plugin": "^4.0.0",
"npm-run-all": "^4.1.5", "npm-run-all": "^4.1.5",
"prettier": "^2.8.4", "prettier": "^2.8.7",
"raw-loader": "^4.0.2", "raw-loader": "^4.0.2",
"rimraf": "^4.4.0", "rimraf": "^4.4.1",
"ts-loader": "^9.4.2", "ts-loader": "^9.4.2",
"typescript": "^4.9.5", "typescript": "^5.0.3",
"webpack": "^5.76.1", "webpack": "^5.77.0",
"webpack-cli": "^5.0.1", "webpack-cli": "^5.0.1",
"webpack-dev-server": "^4.11.1" "webpack-dev-server": "^4.13.2"
}, },
"dependencies": { "dependencies": {
"@types/readable-stream": "^2.3.15", "@types/readable-stream": "^2.3.15",
"amazon-chime-sdk-js": "^3.11.0", "amazon-chime-sdk-js": "^3.12.0",
"buffer": "^6.0.3", "buffer": "^6.0.3",
"localforage": "^1.10.0", "localforage": "^1.10.0",
"react": "^18.2.0", "react": "^18.2.0",

View File

@ -34,16 +34,12 @@ ADD dummy /
RUN git clone -b v1.5.0.0_SiFiGAN https://github.com/isletennos/MMVC_Trainer.git RUN git clone -b v1.5.0.0_SiFiGAN https://github.com/isletennos/MMVC_Trainer.git
WORKDIR /MMVC_Trainer/ WORKDIR /MMVC_Trainer/
#RUN git checkout c242d3d1cf7f768af70d9735082ca2bdd90c45f3 RUN git checkout 0fa4662a8741a127cc0bdb6ccdecfc17bdcba709
RUN git checkout 8cca023f5f709c70c2c2fc3e880cb1a119e18f44
RUN git clone https://github.com/isletennos/MMVC_Client.git RUN git clone https://github.com/isletennos/MMVC_Client.git
WORKDIR /MMVC_Trainer/MMVC_Client WORKDIR /MMVC_Trainer/MMVC_Client
#RUN git checkout 3374a1177b73e3f6d600e5dbe93af033c36ee120 RUN git checkout 461cb231b57cbb17243110eaac8435d9cca24a26
RUN git checkout 1424609e53c79e2d629add10ae4bfb16fc0c3c82
WORKDIR / WORKDIR /
# ↓ テストスクリプトはTrainerのrootに置くとmodelsがconflictする。 # ↓ テストスクリプトはTrainerのrootに置くとmodelsがconflictする。

View File

@ -0,0 +1,257 @@
import sys
import os
if sys.platform.startswith('darwin'):
baseDir = [x for x in sys.path if x.endswith("Contents/MacOS")]
if len(baseDir) != 1:
print("baseDir should be only one ", baseDir)
sys.exit()
modulePath = os.path.join(baseDir[0], "DDSP-SVC")
sys.path.append(modulePath)
else:
sys.path.append("DDSP-SVC")
import io
from dataclasses import dataclass, asdict, field
from functools import reduce
import numpy as np
import torch
import onnxruntime
import pyworld as pw
import ddsp.vocoder as vo
import librosa
providers = ['OpenVINOExecutionProvider', "CUDAExecutionProvider", "DmlExecutionProvider", "CPUExecutionProvider"]
@dataclass
class DDSP_SVCSettings():
gpu: int = 0
dstId: int = 0
f0Detector: str = "dio" # dio or harvest
tran: int = 20
noiceScale: float = 0.3
predictF0: int = 0 # 0:False, 1:True
silentThreshold: float = 0.00001
extraConvertSize: int = 1024 * 32
clusterInferRatio: float = 0.1
framework: str = "PyTorch" # PyTorch or ONNX
pyTorchModelFile: str = ""
onnxModelFile: str = ""
configFile: str = ""
speakers: dict[str, int] = field(
default_factory=lambda: {}
)
# ↓mutableな物だけ列挙
intData = ["gpu", "dstId", "tran", "predictF0", "extraConvertSize"]
floatData = ["noiceScale", "silentThreshold", "clusterInferRatio"]
strData = ["framework", "f0Detector"]
class DDSP_SVC:
def __init__(self, params):
self.settings = DDSP_SVCSettings()
self.net_g = None
self.onnx_session = None
self.raw_path = io.BytesIO()
self.gpu_num = torch.cuda.device_count()
self.prevVol = 0
self.params = params
print("DDSP-SVC initialization:", params)
def loadModel(self, config: str, pyTorch_model_file: str = None, onnx_model_file: str = None, clusterTorchModel: str = None):
self.settings.configFile = config
# model
model, args = vo.load_model(pyTorch_model_file)
# hubert
self.model = model
self.args = args
vec_path = self.params["hubert"]
self.encoder = vo.Units_Encoder(
args.data.encoder,
vec_path,
args.data.encoder_sample_rate,
args.data.encoder_hop_size,
device="cpu")
# f0dec
self.f0_detector = vo.F0_Extractor(
self.settings.f0Detector,
44100,
512,
float(50),
float(1100))
return self.get_info()
def update_setteings(self, key: str, val: any):
if key == "onnxExecutionProvider" and self.onnx_session != None:
if val == "CUDAExecutionProvider":
if self.settings.gpu < 0 or self.settings.gpu >= self.gpu_num:
self.settings.gpu = 0
provider_options = [{'device_id': self.settings.gpu}]
self.onnx_session.set_providers(providers=[val], provider_options=provider_options)
else:
self.onnx_session.set_providers(providers=[val])
elif key in self.settings.intData:
setattr(self.settings, key, int(val))
if key == "gpu" and val >= 0 and val < self.gpu_num and self.onnx_session != None:
providers = self.onnx_session.get_providers()
print("Providers:", providers)
if "CUDAExecutionProvider" in providers:
provider_options = [{'device_id': self.settings.gpu}]
self.onnx_session.set_providers(providers=["CUDAExecutionProvider"], provider_options=provider_options)
elif key in self.settings.floatData:
setattr(self.settings, key, float(val))
elif key in self.settings.strData:
setattr(self.settings, key, str(val))
else:
return False
return True
def get_info(self):
data = asdict(self.settings)
data["onnxExecutionProviders"] = self.onnx_session.get_providers() if self.onnx_session != None else []
files = ["configFile", "pyTorchModelFile", "onnxModelFile"]
for f in files:
if data[f] != None and os.path.exists(data[f]):
data[f] = os.path.basename(data[f])
else:
data[f] = ""
return data
def get_processing_sampling_rate(self):
return 44100
def get_unit_f0(self, audio_buffer, tran):
if (self.settings.gpu < 0 or self.gpu_num == 0) or self.settings.framework == "ONNX":
dev = torch.device("cpu")
else:
dev = torch.device("cpu")
# dev = torch.device("cuda", index=self.settings.gpu)
wav_44k = audio_buffer
f0 = self.f0_detector.extract(wav_44k, uv_interp=True, device=dev)
f0 = torch.from_numpy(f0).float().to(dev).unsqueeze(-1).unsqueeze(0)
f0 = f0 * 2 ** (float(10) / 12)
# print("f0:", f0)
print("wav_44k:::", wav_44k)
c = self.encoder.encode(torch.from_numpy(audio_buffer).float().unsqueeze(0).to(dev), 44100, 512)
# print("c:", c)
return c, f0
def generate_input(self, newData: any, inputSize: int, crossfadeSize: int):
# newData = newData.astype(np.float32) / 32768.0
# newData = newData.astype(np.float32) / self.hps.data.max_wav_value
if hasattr(self, "audio_buffer"):
self.audio_buffer = np.concatenate([self.audio_buffer, newData], 0) # 過去のデータに連結
else:
self.audio_buffer = newData
convertSize = inputSize + crossfadeSize + self.settings.extraConvertSize
hop_size = int(self.args.data.block_size * 44100 / self.args.data.sampling_rate)
print("hopsize", hop_size)
if convertSize % hop_size != 0: # モデルの出力のホップサイズで切り捨てが発生するので補う。
convertSize = convertSize + (hop_size - (convertSize % hop_size))
print("convsize", convertSize)
self.audio_buffer = self.audio_buffer[-1 * convertSize:] # 変換対象の部分だけ抽出
crop = self.audio_buffer[-1 * (inputSize + crossfadeSize):-1 * (crossfadeSize)]
rms = np.sqrt(np.square(crop).mean(axis=0))
vol = max(rms, self.prevVol * 0.0)
self.prevVol = vol
c, f0 = self.get_unit_f0(self.audio_buffer, self.settings.tran)
return (c, f0, convertSize, vol)
def _onnx_inference(self, data):
if hasattr(self, "onnx_session") == False or self.onnx_session == None:
print("[Voice Changer] No onnx session.")
return np.zeros(1).astype(np.int16)
c = data[0]
f0 = data[1]
convertSize = data[2]
vol = data[3]
if vol < self.settings.silentThreshold:
return np.zeros(convertSize).astype(np.int16)
c, f0, uv = [x.numpy() for x in data]
audio1 = self.onnx_session.run(
["audio"],
{
"c": c,
"f0": f0,
"g": np.array([self.settings.dstId]).astype(np.int64),
"uv": np.array([self.settings.dstId]).astype(np.int64),
"predict_f0": np.array([self.settings.dstId]).astype(np.int64),
"noice_scale": np.array([self.settings.dstId]).astype(np.int64),
})[0][0, 0] * self.hps.data.max_wav_value
audio1 = audio1 * vol
result = audio1
return result
pass
def _pyTorch_inference(self, data):
if hasattr(self, "model") == False or self.model == None:
print("[Voice Changer] No pyTorch session.")
return np.zeros(1).astype(np.int16)
if self.settings.gpu < 0 or self.gpu_num == 0:
dev = torch.device("cpu")
else:
dev = torch.device("cpu")
# dev = torch.device("cuda", index=self.settings.gpu)
c = data[0]
f0 = data[1]
convertSize = data[2]
vol = data[3]
if vol < self.settings.silentThreshold:
return np.zeros(convertSize).astype(np.int16)
with torch.no_grad():
c.to(dev)
f0.to(dev)
vol = torch.from_numpy(np.array([vol] * c.shape[1])).float().to(dev).unsqueeze(-1).unsqueeze(0)
spk_id = torch.LongTensor(np.array([[1]])).to(dev)
# print("vol", vol)
print("input", c.shape, f0.shape)
seg_output, _, (s_h, s_n) = self.model(c, f0, vol, spk_id=spk_id)
seg_output = seg_output.squeeze().cpu().numpy()
print("SEG:", seg_output)
return seg_output
def inference(self, data):
if self.settings.framework == "ONNX":
audio = self._onnx_inference(data)
else:
audio = self._pyTorch_inference(data)
return audio
def destroy(self):
del self.net_g
del self.onnx_session

View File

@ -17,7 +17,7 @@ import onnxruntime
import pyworld as pw import pyworld as pw
from models import SynthesizerTrn from models import SynthesizerTrn
from voice_changer.MMVCv15.client_modules import convert_continuos_f0, spectrogram_torch, TextAudioSpeakerCollate, get_hparams_from_file, load_checkpoint from voice_changer.MMVCv15.client_modules import convert_continuos_f0, spectrogram_torch, get_hparams_from_file, load_checkpoint
providers = ['OpenVINOExecutionProvider', "CUDAExecutionProvider", "DmlExecutionProvider", "CPUExecutionProvider"] providers = ['OpenVINOExecutionProvider', "CUDAExecutionProvider", "DmlExecutionProvider", "CPUExecutionProvider"]
@ -56,11 +56,15 @@ class MMVCv15:
if pyTorch_model_file != None: if pyTorch_model_file != None:
self.settings.pyTorchModelFile = pyTorch_model_file self.settings.pyTorchModelFile = pyTorch_model_file
else:
self.settings.pyTorchModelFile = ""
if onnx_model_file: if onnx_model_file:
self.settings.onnxModelFile = onnx_model_file self.settings.onnxModelFile = onnx_model_file
else:
self.settings.onnxModelFile = ""
print("self.settings.onnxModelFile::", self.settings.onnxModelFile)
# PyTorchモデル生成 # PyTorchモデル生成
if pyTorch_model_file != None:
self.net_g = SynthesizerTrn( self.net_g = SynthesizerTrn(
spec_channels=self.hps.data.filter_length // 2 + 1, spec_channels=self.hps.data.filter_length // 2 + 1,
segment_size=self.hps.train.segment_size // self.hps.data.hop_length, segment_size=self.hps.train.segment_size // self.hps.data.hop_length,
@ -79,11 +83,12 @@ class MMVCv15:
requires_grad_text_enc=self.hps.requires_grad.text_enc, requires_grad_text_enc=self.hps.requires_grad.text_enc,
requires_grad_dec=self.hps.requires_grad.dec requires_grad_dec=self.hps.requires_grad.dec
) )
if pyTorch_model_file != None:
self.net_g.eval() self.net_g.eval()
load_checkpoint(pyTorch_model_file, self.net_g, None) load_checkpoint(pyTorch_model_file, self.net_g, None)
# utils.load_checkpoint(pyTorch_model_file, self.net_g, None)
# ONNXモデル生成 # ONNXモデル生成
self.onxx_input_length = 8192
if onnx_model_file != None: if onnx_model_file != None:
ort_options = onnxruntime.SessionOptions() ort_options = onnxruntime.SessionOptions()
ort_options.intra_op_num_threads = 8 ort_options.intra_op_num_threads = 8
@ -91,10 +96,15 @@ class MMVCv15:
onnx_model_file, onnx_model_file,
providers=providers providers=providers
) )
inputs_info = self.onnx_session.get_inputs()
for i in inputs_info:
# print("ONNX INPUT SHAPE", i.name, i.shape)
if i.name == "sin":
self.onxx_input_length = i.shape[2]
return self.get_info() return self.get_info()
def update_setteings(self, key: str, val: any): def update_setteings(self, key: str, val: any):
if key == "onnxExecutionProvider" and self.onnx_session != None: if key == "onnxExecutionProvider" and self.settings.onnxModelFile != "": # self.onnx_session != None:
if val == "CUDAExecutionProvider": if val == "CUDAExecutionProvider":
if self.settings.gpu < 0 or self.settings.gpu >= self.gpu_num: if self.settings.gpu < 0 or self.settings.gpu >= self.gpu_num:
self.settings.gpu = 0 self.settings.gpu = 0
@ -104,7 +114,7 @@ class MMVCv15:
self.onnx_session.set_providers(providers=[val]) self.onnx_session.set_providers(providers=[val])
elif key in self.settings.intData: elif key in self.settings.intData:
setattr(self.settings, key, int(val)) setattr(self.settings, key, int(val))
if key == "gpu" and val >= 0 and val < self.gpu_num and self.onnx_session != None: if key == "gpu" and val >= 0 and val < self.gpu_num and self.settings.onnxModelFile != "": # self.onnx_session != None:
providers = self.onnx_session.get_providers() providers = self.onnx_session.get_providers()
print("Providers:", providers) print("Providers:", providers)
if "CUDAExecutionProvider" in providers: if "CUDAExecutionProvider" in providers:
@ -122,7 +132,7 @@ class MMVCv15:
def get_info(self): def get_info(self):
data = asdict(self.settings) data = asdict(self.settings)
data["onnxExecutionProviders"] = self.onnx_session.get_providers() if self.onnx_session != None else [] data["onnxExecutionProviders"] = self.onnx_session.get_providers() if self.settings.onnxModelFile != "" else []
files = ["configFile", "pyTorchModelFile", "onnxModelFile"] files = ["configFile", "pyTorchModelFile", "onnxModelFile"]
for f in files: for f in files:
if data[f] != None and os.path.exists(data[f]): if data[f] != None and os.path.exists(data[f]):
@ -170,44 +180,46 @@ class MMVCv15:
if convertSize % self.hps.data.hop_length != 0: # モデルの出力のホップサイズで切り捨てが発生するので補う。 if convertSize % self.hps.data.hop_length != 0: # モデルの出力のホップサイズで切り捨てが発生するので補う。
convertSize = convertSize + (self.hps.data.hop_length - (convertSize % self.hps.data.hop_length)) convertSize = convertSize + (self.hps.data.hop_length - (convertSize % self.hps.data.hop_length))
# ONNX は固定長
if self.settings.framework == "ONNX":
convertSize = self.onxx_input_length
self.audio_buffer = self.audio_buffer[-1 * convertSize:] # 変換対象の部分だけ抽出 self.audio_buffer = self.audio_buffer[-1 * convertSize:] # 変換対象の部分だけ抽出
f0 = self._get_f0(self.settings.f0Detector, self.audio_buffer) # f0 生成 f0 = self._get_f0(self.settings.f0Detector, self.audio_buffer) # torch
spec = self._get_spec(self.audio_buffer) f0 = (f0 * self.settings.f0Factor).unsqueeze(0).unsqueeze(0)
spec = self._get_spec(self.audio_buffer) # torch
sid = torch.LongTensor([int(self.settings.srcId)]) sid = torch.LongTensor([int(self.settings.srcId)])
return [spec, f0, sid]
data = TextAudioSpeakerCollate(
sample_rate=self.hps.data.sampling_rate,
hop_size=self.hps.data.hop_length,
f0_factor=self.settings.f0Factor
)([(spec, sid, f0)])
return data
def _onnx_inference(self, data): def _onnx_inference(self, data):
if hasattr(self, "onnx_session") == False or self.onnx_session == None: if self.settings.onnxModelFile == "":
print("[Voice Changer] No ONNX session.") print("[Voice Changer] No ONNX session.")
return np.zeros(1).astype(np.int16) return np.zeros(1).astype(np.int16)
spec, spec_lengths, sid_src, sin, d = data spec, f0, sid_src = data
spec = spec.unsqueeze(0)
spec_lengths = torch.tensor([spec.size(2)])
sid_tgt1 = torch.LongTensor([self.settings.dstId]) sid_tgt1 = torch.LongTensor([self.settings.dstId])
sin, d = self.net_g.make_sin_d(f0)
(d0, d1, d2, d3) = d
audio1 = self.onnx_session.run( audio1 = self.onnx_session.run(
["audio"], ["audio"],
{ {
"specs": spec.numpy(), "specs": spec.numpy(),
"lengths": spec_lengths.numpy(), "lengths": spec_lengths.numpy(),
"sin": sin.numpy(), "sin": sin.numpy(),
"d0": d[0][:1].numpy(), "d0": d0.numpy(),
"d1": d[1][:1].numpy(), "d1": d1.numpy(),
"d2": d[2][:1].numpy(), "d2": d2.numpy(),
"d3": d[3][:1].numpy(), "d3": d3.numpy(),
"sid_src": sid_src.numpy(), "sid_src": sid_src.numpy(),
"sid_tgt": sid_tgt1.numpy() "sid_tgt": sid_tgt1.numpy()
})[0][0, 0] * self.hps.data.max_wav_value })[0][0, 0] * self.hps.data.max_wav_value
return audio1 return audio1
def _pyTorch_inference(self, data): def _pyTorch_inference(self, data):
if hasattr(self, "net_g") == False or self.net_g == None: if self.settings.pyTorchModelFile == "":
print("[Voice Changer] No pyTorch session.") print("[Voice Changer] No pyTorch session.")
return np.zeros(1).astype(np.int16) return np.zeros(1).astype(np.int16)
@ -217,15 +229,14 @@ class MMVCv15:
dev = torch.device("cuda", index=self.settings.gpu) dev = torch.device("cuda", index=self.settings.gpu)
with torch.no_grad(): with torch.no_grad():
spec, spec_lengths, sid_src, sin, d = data spec, f0, sid_src = data
spec = spec.to(dev) spec = spec.unsqueeze(0).to(dev)
spec_lengths = spec_lengths.to(dev) spec_lengths = torch.tensor([spec.size(2)]).to(dev)
f0 = f0.to(dev)
sid_src = sid_src.to(dev) sid_src = sid_src.to(dev)
sin = sin.to(dev)
d = tuple([d[:1].to(dev) for d in d])
sid_target = torch.LongTensor([self.settings.dstId]).to(dev) sid_target = torch.LongTensor([self.settings.dstId]).to(dev)
audio1 = self.net_g.to(dev).voice_conversion(spec, spec_lengths, sin, d, sid_src, sid_target)[0, 0].data * self.hps.data.max_wav_value audio1 = self.net_g.to(dev).voice_conversion(spec, spec_lengths, f0, sid_src, sid_target)[0, 0].data * self.hps.data.max_wav_value
result = audio1.float().cpu().numpy() result = audio1.float().cpu().numpy()
return result return result

View File

@ -1,6 +1,5 @@
from features import SignalGenerator, dilated_factor
from scipy.interpolate import interp1d from scipy.interpolate import interp1d
import torch import torch
import numpy as np import numpy as np
@ -9,90 +8,8 @@ import os
hann_window = {} hann_window = {}
class TextAudioSpeakerCollate():
""" Zero-pads model inputs and targets
"""
def __init__(
self,
sample_rate,
hop_size,
f0_factor=1.0,
dense_factors=[0.5, 1, 4, 8],
upsample_scales=[8, 4, 2, 2],
sine_amp=0.1,
noise_amp=0.003,
signal_types=["sine"],
):
self.dense_factors = dense_factors
self.prod_upsample_scales = np.cumprod(upsample_scales)
self.sample_rate = sample_rate
self.signal_generator = SignalGenerator(
sample_rate=sample_rate,
hop_size=hop_size,
sine_amp=sine_amp,
noise_amp=noise_amp,
signal_types=signal_types,
)
self.f0_factor = f0_factor
def __call__(self, batch):
"""Collate's training batch from normalized text, audio and speaker identities
PARAMS
------
batch: [text_normalized, spec_normalized, wav_normalized, sid, note]
"""
spec_lengths = torch.LongTensor(len(batch))
sid = torch.LongTensor(len(batch))
spec_padded = torch.FloatTensor(len(batch), batch[0][0].size(0), batch[0][0].size(1))
f0_padded = torch.FloatTensor(len(batch), 1, batch[0][2].size(0))
# 返り値の初期化
spec_padded.zero_()
f0_padded.zero_()
# dfs
dfs_batch = [[] for _ in range(len(self.dense_factors))]
# row spec, sid, f0
for i in range(len(batch)):
row = batch[i]
spec = row[0]
spec_padded[i, :, :spec.size(1)] = spec
spec_lengths[i] = spec.size(1)
sid[i] = row[1]
# 推論時 f0/cf0にf0の倍率を乗算してf0/cf0を求める
f0 = row[2] * self.f0_factor
f0_padded[i, :, :f0.size(0)] = f0
# dfs
dfs = []
# dilated_factor の入力はnumpy!!
for df, us in zip(self.dense_factors, self.prod_upsample_scales):
dfs += [
np.repeat(dilated_factor(torch.unsqueeze(f0, dim=1).to('cpu').detach().numpy(), self.sample_rate, df), us)
]
# よくわからないけど、後で論文ちゃんと読む
for i in range(len(self.dense_factors)):
dfs_batch[i] += [
dfs[i].astype(np.float32).reshape(-1, 1)
] # [(T', 1), ...]
# よくわからないdfsを転置
for i in range(len(self.dense_factors)):
dfs_batch[i] = torch.FloatTensor(np.array(dfs_batch[i])).transpose(
2, 1
) # (B, 1, T')
# f0/cf0を実際に使うSignalに変換する
in_batch = self.signal_generator(f0_padded)
return spec_padded, spec_lengths, sid, in_batch, dfs_batch
def convert_continuos_f0(f0, f0_size): def convert_continuos_f0(f0, f0_size):
# 正式版チェックOK
# get start and end of f0 # get start and end of f0
if (f0 == 0).all(): if (f0 == 0).all():
return np.zeros((f0_size,)) return np.zeros((f0_size,))
@ -108,13 +25,13 @@ def convert_continuos_f0(f0, f0_size):
nz_frames = np.where(cf0 != 0)[0] nz_frames = np.where(cf0 != 0)[0]
# perform linear interpolation # perform linear interpolation
f = interp1d(nz_frames, cf0[nz_frames], bounds_error=False, fill_value=0.0) f = interp1d(nz_frames, cf0[nz_frames], bounds_error=False, fill_value=0.0)
cf0_ = f(np.arange(0, f0_size))
# print(cf0.shape, cf0_.shape, f0.shape, f0_size) # print(cf0.shape, cf0_.shape, f0.shape, f0_size)
# print(cf0_) # print(cf0_)
return f(np.arange(0, f0_size)) return f(np.arange(0, f0_size))
def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False): def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False):
# 正式版チェックOK
if torch.min(y) < -1.: if torch.min(y) < -1.:
print('min value is ', torch.min(y)) print('min value is ', torch.min(y))
if torch.max(y) > 1.: if torch.max(y) > 1.:
@ -137,6 +54,7 @@ def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False)
def get_hparams_from_file(config_path): def get_hparams_from_file(config_path):
# 正式版チェックOK
with open(config_path, "r", encoding="utf-8") as f: with open(config_path, "r", encoding="utf-8") as f:
data = f.read() data = f.read()
config = json.loads(data) config = json.loads(data)
@ -146,6 +64,7 @@ def get_hparams_from_file(config_path):
class HParams(): class HParams():
# 正式版チェックOK
def __init__(self, **kwargs): def __init__(self, **kwargs):
for k, v in kwargs.items(): for k, v in kwargs.items():
if type(v) == dict: if type(v) == dict:
@ -178,6 +97,7 @@ class HParams():
def load_checkpoint(checkpoint_path, model, optimizer=None): def load_checkpoint(checkpoint_path, model, optimizer=None):
# 正式版チェックOK
assert os.path.isfile(checkpoint_path), f"No such file or directory: {checkpoint_path}" assert os.path.isfile(checkpoint_path), f"No such file or directory: {checkpoint_path}"
checkpoint_dict = torch.load(checkpoint_path, map_location='cpu') checkpoint_dict = torch.load(checkpoint_path, map_location='cpu')
iteration = checkpoint_dict['iteration'] iteration = checkpoint_dict['iteration']