import { CrossFadeOverlapSize, DownSamplingMode, InputSampleRate, Protocol, SampleRate } from "@dannadori/voice-changer-client-js" import React, { useMemo } from "react" import { useAppState } from "./001_provider/001_AppStateProvider"; import { AnimationTypes, HeaderButton, HeaderButtonProps } from "./components/101_HeaderButton"; export type AdvancedSettingState = { advancedSetting: JSX.Element; } export const useAdvancedSetting = (): AdvancedSettingState => { const appState = useAppState() const accodionButton = useMemo(() => { const accodionButtonProps: HeaderButtonProps = { stateControlCheckbox: appState.frontendManagerState.stateControls.openAdvancedSettingCheckbox, tooltip: "Open/Close", onIcon: ["fas", "caret-up"], offIcon: ["fas", "caret-up"], animation: AnimationTypes.spinner, tooltipClass: "tooltip-right", }; return ; }, []); const mmvcServerUrlRow = useMemo(() => { const onSetServerClicked = async () => { const input = document.getElementById("mmvc-server-url") as HTMLInputElement appState.clientSetting.setServerUrl(input.value) } return (
MMVC Server
set
) }, [appState.workletNodeSetting.workletNodeSetting.serverUrl, appState.clientSetting.setServerUrl]) const protocolRow = useMemo(() => { const onProtocolChanged = async (val: Protocol) => { appState.workletNodeSetting.updateWorkletNodeSetting({ ...appState.workletNodeSetting.workletNodeSetting, protocol: val }) } return (
Protocol
) }, [appState.workletNodeSetting.workletNodeSetting.protocol, appState.workletNodeSetting.updateWorkletNodeSetting]) const sampleRateRow = useMemo(() => { return (
Sample Rate
) }, [appState.clientSetting.clientSetting.sampleRate, appState.clientSetting.updateClientSetting]) const sendingSampleRateRow = useMemo(() => { return (
Sending Sample Rate
) }, [appState.workletNodeSetting.workletNodeSetting.sendingSampleRate, appState.workletNodeSetting.updateWorkletNodeSetting, appState.serverSetting.updateServerSettings]) const crossFadeOverlapSizeRow = useMemo(() => { return (
Cross Fade Overlap Size
) }, [appState.serverSetting.serverSetting.crossFadeOverlapSize, appState.serverSetting.updateServerSettings]) const crossFadeOffsetRateRow = useMemo(() => { return (
Cross Fade Offset Rate
{ appState.serverSetting.updateServerSettings({ ...appState.serverSetting.serverSetting, crossFadeOffsetRate: Number(e.target.value) }) }} />
) }, [appState.serverSetting.serverSetting.crossFadeOffsetRate, appState.serverSetting.updateServerSettings]) const crossFadeEndRateRow = useMemo(() => { return (
Cross Fade End Rate
{ appState.serverSetting.updateServerSettings({ ...appState.serverSetting.serverSetting, crossFadeEndRate: Number(e.target.value) }) }} />
) }, [appState.serverSetting.serverSetting.crossFadeEndRate, appState.serverSetting.updateServerSettings]) const downSamplingModeRow = useMemo(() => { return (
DownSamplingMode
) }, [appState.workletNodeSetting.workletNodeSetting.downSamplingMode, appState.workletNodeSetting.updateWorkletNodeSetting]) const workletSettingRow = useMemo(() => { return ( <>
Trancate Num
{ appState.workletSetting.setSetting({ ...appState.workletSetting.setting, numTrancateTreshold: Number(e.target.value) }) }} />
{/* v.1.5.xより Silent skipは廃止 */} {/*
Trancate Vol
{ appState.workletSetting.setSetting({ ...appState.workletSetting.setting, volTrancateThreshold: Number(e.target.value) }) }} />
Trancate Vol Length
{ appState.workletSetting.setSetting({ ...appState.workletSetting.setting, volTrancateLength: Number(e.target.value) }) }} />
*/} ) }, [appState.workletSetting.setting, appState.workletSetting.setSetting]) const advanceSettingContent = useMemo(() => { return ( <>
{mmvcServerUrlRow} {protocolRow}
{sampleRateRow} {sendingSampleRateRow}
{crossFadeOverlapSizeRow} {crossFadeOffsetRateRow} {crossFadeEndRateRow}
{workletSettingRow}
{downSamplingModeRow} ) }, [mmvcServerUrlRow, protocolRow, sampleRateRow, sendingSampleRateRow, crossFadeOverlapSizeRow, crossFadeOffsetRateRow, crossFadeEndRateRow, workletSettingRow, downSamplingModeRow]) const advancedSetting = useMemo(() => { return ( <> {appState.frontendManagerState.stateControls.openAdvancedSettingCheckbox.trigger}
{accodionButton} { appState.frontendManagerState.stateControls.openAdvancedSettingCheckbox.updateState(!appState.frontendManagerState.stateControls.openAdvancedSettingCheckbox.checked()) }}> Advanced Setting
{advanceSettingContent}
) }, [advanceSettingContent]) return { advancedSetting, } }