tts-params-panel.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import React, { useMemo } from 'react'
  2. import { useTranslation } from 'react-i18next'
  3. import { languages } from '@/i18n/language'
  4. import { PortalSelect } from '@/app/components/base/select'
  5. import cn from '@/utils/classnames'
  6. type Props = {
  7. currentModel: any
  8. language: string
  9. voice: string
  10. onChange: (language: string, voice: string) => void
  11. }
  12. const TTSParamsPanel = ({
  13. currentModel,
  14. language,
  15. voice,
  16. onChange,
  17. }: Props) => {
  18. const { t } = useTranslation()
  19. const voiceList = useMemo(() => {
  20. if (!currentModel)
  21. return []
  22. return currentModel.model_properties.voices.map((item: { mode: any }) => ({
  23. ...item,
  24. value: item.mode,
  25. }))
  26. }, [currentModel])
  27. const setLanguage = (language: string) => {
  28. onChange(language, voice)
  29. }
  30. const setVoice = (voice: string) => {
  31. onChange(language, voice)
  32. }
  33. return (
  34. <>
  35. <div className='mb-3'>
  36. <div className='mb-1 py-1 flex items-center text-text-secondary system-sm-semibold'>
  37. {t('appDebug.voice.voiceSettings.language')}
  38. </div>
  39. <PortalSelect
  40. triggerClassName='h-8'
  41. popupClassName={cn('z-[1000]')}
  42. popupInnerClassName={cn('w-[354px]')}
  43. value={language}
  44. items={languages.filter(item => item.supported)}
  45. onSelect={item => setLanguage(item.value as string)}
  46. />
  47. </div>
  48. <div className='mb-3'>
  49. <div className='mb-1 py-1 flex items-center text-text-secondary system-sm-semibold'>
  50. {t('appDebug.voice.voiceSettings.voice')}
  51. </div>
  52. <PortalSelect
  53. triggerClassName='h-8'
  54. popupClassName={cn('z-[1000]')}
  55. popupInnerClassName={cn('w-[354px]')}
  56. value={voice}
  57. items={voiceList}
  58. onSelect={item => setVoice(item.value as string)}
  59. />
  60. </div>
  61. </>
  62. )
  63. }
  64. export default TTSParamsPanel