mirror of
https://github.com/w-okada/voice-changer.git
synced 2025-01-23 13:35:12 +03:00
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)
This commit is contained in:
parent
c2b979a05f
commit
06b8cf78d1
2
client/demo/dist/index.js
vendored
2
client/demo/dist/index.js
vendored
File diff suppressed because one or more lines are too long
1158
client/demo/package-lock.json
generated
1158
client/demo/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -28,20 +28,20 @@
|
||||
"author": "wataru.okada@flect.co.jp",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.23.3",
|
||||
"@babel/core": "^7.23.5",
|
||||
"@babel/plugin-transform-runtime": "^7.23.4",
|
||||
"@babel/preset-env": "^7.23.3",
|
||||
"@babel/preset-env": "^7.23.5",
|
||||
"@babel/preset-react": "^7.23.3",
|
||||
"@babel/preset-typescript": "^7.23.3",
|
||||
"@types/node": "^20.10.0",
|
||||
"@types/react": "^18.2.39",
|
||||
"@types/node": "^20.10.2",
|
||||
"@types/react": "^18.2.40",
|
||||
"@types/react-dom": "^18.2.17",
|
||||
"autoprefixer": "^10.4.16",
|
||||
"babel-loader": "^9.1.3",
|
||||
"copy-webpack-plugin": "^11.0.0",
|
||||
"css-loader": "^6.8.1",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"eslint": "^8.55.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.0.1",
|
||||
"eslint-plugin-react": "^7.33.2",
|
||||
"eslint-webpack-plugin": "^4.0.1",
|
||||
@ -62,15 +62,15 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@alexanderolsen/libsamplerate-js": "^2.1.0",
|
||||
"@dannadori/voice-changer-client-js": "^1.0.178",
|
||||
"@dannadori/voice-changer-client-js": "^1.0.180",
|
||||
"@dannadori/voice-changer-js": "^1.0.2",
|
||||
"@dannadori/worker-manager": "^1.0.20",
|
||||
"@fortawesome/fontawesome-svg-core": "^6.5.0",
|
||||
"@fortawesome/free-brands-svg-icons": "^6.5.0",
|
||||
"@fortawesome/free-regular-svg-icons": "^6.5.0",
|
||||
"@fortawesome/free-solid-svg-icons": "^6.5.0",
|
||||
"@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.13.0",
|
||||
"@tensorflow/tfjs": "^4.14.0",
|
||||
"onnxruntime-web": "^1.16.3",
|
||||
"protobufjs": "^7.2.5",
|
||||
"react": "^18.2.0",
|
||||
|
@ -113,23 +113,29 @@ const f0ModelUrl: { [modelType in VoiceChangerType]: { [inputLength in InputLeng
|
||||
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",
|
||||
"16k": "https://huggingface.co/wok000/vcclient_model/resolve/main/web_model/v_01_alpha/amitaro/rvcv2_amitaro_v2_16k_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/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/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/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",
|
||||
},
|
||||
},
|
||||
};
|
||||
@ -137,7 +143,7 @@ const f0ModelUrl: { [modelType in VoiceChangerType]: { [inputLength in InputLeng
|
||||
export const useWebInfo = (props: UseWebInfoProps): WebInfoStateAndMethod => {
|
||||
const initVoiceChangerType: VoiceChangerType = "rvcv2";
|
||||
const initInputLength: InputLengthKey = "24000";
|
||||
const initUseF0 = false;
|
||||
const initUseF0 = true;
|
||||
const initSampleRate: ModelSampleRateStr = "32k";
|
||||
|
||||
const progressCallback = (data: ProgreeeUpdateCallbcckInfo) => {
|
||||
|
@ -4,7 +4,6 @@ import { useAppRoot } from "../../../001_provider/001_AppRootProvider";
|
||||
import { useAppState } from "../../../001_provider/001_AppStateProvider";
|
||||
import { useIndexedDB } from "@dannadori/voice-changer-client-js";
|
||||
import { useMessageBuilder } from "../../../hooks/useMessageBuilder";
|
||||
import { removeDB as webDBRemove } from "@dannadori/voice-changer-js";
|
||||
|
||||
export type HeaderAreaProps = {
|
||||
mainTitle: string;
|
||||
@ -16,7 +15,7 @@ export const HeaderArea = (props: HeaderAreaProps) => {
|
||||
const messageBuilderState = useMessageBuilder();
|
||||
const { clearSetting, webInfoState } = useAppState();
|
||||
|
||||
const { removeItem } = useIndexedDB({ clientType: null });
|
||||
const { removeItem, removeDB } = useIndexedDB({ clientType: null });
|
||||
|
||||
useMemo(() => {
|
||||
messageBuilderState.setMessage(__filename, "github", { ja: "github", en: "github" });
|
||||
@ -120,7 +119,7 @@ export const HeaderArea = (props: HeaderAreaProps) => {
|
||||
const onClearSettingClicked = async () => {
|
||||
await clearSetting();
|
||||
await removeItem(INDEXEDDB_KEY_AUDIO_OUTPUT);
|
||||
await webDBRemove();
|
||||
await removeDB();
|
||||
location.reload();
|
||||
};
|
||||
|
||||
|
@ -98,12 +98,12 @@ module.exports = {
|
||||
// new CopyPlugin({
|
||||
// patterns: [{ from: "public/models/rvcv1_amitaro_v1_32k_nof0_24000.bin", to: "models/rvcv1_amitaro_v1_32k_nof0_24000.bin" }],
|
||||
// }),
|
||||
// new CopyPlugin({
|
||||
// patterns: [{ from: "public/models/rvcv1_amitaro_v1_40k_f0_24000.bin", to: "models/rvcv1_amitaro_v1_40k_f0_24000.bin" }],
|
||||
// }),
|
||||
// new CopyPlugin({
|
||||
// patterns: [{ from: "public/models/rvcv1_amitaro_v1_40k_nof0_24000.bin", to: "models/rvcv1_amitaro_v1_40k_nof0_24000.bin" }],
|
||||
// }),
|
||||
new CopyPlugin({
|
||||
patterns: [{ from: "public/models/rvcv2_exp_v2_32k_f0_24000.bin", to: "models/rvcv2_exp_v2_32k_f0_24000.bin" }],
|
||||
}),
|
||||
new CopyPlugin({
|
||||
patterns: [{ from: "public/models/rvcv2_vctk_v2_16k_f0_24000.bin", to: "models/rvcv2_vctk_v2_16k_f0_24000.bin" }],
|
||||
}),
|
||||
// new CopyPlugin({
|
||||
// patterns: [{ from: "public/models/amitaro.png", to: "models/amitaro.png" }],
|
||||
// }),
|
||||
|
892
client/lib/package-lock.json
generated
892
client/lib/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@dannadori/voice-changer-client-js",
|
||||
"version": "1.0.178",
|
||||
"version": "1.0.180",
|
||||
"description": "",
|
||||
"main": "dist/index.js",
|
||||
"directories": {
|
||||
@ -26,13 +26,13 @@
|
||||
"author": "wataru.okada@flect.co.jp",
|
||||
"license": "ISC",
|
||||
"devDependencies": {
|
||||
"@types/audioworklet": "^0.0.50",
|
||||
"@types/jest": "^29.5.8",
|
||||
"@types/node": "^20.9.2",
|
||||
"@types/react": "18.2.37",
|
||||
"@types/react-dom": "18.2.15",
|
||||
"eslint": "^8.54.0",
|
||||
"eslint-config-prettier": "^9.0.0",
|
||||
"@types/audioworklet": "^0.0.52",
|
||||
"@types/jest": "^29.5.10",
|
||||
"@types/node": "^20.10.2",
|
||||
"@types/react": "18.2.40",
|
||||
"@types/react-dom": "18.2.17",
|
||||
"eslint": "^8.55.0",
|
||||
"eslint-config-prettier": "^9.1.0",
|
||||
"eslint-plugin-prettier": "^5.0.1",
|
||||
"eslint-plugin-react": "^7.33.2",
|
||||
"eslint-webpack-plugin": "^4.0.1",
|
||||
@ -42,13 +42,13 @@
|
||||
"raw-loader": "^4.0.2",
|
||||
"rimraf": "^5.0.5",
|
||||
"ts-loader": "^9.5.1",
|
||||
"typescript": "^5.2.2",
|
||||
"typescript": "^5.3.2",
|
||||
"webpack": "^5.89.0",
|
||||
"webpack-cli": "^5.1.4",
|
||||
"webpack-dev-server": "^4.15.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/readable-stream": "^4.0.6",
|
||||
"@types/readable-stream": "^4.0.9",
|
||||
"amazon-chime-sdk-js": "^3.18.2",
|
||||
"buffer": "^6.0.3",
|
||||
"localforage": "^1.10.0",
|
||||
|
@ -527,7 +527,7 @@ export const DefaultClientSettng: ClientSetting = {
|
||||
serverUrl: "",
|
||||
protocol: "sio",
|
||||
sendingSampleRate: 48000,
|
||||
inputChunkNum: 48,
|
||||
inputChunkNum: 192,
|
||||
downSamplingMode: "average",
|
||||
},
|
||||
voiceChangerClientSetting: {
|
||||
|
@ -127,7 +127,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
||||
};
|
||||
|
||||
// 設定データ管理
|
||||
const { setItem, getItem } = useIndexedDB({ clientType: null });
|
||||
const { setItem, getItem, removeItem } = useIndexedDB({ clientType: null });
|
||||
// 設定データの更新と保存
|
||||
const _setSetting = (_setting: ClientSetting) => {
|
||||
const storeData = { ..._setting };
|
||||
@ -231,7 +231,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
||||
}, [voiceChangerClientSetting.reloadClientSetting, serverSetting.reloadServerInfo]);
|
||||
|
||||
const clearSetting = async () => {
|
||||
// TBD
|
||||
await removeItem("clientSetting");
|
||||
};
|
||||
|
||||
// 設定変更
|
||||
|
@ -2,12 +2,22 @@ import os
|
||||
import shutil
|
||||
from fastapi import UploadFile
|
||||
|
||||
# UPLOAD_DIR = "model_upload_dir"
|
||||
|
||||
def sanitize_filename(filename: str) -> str:
|
||||
safe_filename = os.path.basename(filename)
|
||||
|
||||
max_length = 255
|
||||
if len(safe_filename) > max_length:
|
||||
file_root, file_ext = os.path.splitext(safe_filename)
|
||||
safe_filename = file_root[: max_length - len(file_ext)] + file_ext
|
||||
|
||||
return safe_filename
|
||||
|
||||
|
||||
def upload_file(upload_dirname: str, file: UploadFile, filename: str):
|
||||
if file and filename:
|
||||
fileobj = file.file
|
||||
filename = sanitize_filename(filename)
|
||||
target_path = os.path.join(upload_dirname, filename)
|
||||
target_dir = os.path.dirname(target_path)
|
||||
os.makedirs(target_dir, exist_ok=True)
|
||||
@ -19,9 +29,8 @@ def upload_file(upload_dirname: str, file: UploadFile, filename: str):
|
||||
return {"status": "ERROR", "msg": "uploaded file is not found."}
|
||||
|
||||
|
||||
def concat_file_chunks(
|
||||
upload_dirname: str, filename: str, chunkNum: int, dest_dirname: str
|
||||
):
|
||||
def concat_file_chunks(upload_dirname: str, filename: str, chunkNum: int, dest_dirname: str):
|
||||
filename = sanitize_filename(filename)
|
||||
target_path = os.path.join(upload_dirname, filename)
|
||||
target_dir = os.path.dirname(target_path)
|
||||
os.makedirs(target_dir, exist_ok=True)
|
||||
|
Loading…
Reference in New Issue
Block a user