voice-changer/client/demo/src/100_options_microphone.tsx

66 lines
2.4 KiB
TypeScript
Raw Normal View History

2023-01-07 14:07:39 +03:00
import * as React from "react";
2023-01-07 18:25:21 +03:00
import { useEffect, useMemo, useState } from "react";
2023-01-08 10:18:20 +03:00
import { AUDIO_ELEMENT_FOR_PLAY_RESULT } from "./const";
2023-01-07 14:07:39 +03:00
import { useServerSetting } from "./101_server_setting";
import { useDeviceSetting } from "./102_device_setting";
import { useConvertSetting } from "./104_convert_setting";
import { useAdvancedSetting } from "./105_advanced_setting";
import { useSpeakerSetting } from "./103_speaker_setting";
import { useClient } from "./hooks/useClient";
import { useServerControl } from "./106_server_control";
export const useMicrophoneOptions = () => {
const [audioContext, setAudioContext] = useState<AudioContext | null>(null)
2023-01-10 18:59:09 +03:00
2023-01-07 18:25:21 +03:00
const clientState = useClient({
audioContext: audioContext,
audioOutputElementId: AUDIO_ELEMENT_FOR_PLAY_RESULT
})
2023-01-10 20:19:54 +03:00
console.log("cs", clientState)
2023-01-07 18:25:21 +03:00
2023-01-10 18:59:09 +03:00
const serverSetting = useServerSetting({ clientState })
const deviceSetting = useDeviceSetting(audioContext, { clientState })
const speakerSetting = useSpeakerSetting({ clientState })
const convertSetting = useConvertSetting({ clientState })
const advancedSetting = useAdvancedSetting({ clientState })
const serverControl = useServerControl({ clientState })
2023-01-07 14:07:39 +03:00
useEffect(() => {
const createAudioContext = () => {
const ctx = new AudioContext()
setAudioContext(ctx)
document.removeEventListener('touchstart', createAudioContext);
document.removeEventListener('mousedown', createAudioContext);
}
document.addEventListener('touchstart', createAudioContext);
document.addEventListener('mousedown', createAudioContext);
}, [])
const voiceChangerSetting = useMemo(() => {
return (
<>
<div className="body-row left-padding-1">
<div className="body-section-title">Virtual Microphone</div>
</div>
{serverControl.serverControl}
{serverSetting.serverSetting}
{deviceSetting.deviceSetting}
{speakerSetting.speakerSetting}
{convertSetting.convertSetting}
{advancedSetting.advancedSetting}
</>
)
}, [serverControl.serverControl,
serverSetting.serverSetting,
deviceSetting.deviceSetting,
speakerSetting.speakerSetting,
convertSetting.convertSetting,
advancedSetting.advancedSetting])
return {
voiceChangerSetting,
}
}