tts-config.tsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. import { TTSConfig, TTSConfigValidator } from "../store";
  2. import Locale from "../locales";
  3. import { ListItem, Select } from "./ui-lib";
  4. import {
  5. DEFAULT_TTS_ENGINE,
  6. DEFAULT_TTS_ENGINES,
  7. DEFAULT_TTS_MODELS,
  8. DEFAULT_TTS_VOICES,
  9. } from "../constant";
  10. import { InputRange } from "./input-range";
  11. export function TTSConfigList(props: {
  12. ttsConfig: TTSConfig;
  13. updateConfig: (updater: (config: TTSConfig) => void) => void;
  14. }) {
  15. return (
  16. <>
  17. <ListItem
  18. title={Locale.Settings.TTS.Enable.Title}
  19. subTitle={Locale.Settings.TTS.Enable.SubTitle}
  20. >
  21. <input
  22. type="checkbox"
  23. checked={props.ttsConfig.enable}
  24. onChange={(e) =>
  25. props.updateConfig(
  26. (config) => (config.enable = e.currentTarget.checked),
  27. )
  28. }
  29. ></input>
  30. </ListItem>
  31. {/* <ListItem
  32. title={Locale.Settings.TTS.Autoplay.Title}
  33. subTitle={Locale.Settings.TTS.Autoplay.SubTitle}
  34. >
  35. <input
  36. type="checkbox"
  37. checked={props.ttsConfig.autoplay}
  38. onChange={(e) =>
  39. props.updateConfig(
  40. (config) => (config.autoplay = e.currentTarget.checked),
  41. )
  42. }
  43. ></input>
  44. </ListItem> */}
  45. <ListItem title={Locale.Settings.TTS.Engine}>
  46. <Select
  47. value={props.ttsConfig.engine}
  48. onChange={(e) => {
  49. props.updateConfig(
  50. (config) =>
  51. (config.engine = TTSConfigValidator.engine(
  52. e.currentTarget.value,
  53. )),
  54. );
  55. }}
  56. >
  57. {DEFAULT_TTS_ENGINES.map((v, i) => (
  58. <option value={v} key={i}>
  59. {v}
  60. </option>
  61. ))}
  62. </Select>
  63. </ListItem>
  64. {props.ttsConfig.engine === DEFAULT_TTS_ENGINE && (
  65. <>
  66. <ListItem title={Locale.Settings.TTS.Model}>
  67. <Select
  68. value={props.ttsConfig.model}
  69. onChange={(e) => {
  70. props.updateConfig(
  71. (config) =>
  72. (config.model = TTSConfigValidator.model(
  73. e.currentTarget.value,
  74. )),
  75. );
  76. }}
  77. >
  78. {DEFAULT_TTS_MODELS.map((v, i) => (
  79. <option value={v} key={i}>
  80. {v}
  81. </option>
  82. ))}
  83. </Select>
  84. </ListItem>
  85. <ListItem
  86. title={Locale.Settings.TTS.Voice.Title}
  87. subTitle={Locale.Settings.TTS.Voice.SubTitle}
  88. >
  89. <Select
  90. value={props.ttsConfig.voice}
  91. onChange={(e) => {
  92. props.updateConfig(
  93. (config) =>
  94. (config.voice = TTSConfigValidator.voice(
  95. e.currentTarget.value,
  96. )),
  97. );
  98. }}
  99. >
  100. {DEFAULT_TTS_VOICES.map((v, i) => (
  101. <option value={v} key={i}>
  102. {v}
  103. </option>
  104. ))}
  105. </Select>
  106. </ListItem>
  107. <ListItem
  108. title={Locale.Settings.TTS.Speed.Title}
  109. subTitle={Locale.Settings.TTS.Speed.SubTitle}
  110. >
  111. <InputRange
  112. aria={Locale.Settings.TTS.Speed.Title}
  113. value={props.ttsConfig.speed?.toFixed(1)}
  114. min="0.3"
  115. max="4.0"
  116. step="0.1"
  117. onChange={(e) => {
  118. props.updateConfig(
  119. (config) =>
  120. (config.speed = TTSConfigValidator.speed(
  121. e.currentTarget.valueAsNumber,
  122. )),
  123. );
  124. }}
  125. ></InputRange>
  126. </ListItem>
  127. </>
  128. )}
  129. </>
  130. );
  131. }