mirror of
https://github.com/w-okada/voice-changer.git
synced 2025-02-02 16:23:58 +03:00
remove old gui 3
This commit is contained in:
parent
6b4fe5a349
commit
767dfc520c
4
client/demo/dist/index.js
vendored
4
client/demo/dist/index.js
vendored
File diff suppressed because one or more lines are too long
@ -40,28 +40,7 @@ export const AppStateProvider = ({ children }: Props) => {
|
||||
if (clientState.clientState.initialized) {
|
||||
initializedRef.current = true
|
||||
clientState.clientState.clientSetting.updateClientSetting({
|
||||
...clientState.clientState.clientSetting.clientSetting, speakers: [
|
||||
{
|
||||
"id": 107,
|
||||
"name": "user"
|
||||
},
|
||||
{
|
||||
"id": 100,
|
||||
"name": "ずんだもん"
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"name": "そら"
|
||||
},
|
||||
{
|
||||
"id": 102,
|
||||
"name": "めたん"
|
||||
},
|
||||
{
|
||||
"id": 103,
|
||||
"name": "つむぎ"
|
||||
}
|
||||
]
|
||||
...clientState.clientState.clientSetting.clientSetting
|
||||
})
|
||||
}
|
||||
}, [clientState.clientState.initialized])
|
||||
|
@ -1,40 +0,0 @@
|
||||
export type LicenseInfo = {
|
||||
name: string,
|
||||
url: string
|
||||
license: string,
|
||||
licenseUrl: string
|
||||
description: string
|
||||
}
|
||||
|
||||
export const getLicenceInfo = (): LicenseInfo[] => {
|
||||
return [
|
||||
{
|
||||
name: "VC Helper",
|
||||
url: "https://github.com/w-okada/voice-changer",
|
||||
license: "MIT",
|
||||
licenseUrl: "https://raw.githubusercontent.com/w-okada/voice-changer/master/LICENSE",
|
||||
description: ""
|
||||
},
|
||||
{
|
||||
name: "MMVC",
|
||||
url: "https://github.com/isletennos/MMVC_Trainer",
|
||||
license: "MIT",
|
||||
licenseUrl: "https://raw.githubusercontent.com/isletennos/MMVC_Trainer/main/LICENSE",
|
||||
description: ""
|
||||
},
|
||||
{
|
||||
name: "so-vits-svc",
|
||||
url: "https://github.com/svc-develop-team/so-vits-svc",
|
||||
license: "MIT",
|
||||
licenseUrl: "https://github.com/svc-develop-team/so-vits-svc/blob/4.0/LICENSE",
|
||||
description: ""
|
||||
},
|
||||
{
|
||||
name: "ContentVec",
|
||||
url: "https://github.com/auspicious3000/contentvec",
|
||||
license: "MIT",
|
||||
licenseUrl: "https://raw.githubusercontent.com/auspicious3000/contentvec/main/LICENSE",
|
||||
description: ""
|
||||
},
|
||||
]
|
||||
}
|
@ -459,17 +459,6 @@ export const DefaultWorkletNodeSetting: WorkletNodeSetting = {
|
||||
downSamplingMode: "average"
|
||||
}
|
||||
|
||||
export const DefaultWorkletNodeSetting_so_vits_svc_40: WorkletNodeSetting = {
|
||||
...DefaultWorkletNodeSetting, inputChunkNum: 128,
|
||||
}
|
||||
|
||||
export const DefaultWorkletNodeSetting_DDSP_SVC: WorkletNodeSetting = {
|
||||
...DefaultWorkletNodeSetting, inputChunkNum: 256,
|
||||
}
|
||||
|
||||
export const DefaultWorkletNodeSetting_RVC: WorkletNodeSetting = {
|
||||
...DefaultWorkletNodeSetting, inputChunkNum: 256,
|
||||
}
|
||||
|
||||
///////////////////////
|
||||
// クライアントセッティング
|
||||
@ -479,15 +468,6 @@ export const SampleRate = {
|
||||
} as const
|
||||
export type SampleRate = typeof SampleRate[keyof typeof SampleRate]
|
||||
|
||||
export type Speaker = {
|
||||
"id": number,
|
||||
"name": string,
|
||||
}
|
||||
export type Correspondence = {
|
||||
"sid": number,
|
||||
"correspondence": number,
|
||||
"dirname": string
|
||||
}
|
||||
export type VoiceChangerClientSetting = {
|
||||
audioInput: string | MediaStream | null,
|
||||
sampleRate: SampleRate, // 48000Hz
|
||||
@ -495,8 +475,6 @@ export type VoiceChangerClientSetting = {
|
||||
noiseSuppression: boolean,
|
||||
noiseSuppression2: boolean
|
||||
|
||||
speakers: Speaker[],
|
||||
correspondences: Correspondence[],
|
||||
inputGain: number
|
||||
outputGain: number
|
||||
}
|
||||
@ -504,29 +482,6 @@ export type VoiceChangerClientSetting = {
|
||||
export const DefaultVoiceChangerClientSetting: VoiceChangerClientSetting = {
|
||||
audioInput: null,
|
||||
sampleRate: 48000,
|
||||
speakers: [
|
||||
{
|
||||
"id": 0,
|
||||
"name": "user"
|
||||
},
|
||||
{
|
||||
"id": 101,
|
||||
"name": "ずんだもん"
|
||||
},
|
||||
{
|
||||
"id": 102,
|
||||
"name": "そら"
|
||||
},
|
||||
{
|
||||
"id": 103,
|
||||
"name": "めたん"
|
||||
},
|
||||
{
|
||||
"id": 104,
|
||||
"name": "つむぎ"
|
||||
}
|
||||
],
|
||||
correspondences: [],
|
||||
echoCancel: false,
|
||||
noiseSuppression: false,
|
||||
noiseSuppression2: false,
|
||||
@ -555,9 +510,7 @@ export const INDEXEDDB_DB_APP_NAME = "INDEXEDDB_KEY_VOICE_CHANGER"
|
||||
export const INDEXEDDB_DB_NAME = "INDEXEDDB_KEY_VOICE_CHANGER_DB"
|
||||
export const INDEXEDDB_KEY_CLIENT = "INDEXEDDB_KEY_VOICE_CHANGER_LIB_CLIENT"
|
||||
export const INDEXEDDB_KEY_SERVER = "INDEXEDDB_KEY_VOICE_CHANGER_LIB_SERVER"
|
||||
export const INDEXEDDB_KEY_WORKLETNODE = "INDEXEDDB_KEY_VOICE_CHANGER_LIB_WORKLETNODE"
|
||||
export const INDEXEDDB_KEY_MODEL_DATA = "INDEXEDDB_KEY_VOICE_CHANGER_LIB_MODEL_DATA"
|
||||
export const INDEXEDDB_KEY_WORKLET = "INDEXEDDB_KEY_VOICE_CHANGER_LIB_WORKLET"
|
||||
|
||||
|
||||
// ONNX
|
||||
@ -567,9 +520,6 @@ export type OnnxExporterInfo = {
|
||||
"filename": string
|
||||
}
|
||||
|
||||
|
||||
export const MAX_MODEL_SLOT_NUM = 4
|
||||
|
||||
// Merge
|
||||
export type MergeElement = {
|
||||
filename: string
|
||||
|
@ -5,6 +5,7 @@ import { IndexedDBStateAndMethod, useIndexedDB } from "./useIndexedDB"
|
||||
import { ServerSettingState, useServerSetting } from "./useServerSetting"
|
||||
import { useWorkletNodeSetting, WorkletNodeSettingState } from "./useWorkletNodeSetting"
|
||||
import { useWorkletSetting, WorkletSettingState } from "./useWorkletSetting"
|
||||
import { DefaultVoiceChangerClientSetting, DefaultWorkletNodeSetting, DefaultWorkletSetting } from "../const"
|
||||
|
||||
export type UseClientProps = {
|
||||
audioContext: AudioContext | null
|
||||
@ -67,9 +68,9 @@ export const useClient = (props: UseClientProps): ClientState => {
|
||||
|
||||
|
||||
// (1-2) 各種設定I/F
|
||||
const clientSetting = useClientSetting({ voiceChangerClient, audioContext: props.audioContext })
|
||||
const workletNodeSetting = useWorkletNodeSetting({ voiceChangerClient: voiceChangerClient })
|
||||
const workletSetting = useWorkletSetting({ voiceChangerClient })
|
||||
const clientSetting = useClientSetting({ voiceChangerClient, audioContext: props.audioContext, defaultVoiceChangerClientSetting: DefaultVoiceChangerClientSetting })
|
||||
const workletNodeSetting = useWorkletNodeSetting({ voiceChangerClient: voiceChangerClient, defaultWorkletNodeSetting: DefaultWorkletNodeSetting })
|
||||
const workletSetting = useWorkletSetting({ voiceChangerClient, defaultWorkletSetting: DefaultWorkletSetting })
|
||||
const serverSetting = useServerSetting({ voiceChangerClient })
|
||||
const indexedDBState = useIndexedDB({ clientType: null })
|
||||
|
||||
@ -179,9 +180,7 @@ export const useClient = (props: UseClientProps): ClientState => {
|
||||
|
||||
|
||||
const clearSetting = async () => {
|
||||
await clientSetting.clearSetting()
|
||||
await workletNodeSetting.clearSetting()
|
||||
await workletSetting.clearSetting()
|
||||
// TBD
|
||||
}
|
||||
|
||||
return {
|
||||
@ -199,8 +198,6 @@ export const useClient = (props: UseClientProps): ClientState => {
|
||||
performance,
|
||||
updatePerformance,
|
||||
|
||||
// setClientType,
|
||||
|
||||
// 情報取得
|
||||
getInfo,
|
||||
|
||||
|
@ -1,17 +1,16 @@
|
||||
import { useState, useMemo, useEffect } from "react"
|
||||
import { useState, useMemo } from "react"
|
||||
|
||||
import { VoiceChangerClientSetting, DefaultVoiceChangerClientSetting, INDEXEDDB_KEY_CLIENT } from "../const"
|
||||
import { VoiceChangerClientSetting } from "../const"
|
||||
import { VoiceChangerClient } from "../VoiceChangerClient"
|
||||
import { useIndexedDB } from "./useIndexedDB"
|
||||
|
||||
export type UseClientSettingProps = {
|
||||
voiceChangerClient: VoiceChangerClient | null
|
||||
audioContext: AudioContext | null
|
||||
defaultVoiceChangerClientSetting: VoiceChangerClientSetting
|
||||
}
|
||||
|
||||
export type ClientSettingState = {
|
||||
clientSetting: VoiceChangerClientSetting;
|
||||
clearSetting: () => Promise<void>
|
||||
setServerUrl: (url: string) => void;
|
||||
updateClientSetting: (clientSetting: VoiceChangerClientSetting) => void
|
||||
|
||||
@ -21,53 +20,7 @@ export type ClientSettingState = {
|
||||
}
|
||||
|
||||
export const useClientSetting = (props: UseClientSettingProps): ClientSettingState => {
|
||||
const [clientSetting, setClientSetting] = useState<VoiceChangerClientSetting>(DefaultVoiceChangerClientSetting)
|
||||
const { setItem, getItem, removeItem } = useIndexedDB({ clientType: null })
|
||||
|
||||
// 初期化 その1 DBから取得
|
||||
useEffect(() => {
|
||||
const loadCache = async () => {
|
||||
const setting = await getItem(INDEXEDDB_KEY_CLIENT) as VoiceChangerClientSetting
|
||||
if (!setting) {
|
||||
return
|
||||
}
|
||||
|
||||
console.log("[ClientSetting] Load Setting from db", setting)
|
||||
if (setting.audioInput == "null") {
|
||||
setting.audioInput = null
|
||||
}
|
||||
if (setting) {
|
||||
setClientSetting({ ...setting })
|
||||
}
|
||||
}
|
||||
loadCache()
|
||||
}, [])
|
||||
// 初期化 その2 クライアントに設定
|
||||
useEffect(() => {
|
||||
const initialSetup = async () => {
|
||||
if (!props.voiceChangerClient) return
|
||||
try {
|
||||
await props.voiceChangerClient.updateClientSetting(clientSetting)
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
}
|
||||
}
|
||||
initialSetup()
|
||||
}, [props.voiceChangerClient])
|
||||
|
||||
|
||||
const storeSetting = async (setting: VoiceChangerClientSetting) => {
|
||||
const storeData = { ...setting }
|
||||
if (typeof storeData.audioInput != "string") {
|
||||
storeData.audioInput = null
|
||||
}
|
||||
setItem(INDEXEDDB_KEY_CLIENT, storeData)
|
||||
setClientSetting(setting)
|
||||
}
|
||||
|
||||
const clearSetting = async () => {
|
||||
await removeItem(INDEXEDDB_KEY_CLIENT)
|
||||
}
|
||||
const [clientSetting, setClientSetting] = useState<VoiceChangerClientSetting>(props.defaultVoiceChangerClientSetting)
|
||||
|
||||
//////////////
|
||||
// 設定
|
||||
@ -79,7 +32,7 @@ export const useClientSetting = (props: UseClientSettingProps): ClientSettingSta
|
||||
const cur_v = clientSetting[k as keyof VoiceChangerClientSetting]
|
||||
const new_v = _clientSetting[k as keyof VoiceChangerClientSetting]
|
||||
if (cur_v != new_v) {
|
||||
storeSetting(_clientSetting)
|
||||
setClientSetting(_clientSetting)
|
||||
await props.voiceChangerClient.updateClientSetting(_clientSetting)
|
||||
break
|
||||
}
|
||||
@ -122,7 +75,6 @@ export const useClientSetting = (props: UseClientSettingProps): ClientSettingSta
|
||||
|
||||
return {
|
||||
clientSetting,
|
||||
clearSetting,
|
||||
setServerUrl,
|
||||
updateClientSetting,
|
||||
|
||||
|
@ -1,16 +1,16 @@
|
||||
import { useState, useMemo, useEffect } from "react"
|
||||
import { useState, useMemo } from "react"
|
||||
|
||||
import { DefaultWorkletNodeSetting, INDEXEDDB_KEY_WORKLETNODE, WorkletNodeSetting } from "../const"
|
||||
import { WorkletNodeSetting } from "../const"
|
||||
import { VoiceChangerClient } from "../VoiceChangerClient"
|
||||
import { useIndexedDB } from "./useIndexedDB"
|
||||
|
||||
|
||||
export type UseWorkletNodeSettingProps = {
|
||||
voiceChangerClient: VoiceChangerClient | null
|
||||
defaultWorkletNodeSetting: WorkletNodeSetting
|
||||
}
|
||||
|
||||
export type WorkletNodeSettingState = {
|
||||
workletNodeSetting: WorkletNodeSetting;
|
||||
clearSetting: () => Promise<void>
|
||||
updateWorkletNodeSetting: (setting: WorkletNodeSetting) => void
|
||||
startOutputRecording: () => void
|
||||
stopOutputRecording: () => Promise<Float32Array>
|
||||
@ -18,36 +18,8 @@ export type WorkletNodeSettingState = {
|
||||
}
|
||||
|
||||
export const useWorkletNodeSetting = (props: UseWorkletNodeSettingProps): WorkletNodeSettingState => {
|
||||
const defaultWorkletNodeSetting = useMemo(() => {
|
||||
return DefaultWorkletNodeSetting
|
||||
}, [])
|
||||
|
||||
const [workletNodeSetting, _setWorkletNodeSetting] = useState<WorkletNodeSetting>(defaultWorkletNodeSetting)
|
||||
const { setItem, getItem, removeItem } = useIndexedDB({ clientType: null })
|
||||
|
||||
// 初期化 その1 DBから取得
|
||||
useEffect(() => {
|
||||
const loadCache = async () => {
|
||||
const setting = await getItem(INDEXEDDB_KEY_WORKLETNODE) as WorkletNodeSetting
|
||||
if (setting) {
|
||||
_setWorkletNodeSetting({ ...setting, sendingSampleRate: 48000 }) // sample rateは時限措置
|
||||
}
|
||||
}
|
||||
loadCache()
|
||||
}, [])
|
||||
|
||||
// 初期化 その2 クライアントに設定
|
||||
useEffect(() => {
|
||||
if (!props.voiceChangerClient) return
|
||||
props.voiceChangerClient.setServerUrl(workletNodeSetting.serverUrl)
|
||||
props.voiceChangerClient.updateWorkletNodeSetting(workletNodeSetting)
|
||||
}, [props.voiceChangerClient])
|
||||
|
||||
|
||||
|
||||
const clearSetting = async () => {
|
||||
await removeItem(INDEXEDDB_KEY_WORKLETNODE)
|
||||
}
|
||||
const [workletNodeSetting, _setWorkletNodeSetting] = useState<WorkletNodeSetting>(props.defaultWorkletNodeSetting)
|
||||
|
||||
//////////////
|
||||
// 設定
|
||||
@ -61,7 +33,6 @@ export const useWorkletNodeSetting = (props: UseWorkletNodeSettingProps): Workle
|
||||
const new_v = _workletNodeSetting[k as keyof WorkletNodeSetting]
|
||||
if (cur_v != new_v) {
|
||||
_setWorkletNodeSetting(_workletNodeSetting)
|
||||
setItem(INDEXEDDB_KEY_WORKLETNODE, _workletNodeSetting)
|
||||
props.voiceChangerClient.updateWorkletNodeSetting(_workletNodeSetting)
|
||||
break
|
||||
}
|
||||
@ -92,7 +63,6 @@ export const useWorkletNodeSetting = (props: UseWorkletNodeSettingProps): Workle
|
||||
|
||||
return {
|
||||
workletNodeSetting,
|
||||
clearSetting,
|
||||
updateWorkletNodeSetting,
|
||||
startOutputRecording,
|
||||
stopOutputRecording,
|
||||
|
@ -1,51 +1,20 @@
|
||||
import { useState, useMemo, useEffect } from "react"
|
||||
import { WorkletSetting, DefaultWorkletSetting, INDEXEDDB_KEY_WORKLET } from "../const";
|
||||
import { WorkletSetting } from "../const";
|
||||
import { VoiceChangerClient } from "../VoiceChangerClient";
|
||||
import { useIndexedDB } from "./useIndexedDB";
|
||||
|
||||
export type UseWorkletSettingProps = {
|
||||
voiceChangerClient: VoiceChangerClient | null
|
||||
defaultWorkletSetting: WorkletSetting
|
||||
}
|
||||
|
||||
export type WorkletSettingState = {
|
||||
setting: WorkletSetting;
|
||||
clearSetting: () => Promise<void>
|
||||
setSetting: (setting: WorkletSetting) => void;
|
||||
|
||||
}
|
||||
|
||||
export const useWorkletSetting = (props: UseWorkletSettingProps): WorkletSettingState => {
|
||||
const [setting, _setSetting] = useState<WorkletSetting>(DefaultWorkletSetting)
|
||||
const { setItem, getItem, removeItem } = useIndexedDB({ clientType: null })
|
||||
// DBから設定取得(キャッシュによる初期化)
|
||||
useEffect(() => {
|
||||
const loadCache = async () => {
|
||||
const setting = await getItem(INDEXEDDB_KEY_WORKLET)
|
||||
if (!setting) {
|
||||
// デフォルト設定
|
||||
const params = new URLSearchParams(location.search);
|
||||
const colab = params.get("colab")
|
||||
if (colab == "true") {
|
||||
_setSetting({
|
||||
numTrancateTreshold: 300,
|
||||
volTrancateThreshold: 0.0005,
|
||||
volTrancateLength: 32,
|
||||
})
|
||||
} else {
|
||||
_setSetting({
|
||||
numTrancateTreshold: 100,
|
||||
volTrancateThreshold: 0.0005,
|
||||
volTrancateLength: 32,
|
||||
})
|
||||
}
|
||||
} else {
|
||||
_setSetting({
|
||||
...(setting as WorkletSetting)
|
||||
})
|
||||
}
|
||||
}
|
||||
loadCache()
|
||||
}, [])
|
||||
const [setting, _setSetting] = useState<WorkletSetting>(props.defaultWorkletSetting)
|
||||
|
||||
// クライアントへ設定反映 初期化, 設定変更
|
||||
useEffect(() => {
|
||||
@ -58,20 +27,11 @@ export const useWorkletSetting = (props: UseWorkletSettingProps): WorkletSetting
|
||||
return (setting: WorkletSetting) => {
|
||||
if (!props.voiceChangerClient) return
|
||||
_setSetting(setting)
|
||||
setItem(INDEXEDDB_KEY_WORKLET, setting)
|
||||
}
|
||||
}, [props.voiceChangerClient])
|
||||
|
||||
// その他 オペレーション
|
||||
const clearSetting = async () => {
|
||||
await removeItem(INDEXEDDB_KEY_WORKLET)
|
||||
}
|
||||
|
||||
|
||||
return {
|
||||
setting,
|
||||
clearSetting,
|
||||
setSetting,
|
||||
|
||||
}
|
||||
}
|
@ -4,5 +4,4 @@ export * from "./VoiceChangerClient"
|
||||
export * from "./util"
|
||||
export * from "./hooks/useClient"
|
||||
export * from "./hooks/useIndexedDB"
|
||||
export * from "./License"
|
||||
export * from "./hooks/useServerSetting"
|
@ -74,7 +74,7 @@ class VoiceChangerWorkletProcessor extends AudioWorkletProcessor {
|
||||
this.numTrancateTreshold = request.numTrancateTreshold
|
||||
// this.volTrancateLength = request.volTrancateLength
|
||||
// this.volTrancateThreshold = request.volTrancateThreshold
|
||||
console.log("[worklet] worklet configured", request)
|
||||
// console.log("[worklet] worklet configured", request)
|
||||
return
|
||||
} else if (request.requestType === "start") {
|
||||
if (this.isRecording) {
|
||||
|
Loading…
Reference in New Issue
Block a user