Spaces:
Sleeping
Sleeping
import { TTSConfig, TTSConfigValidator } from "../store"; | |
import Locale from "../locales"; | |
import { ListItem, Select } from "./ui-lib"; | |
import { | |
DEFAULT_TTS_ENGINE, | |
DEFAULT_TTS_ENGINES, | |
DEFAULT_TTS_MODELS, | |
DEFAULT_TTS_VOICES, | |
} from "../constant"; | |
import { InputRange } from "./input-range"; | |
export function TTSConfigList(props: { | |
ttsConfig: TTSConfig; | |
updateConfig: (updater: (config: TTSConfig) => void) => void; | |
}) { | |
return ( | |
<> | |
<ListItem | |
title={Locale.Settings.TTS.Enable.Title} | |
subTitle={Locale.Settings.TTS.Enable.SubTitle} | |
> | |
<input | |
type="checkbox" | |
checked={props.ttsConfig.enable} | |
onChange={(e) => | |
props.updateConfig( | |
(config) => (config.enable = e.currentTarget.checked), | |
) | |
} | |
></input> | |
</ListItem> | |
{/* <ListItem | |
title={Locale.Settings.TTS.Autoplay.Title} | |
subTitle={Locale.Settings.TTS.Autoplay.SubTitle} | |
> | |
<input | |
type="checkbox" | |
checked={props.ttsConfig.autoplay} | |
onChange={(e) => | |
props.updateConfig( | |
(config) => (config.autoplay = e.currentTarget.checked), | |
) | |
} | |
></input> | |
</ListItem> */} | |
<ListItem title={Locale.Settings.TTS.Engine}> | |
<Select | |
value={props.ttsConfig.engine} | |
onChange={(e) => { | |
props.updateConfig( | |
(config) => | |
(config.engine = TTSConfigValidator.engine( | |
e.currentTarget.value, | |
)), | |
); | |
}} | |
> | |
{DEFAULT_TTS_ENGINES.map((v, i) => ( | |
<option value={v} key={i}> | |
{v} | |
</option> | |
))} | |
</Select> | |
</ListItem> | |
{props.ttsConfig.engine === DEFAULT_TTS_ENGINE && ( | |
<> | |
<ListItem title={Locale.Settings.TTS.Model}> | |
<Select | |
value={props.ttsConfig.model} | |
onChange={(e) => { | |
props.updateConfig( | |
(config) => | |
(config.model = TTSConfigValidator.model( | |
e.currentTarget.value, | |
)), | |
); | |
}} | |
> | |
{DEFAULT_TTS_MODELS.map((v, i) => ( | |
<option value={v} key={i}> | |
{v} | |
</option> | |
))} | |
</Select> | |
</ListItem> | |
<ListItem | |
title={Locale.Settings.TTS.Voice.Title} | |
subTitle={Locale.Settings.TTS.Voice.SubTitle} | |
> | |
<Select | |
value={props.ttsConfig.voice} | |
onChange={(e) => { | |
props.updateConfig( | |
(config) => | |
(config.voice = TTSConfigValidator.voice( | |
e.currentTarget.value, | |
)), | |
); | |
}} | |
> | |
{DEFAULT_TTS_VOICES.map((v, i) => ( | |
<option value={v} key={i}> | |
{v} | |
</option> | |
))} | |
</Select> | |
</ListItem> | |
<ListItem | |
title={Locale.Settings.TTS.Speed.Title} | |
subTitle={Locale.Settings.TTS.Speed.SubTitle} | |
> | |
<InputRange | |
aria={Locale.Settings.TTS.Speed.Title} | |
value={props.ttsConfig.speed?.toFixed(1)} | |
min="0.3" | |
max="4.0" | |
step="0.1" | |
onChange={(e) => { | |
props.updateConfig( | |
(config) => | |
(config.speed = TTSConfigValidator.speed( | |
e.currentTarget.valueAsNumber, | |
)), | |
); | |
}} | |
></InputRange> | |
</ListItem> | |
</> | |
)} | |
</> | |
); | |
} | |