import { BufferSize, DownSamplingMode, Protocol, SampleRate, VoiceChangerMode } from "@dannadori/voice-changer-client-js" import React, { useMemo, useState } from "react" import { ClientState } from "@dannadori/voice-changer-client-js"; export type UseAdvancedSettingProps = { clientState: ClientState } export type AdvancedSettingState = { advancedSetting: JSX.Element; } export const useAdvancedSetting = (props: UseAdvancedSettingProps): AdvancedSettingState => { const [showAdvancedSetting, setShowAdvancedSetting] = useState(false) const mmvcServerUrlRow = useMemo(() => { const onSetServerClicked = async () => { const input = document.getElementById("mmvc-server-url") as HTMLInputElement props.clientState.clientSetting.setServerUrl(input.value) } return (
MMVC Server
set
) }, [props.clientState.clientSetting.setting.mmvcServerUrl, props.clientState.clientSetting.setServerUrl]) const protocolRow = useMemo(() => { const onProtocolChanged = async (val: Protocol) => { props.clientState.clientSetting.setProtocol(val) } return (
Protocol
) }, [props.clientState.clientSetting.setting.protocol, props.clientState.clientSetting.setProtocol]) const sampleRateRow = useMemo(() => { return (
Sample Rate
) }, [props.clientState.clientSetting.setting.sampleRate, props.clientState.clientSetting.setSampleRate]) const bufferSizeRow = useMemo(() => { return (
Buffer Size
) }, [props.clientState.clientSetting.setting.bufferSize, props.clientState.clientSetting.setBufferSize]) const convertChunkNumRow = useMemo(() => { return (
Convert Chunk Num(128sample/chunk)
{ props.clientState.serverSetting.setConvertChunkNum(Number(e.target.value)) }} />
) }, [props.clientState.serverSetting.setting.convertChunkNum, props.clientState.serverSetting.setConvertChunkNum]) const minConvertSizeRow = useMemo(() => { return (
Min Convert Size(byte)
{ props.clientState.serverSetting.setMinConvertSize(Number(e.target.value)) }} />
) }, [props.clientState.serverSetting.setting.minConvertSize, props.clientState.serverSetting.setMinConvertSize]) const crossFadeOverlapRateRow = useMemo(() => { return (
Cross Fade Overlap Rate
{ props.clientState.serverSetting.setCrossFadeOverlapRate(Number(e.target.value)) }} />
) }, [props.clientState.serverSetting.setting.crossFadeOverlapRate, props.clientState.serverSetting.setCrossFadeOverlapRate]) const crossFadeOffsetRateRow = useMemo(() => { return (
Cross Fade Offset Rate
{ props.clientState.serverSetting.setCrossFadeOffsetRate(Number(e.target.value)) }} />
) }, [props.clientState.serverSetting.setting.crossFadeOffsetRate, props.clientState.serverSetting.setCrossFadeOffsetRate]) const crossFadeEndRateRow = useMemo(() => { return (
Cross Fade End Rate
{ props.clientState.serverSetting.setCrossFadeEndRate(Number(e.target.value)) }} />
) }, [props.clientState.serverSetting.setting.crossFadeEndRate, props.clientState.serverSetting.setCrossFadeEndRate]) const vfForceDisableRow = useMemo(() => { return (
VF Disabled
{ props.clientState.clientSetting.setVfForceDisabled(e.target.checked) }} />
) }, [props.clientState.clientSetting.setting.forceVfDisable, props.clientState.clientSetting.setVfForceDisabled]) const voiceChangeModeRow = useMemo(() => { return (
Voice Change Mode
) }, [props.clientState.clientSetting.setting.voiceChangerMode, props.clientState.clientSetting.setVoiceChangerMode]) const downSamplingModeRow = useMemo(() => { return (
DownSamplingMode
) }, [props.clientState.clientSetting.setting.downSamplingMode, props.clientState.clientSetting.setDownSamplingMode]) const workletSettingRow = useMemo(() => { return ( <>
Trancate Num
{ props.clientState.workletSetting.setSetting({ ...props.clientState.workletSetting.setting, numTrancateTreshold: Number(e.target.value) }) }} />
{/* v.1.5.xより Silent skipは廃止 */} {/*
Trancate Vol
{ props.clientState.workletSetting.setSetting({ ...props.clientState.workletSetting.setting, volTrancateThreshold: Number(e.target.value) }) }} />
Trancate Vol Length
{ props.clientState.workletSetting.setSetting({ ...props.clientState.workletSetting.setting, volTrancateLength: Number(e.target.value) }) }} />
*/} ) }, [props.clientState.workletSetting.setting, props.clientState.workletSetting.setSetting]) const advanceSettingContent = useMemo(() => { if (!showAdvancedSetting) return <> return ( <>
{mmvcServerUrlRow} {protocolRow}
{sampleRateRow} {bufferSizeRow}
{convertChunkNumRow} {minConvertSizeRow} {crossFadeOverlapRateRow} {crossFadeOffsetRateRow} {crossFadeEndRateRow}
{vfForceDisableRow} {voiceChangeModeRow}
{workletSettingRow}
{downSamplingModeRow} ) }, [showAdvancedSetting, mmvcServerUrlRow, protocolRow, sampleRateRow, bufferSizeRow, convertChunkNumRow, minConvertSizeRow, crossFadeOverlapRateRow, crossFadeOffsetRateRow, crossFadeEndRateRow, vfForceDisableRow, voiceChangeModeRow, workletSettingRow, downSamplingModeRow]) const advancedSetting = useMemo(() => { return ( <>
Advanced Setting
{ setShowAdvancedSetting(e.target.checked) }} /> show
{advanceSettingContent} ) }, [showAdvancedSetting, advanceSettingContent]) return { advancedSetting, } }