univoice 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (405) hide show
  1. package/README.md +211 -0
  2. package/dist/{base-BsWrB3Ae.d.ts → base--a8Bo2f0.d.ts} +48 -7
  3. package/dist/base-Bae_riVx.d.ts +191 -0
  4. package/dist/{chunk-IDAZ5B4H.js → chunk-CM7VAOIV.js} +359 -71
  5. package/dist/chunk-CM7VAOIV.js.map +1 -0
  6. package/dist/{chunk-B5H2N2DT.js → chunk-RRXTYGBU.js} +981 -10
  7. package/dist/chunk-RRXTYGBU.js.map +1 -0
  8. package/dist/chunk-TY2HDS4F.js +304 -0
  9. package/dist/chunk-TY2HDS4F.js.map +1 -0
  10. package/dist/{qwen-C0osjLg0.d.ts → qwen-0GGX_nkP.d.ts} +13 -6
  11. package/dist/{qwen-DUJgbnDy.d.ts → qwen-DzZEciEh.d.ts} +16 -9
  12. package/dist/{save-BrWMA1TW.d.ts → save-DGQVjHM1.d.ts} +25 -3
  13. package/dist/src/asr/index.d.ts +4 -3
  14. package/dist/src/asr/index.js +2 -2
  15. package/dist/src/asr/providers/index.d.ts +4 -3
  16. package/dist/src/asr/providers/index.js +2 -2
  17. package/dist/src/asr/providers/index.js.map +1 -1
  18. package/dist/src/index.d.ts +4 -4
  19. package/dist/src/index.js +3 -3
  20. package/dist/src/tts/index.d.ts +4 -3
  21. package/dist/src/tts/index.js +1 -1
  22. package/dist/src/tts/providers/index.d.ts +23 -4
  23. package/dist/src/tts/providers/index.js +1 -1
  24. package/dist/{tee-Bo5N4gEG.d.ts → tee-BufkUu6s.d.ts} +2 -2
  25. package/examples/README.md +150 -130
  26. package/examples/{ogg-to-asr-demo.ts → asr/advanced/ogg-to-asr.ts} +10 -3
  27. package/examples/{opus-packets-to-asr-demo.ts → asr/advanced/opus-packets-to-asr.ts} +7 -21
  28. package/examples/asr/basic/listen-non-stream.ts +51 -0
  29. package/examples/{asr-listen-stream-demo.ts → asr/basic/listen-stream.ts} +2 -2
  30. package/examples/asr/providers/doubao/README.md +103 -0
  31. package/examples/asr/providers/doubao/connect-and-listen.ts +103 -0
  32. package/examples/asr/providers/doubao/direct-instance-stream-in-stream-out.ts +95 -0
  33. package/examples/asr/providers/doubao/non-stream-in-non-stream-out.ts +79 -0
  34. package/examples/asr/providers/doubao/ogg-opus-stream-in-stream-out.ts +101 -0
  35. package/examples/asr/providers/doubao/stream-in-stream-out.ts +101 -0
  36. package/examples/asr/providers/glm/README.md +136 -0
  37. package/examples/asr/providers/glm/basic.ts +40 -0
  38. package/examples/asr/providers/glm/glm-asr-2512/README.md +47 -0
  39. package/examples/asr/providers/glm/glm-asr-2512/direct-instance.ts +117 -0
  40. package/examples/asr/providers/glm/glm-asr-2512/non-stream-in-non-stream-out.ts +81 -0
  41. package/examples/asr/providers/glm/glm-asr-2512/stream-in-stream-out.ts +123 -0
  42. package/examples/asr/providers/openai/basic.ts +52 -0
  43. package/examples/asr/providers/qwen/README.md +154 -0
  44. package/examples/asr/providers/qwen/paraformer-realtime-8k-v1/README.md +60 -0
  45. package/examples/asr/providers/qwen/paraformer-realtime-8k-v1/direct-instance.ts +106 -0
  46. package/examples/asr/providers/qwen/paraformer-realtime-8k-v1/non-stream-in-non-stream-out.ts +82 -0
  47. package/examples/asr/providers/qwen/paraformer-realtime-8k-v1/stream-in-stream-out.ts +119 -0
  48. package/examples/asr/providers/qwen/paraformer-realtime-v1/README.md +60 -0
  49. package/examples/asr/providers/qwen/paraformer-realtime-v1/direct-instance.ts +106 -0
  50. package/examples/asr/providers/qwen/paraformer-realtime-v1/non-stream-in-non-stream-out.ts +82 -0
  51. package/examples/asr/providers/qwen/paraformer-realtime-v1/stream-in-stream-out.ts +119 -0
  52. package/examples/asr/providers/qwen/paraformer-realtime-v2/README.md +52 -0
  53. package/examples/asr/providers/qwen/paraformer-realtime-v2/connect-and-listen.ts +110 -0
  54. package/examples/asr/providers/qwen/paraformer-realtime-v2/direct-instance.ts +105 -0
  55. package/examples/asr/providers/qwen/paraformer-realtime-v2/non-stream-in-non-stream-out.ts +81 -0
  56. package/examples/asr/providers/qwen/paraformer-realtime-v2/stream-in-stream-out.ts +118 -0
  57. package/examples/assets/16khz_opus_60ms_opus-packets/1.opus +0 -0
  58. package/examples/assets/16khz_opus_60ms_opus-packets/10.opus +0 -0
  59. package/examples/assets/16khz_opus_60ms_opus-packets/100.opus +0 -0
  60. package/examples/assets/16khz_opus_60ms_opus-packets/101.opus +0 -0
  61. package/examples/assets/16khz_opus_60ms_opus-packets/102.opus +0 -0
  62. package/examples/assets/16khz_opus_60ms_opus-packets/103.opus +1 -0
  63. package/examples/assets/16khz_opus_60ms_opus-packets/104.opus +0 -0
  64. package/examples/assets/16khz_opus_60ms_opus-packets/105.opus +0 -0
  65. package/examples/assets/16khz_opus_60ms_opus-packets/106.opus +2 -0
  66. package/examples/assets/16khz_opus_60ms_opus-packets/107.opus +0 -0
  67. package/examples/assets/16khz_opus_60ms_opus-packets/108.opus +0 -0
  68. package/examples/assets/16khz_opus_60ms_opus-packets/109.opus +0 -0
  69. package/examples/assets/16khz_opus_60ms_opus-packets/11.opus +0 -0
  70. package/examples/assets/16khz_opus_60ms_opus-packets/110.opus +0 -0
  71. package/examples/assets/16khz_opus_60ms_opus-packets/111.opus +0 -0
  72. package/examples/assets/16khz_opus_60ms_opus-packets/112.opus +0 -0
  73. package/examples/assets/16khz_opus_60ms_opus-packets/113.opus +0 -0
  74. package/examples/assets/16khz_opus_60ms_opus-packets/114.opus +0 -0
  75. package/examples/assets/16khz_opus_60ms_opus-packets/115.opus +2 -0
  76. package/examples/assets/16khz_opus_60ms_opus-packets/116.opus +0 -0
  77. package/examples/assets/16khz_opus_60ms_opus-packets/117.opus +0 -0
  78. package/examples/assets/16khz_opus_60ms_opus-packets/118.opus +0 -0
  79. package/examples/assets/16khz_opus_60ms_opus-packets/119.opus +0 -0
  80. package/examples/assets/16khz_opus_60ms_opus-packets/12.opus +0 -0
  81. package/examples/assets/16khz_opus_60ms_opus-packets/120.opus +3 -0
  82. package/examples/assets/16khz_opus_60ms_opus-packets/121.opus +0 -0
  83. package/examples/assets/16khz_opus_60ms_opus-packets/122.opus +0 -0
  84. package/examples/assets/16khz_opus_60ms_opus-packets/123.opus +0 -0
  85. package/examples/assets/16khz_opus_60ms_opus-packets/124.opus +5 -0
  86. package/examples/assets/16khz_opus_60ms_opus-packets/125.opus +2 -0
  87. package/examples/assets/16khz_opus_60ms_opus-packets/126.opus +0 -0
  88. package/examples/assets/16khz_opus_60ms_opus-packets/127.opus +0 -0
  89. package/examples/assets/16khz_opus_60ms_opus-packets/128.opus +0 -0
  90. package/examples/assets/16khz_opus_60ms_opus-packets/129.opus +0 -0
  91. package/examples/assets/16khz_opus_60ms_opus-packets/13.opus +2 -0
  92. package/examples/assets/16khz_opus_60ms_opus-packets/130.opus +4 -0
  93. package/examples/assets/16khz_opus_60ms_opus-packets/131.opus +0 -0
  94. package/examples/assets/16khz_opus_60ms_opus-packets/132.opus +0 -0
  95. package/examples/assets/16khz_opus_60ms_opus-packets/133.opus +0 -0
  96. package/examples/assets/16khz_opus_60ms_opus-packets/134.opus +0 -0
  97. package/examples/assets/16khz_opus_60ms_opus-packets/135.opus +0 -0
  98. package/examples/assets/16khz_opus_60ms_opus-packets/136.opus +0 -0
  99. package/examples/assets/16khz_opus_60ms_opus-packets/137.opus +0 -0
  100. package/examples/assets/16khz_opus_60ms_opus-packets/138.opus +0 -0
  101. package/examples/assets/16khz_opus_60ms_opus-packets/139.opus +3 -0
  102. package/examples/assets/16khz_opus_60ms_opus-packets/14.opus +0 -0
  103. package/examples/assets/16khz_opus_60ms_opus-packets/140.opus +0 -0
  104. package/examples/assets/16khz_opus_60ms_opus-packets/141.opus +0 -0
  105. package/examples/assets/16khz_opus_60ms_opus-packets/142.opus +0 -0
  106. package/examples/assets/16khz_opus_60ms_opus-packets/143.opus +0 -0
  107. package/examples/assets/16khz_opus_60ms_opus-packets/144.opus +0 -0
  108. package/examples/assets/16khz_opus_60ms_opus-packets/145.opus +0 -0
  109. package/examples/assets/16khz_opus_60ms_opus-packets/146.opus +0 -0
  110. package/examples/assets/16khz_opus_60ms_opus-packets/147.opus +0 -0
  111. package/examples/assets/16khz_opus_60ms_opus-packets/148.opus +0 -0
  112. package/examples/assets/16khz_opus_60ms_opus-packets/149.opus +0 -0
  113. package/examples/assets/16khz_opus_60ms_opus-packets/15.opus +0 -0
  114. package/examples/assets/16khz_opus_60ms_opus-packets/150.opus +0 -0
  115. package/examples/assets/16khz_opus_60ms_opus-packets/151.opus +0 -0
  116. package/examples/assets/16khz_opus_60ms_opus-packets/152.opus +0 -0
  117. package/examples/assets/16khz_opus_60ms_opus-packets/153.opus +2 -0
  118. package/examples/assets/16khz_opus_60ms_opus-packets/154.opus +0 -0
  119. package/examples/assets/16khz_opus_60ms_opus-packets/155.opus +0 -0
  120. package/examples/assets/16khz_opus_60ms_opus-packets/156.opus +0 -0
  121. package/examples/assets/16khz_opus_60ms_opus-packets/157.opus +0 -0
  122. package/examples/assets/16khz_opus_60ms_opus-packets/158.opus +2 -0
  123. package/examples/assets/16khz_opus_60ms_opus-packets/159.opus +0 -0
  124. package/examples/assets/16khz_opus_60ms_opus-packets/16.opus +2 -0
  125. package/examples/assets/16khz_opus_60ms_opus-packets/160.opus +0 -0
  126. package/examples/assets/16khz_opus_60ms_opus-packets/161.opus +0 -0
  127. package/examples/assets/16khz_opus_60ms_opus-packets/162.opus +1 -0
  128. package/examples/assets/16khz_opus_60ms_opus-packets/163.opus +3 -0
  129. package/examples/assets/16khz_opus_60ms_opus-packets/164.opus +0 -0
  130. package/examples/assets/16khz_opus_60ms_opus-packets/165.opus +0 -0
  131. package/examples/assets/16khz_opus_60ms_opus-packets/166.opus +0 -0
  132. package/examples/assets/16khz_opus_60ms_opus-packets/167.opus +0 -0
  133. package/examples/assets/16khz_opus_60ms_opus-packets/168.opus +2 -0
  134. package/examples/assets/16khz_opus_60ms_opus-packets/169.opus +0 -0
  135. package/examples/assets/16khz_opus_60ms_opus-packets/17.opus +0 -0
  136. package/examples/assets/16khz_opus_60ms_opus-packets/170.opus +0 -0
  137. package/examples/assets/16khz_opus_60ms_opus-packets/171.opus +0 -0
  138. package/examples/assets/16khz_opus_60ms_opus-packets/172.opus +0 -0
  139. package/examples/assets/16khz_opus_60ms_opus-packets/173.opus +0 -0
  140. package/examples/assets/16khz_opus_60ms_opus-packets/174.opus +4 -0
  141. package/examples/assets/16khz_opus_60ms_opus-packets/175.opus +0 -0
  142. package/examples/assets/16khz_opus_60ms_opus-packets/176.opus +1 -0
  143. package/examples/assets/16khz_opus_60ms_opus-packets/177.opus +1 -0
  144. package/examples/assets/16khz_opus_60ms_opus-packets/178.opus +0 -0
  145. package/examples/assets/16khz_opus_60ms_opus-packets/179.opus +0 -0
  146. package/examples/assets/16khz_opus_60ms_opus-packets/18.opus +0 -0
  147. package/examples/assets/16khz_opus_60ms_opus-packets/180.opus +2 -1
  148. package/examples/assets/16khz_opus_60ms_opus-packets/181.opus +0 -0
  149. package/examples/assets/16khz_opus_60ms_opus-packets/182.opus +0 -0
  150. package/examples/assets/16khz_opus_60ms_opus-packets/183.opus +0 -0
  151. package/examples/assets/16khz_opus_60ms_opus-packets/184.opus +0 -0
  152. package/examples/assets/16khz_opus_60ms_opus-packets/185.opus +0 -0
  153. package/examples/assets/16khz_opus_60ms_opus-packets/186.opus +0 -0
  154. package/examples/assets/16khz_opus_60ms_opus-packets/187.opus +0 -0
  155. package/examples/assets/16khz_opus_60ms_opus-packets/188.opus +3 -0
  156. package/examples/assets/16khz_opus_60ms_opus-packets/189.opus +0 -0
  157. package/examples/assets/16khz_opus_60ms_opus-packets/19.opus +0 -0
  158. package/examples/assets/16khz_opus_60ms_opus-packets/190.opus +0 -0
  159. package/examples/assets/16khz_opus_60ms_opus-packets/191.opus +0 -0
  160. package/examples/assets/16khz_opus_60ms_opus-packets/192.opus +0 -0
  161. package/examples/assets/16khz_opus_60ms_opus-packets/193.opus +0 -0
  162. package/examples/assets/16khz_opus_60ms_opus-packets/194.opus +0 -0
  163. package/examples/assets/16khz_opus_60ms_opus-packets/195.opus +0 -0
  164. package/examples/assets/16khz_opus_60ms_opus-packets/196.opus +0 -0
  165. package/examples/assets/16khz_opus_60ms_opus-packets/197.opus +2 -0
  166. package/examples/assets/16khz_opus_60ms_opus-packets/198.opus +0 -0
  167. package/examples/assets/16khz_opus_60ms_opus-packets/199.opus +0 -0
  168. package/examples/assets/16khz_opus_60ms_opus-packets/2.opus +0 -0
  169. package/examples/assets/16khz_opus_60ms_opus-packets/20.opus +0 -0
  170. package/examples/assets/16khz_opus_60ms_opus-packets/200.opus +0 -0
  171. package/examples/assets/16khz_opus_60ms_opus-packets/201.opus +0 -0
  172. package/examples/assets/16khz_opus_60ms_opus-packets/202.opus +2 -0
  173. package/examples/assets/16khz_opus_60ms_opus-packets/203.opus +0 -0
  174. package/examples/assets/16khz_opus_60ms_opus-packets/204.opus +0 -0
  175. package/examples/assets/16khz_opus_60ms_opus-packets/205.opus +0 -0
  176. package/examples/assets/16khz_opus_60ms_opus-packets/206.opus +0 -0
  177. package/examples/assets/16khz_opus_60ms_opus-packets/207.opus +0 -0
  178. package/examples/assets/16khz_opus_60ms_opus-packets/208.opus +0 -0
  179. package/examples/assets/16khz_opus_60ms_opus-packets/209.opus +2 -0
  180. package/examples/assets/16khz_opus_60ms_opus-packets/21.opus +0 -0
  181. package/examples/assets/16khz_opus_60ms_opus-packets/210.opus +0 -0
  182. package/examples/assets/16khz_opus_60ms_opus-packets/211.opus +2 -0
  183. package/examples/assets/16khz_opus_60ms_opus-packets/212.opus +0 -0
  184. package/examples/assets/16khz_opus_60ms_opus-packets/213.opus +0 -0
  185. package/examples/assets/16khz_opus_60ms_opus-packets/214.opus +0 -0
  186. package/examples/assets/16khz_opus_60ms_opus-packets/215.opus +0 -0
  187. package/examples/assets/16khz_opus_60ms_opus-packets/216.opus +0 -0
  188. package/examples/assets/16khz_opus_60ms_opus-packets/217.opus +4 -0
  189. package/examples/assets/16khz_opus_60ms_opus-packets/218.opus +0 -0
  190. package/examples/assets/16khz_opus_60ms_opus-packets/219.opus +0 -0
  191. package/examples/assets/16khz_opus_60ms_opus-packets/22.opus +0 -0
  192. package/examples/assets/16khz_opus_60ms_opus-packets/220.opus +0 -0
  193. package/examples/assets/16khz_opus_60ms_opus-packets/221.opus +0 -0
  194. package/examples/assets/16khz_opus_60ms_opus-packets/222.opus +5 -0
  195. package/examples/assets/16khz_opus_60ms_opus-packets/223.opus +0 -0
  196. package/examples/assets/16khz_opus_60ms_opus-packets/224.opus +0 -0
  197. package/examples/assets/16khz_opus_60ms_opus-packets/225.opus +0 -0
  198. package/examples/assets/16khz_opus_60ms_opus-packets/226.opus +2 -0
  199. package/examples/assets/16khz_opus_60ms_opus-packets/227.opus +0 -0
  200. package/examples/assets/16khz_opus_60ms_opus-packets/228.opus +0 -0
  201. package/examples/assets/16khz_opus_60ms_opus-packets/229.opus +0 -0
  202. package/examples/assets/16khz_opus_60ms_opus-packets/23.opus +0 -0
  203. package/examples/assets/16khz_opus_60ms_opus-packets/230.opus +0 -0
  204. package/examples/assets/16khz_opus_60ms_opus-packets/231.opus +0 -0
  205. package/examples/assets/16khz_opus_60ms_opus-packets/232.opus +0 -0
  206. package/examples/assets/16khz_opus_60ms_opus-packets/233.opus +3 -0
  207. package/examples/assets/16khz_opus_60ms_opus-packets/234.opus +5 -0
  208. package/examples/assets/16khz_opus_60ms_opus-packets/235.opus +0 -0
  209. package/examples/assets/16khz_opus_60ms_opus-packets/236.opus +0 -0
  210. package/examples/assets/16khz_opus_60ms_opus-packets/237.opus +0 -0
  211. package/examples/assets/16khz_opus_60ms_opus-packets/238.opus +0 -0
  212. package/examples/assets/16khz_opus_60ms_opus-packets/239.opus +0 -0
  213. package/examples/assets/16khz_opus_60ms_opus-packets/24.opus +0 -0
  214. package/examples/assets/16khz_opus_60ms_opus-packets/240.opus +0 -0
  215. package/examples/assets/16khz_opus_60ms_opus-packets/241.opus +0 -0
  216. package/examples/assets/16khz_opus_60ms_opus-packets/242.opus +0 -0
  217. package/examples/assets/16khz_opus_60ms_opus-packets/243.opus +0 -0
  218. package/examples/assets/16khz_opus_60ms_opus-packets/244.opus +0 -0
  219. package/examples/assets/16khz_opus_60ms_opus-packets/245.opus +0 -0
  220. package/examples/assets/16khz_opus_60ms_opus-packets/246.opus +0 -0
  221. package/examples/assets/16khz_opus_60ms_opus-packets/25.opus +0 -0
  222. package/examples/assets/16khz_opus_60ms_opus-packets/26.opus +0 -0
  223. package/examples/assets/16khz_opus_60ms_opus-packets/27.opus +0 -0
  224. package/examples/assets/16khz_opus_60ms_opus-packets/28.opus +0 -0
  225. package/examples/assets/16khz_opus_60ms_opus-packets/29.opus +0 -0
  226. package/examples/assets/16khz_opus_60ms_opus-packets/3.opus +0 -0
  227. package/examples/assets/16khz_opus_60ms_opus-packets/30.opus +0 -0
  228. package/examples/assets/16khz_opus_60ms_opus-packets/31.opus +0 -0
  229. package/examples/assets/16khz_opus_60ms_opus-packets/32.opus +0 -0
  230. package/examples/assets/16khz_opus_60ms_opus-packets/33.opus +0 -0
  231. package/examples/assets/16khz_opus_60ms_opus-packets/34.opus +0 -0
  232. package/examples/assets/16khz_opus_60ms_opus-packets/35.opus +0 -0
  233. package/examples/assets/16khz_opus_60ms_opus-packets/36.opus +3 -0
  234. package/examples/assets/16khz_opus_60ms_opus-packets/37.opus +3 -0
  235. package/examples/assets/16khz_opus_60ms_opus-packets/38.opus +0 -0
  236. package/examples/assets/16khz_opus_60ms_opus-packets/39.opus +0 -0
  237. package/examples/assets/16khz_opus_60ms_opus-packets/4.opus +0 -0
  238. package/examples/assets/16khz_opus_60ms_opus-packets/40.opus +0 -0
  239. package/examples/assets/16khz_opus_60ms_opus-packets/41.opus +4 -0
  240. package/examples/assets/16khz_opus_60ms_opus-packets/42.opus +0 -0
  241. package/examples/assets/16khz_opus_60ms_opus-packets/43.opus +2 -0
  242. package/examples/assets/16khz_opus_60ms_opus-packets/44.opus +0 -0
  243. package/examples/assets/16khz_opus_60ms_opus-packets/45.opus +0 -0
  244. package/examples/assets/16khz_opus_60ms_opus-packets/46.opus +2 -0
  245. package/examples/assets/16khz_opus_60ms_opus-packets/47.opus +0 -0
  246. package/examples/assets/16khz_opus_60ms_opus-packets/48.opus +0 -0
  247. package/examples/assets/16khz_opus_60ms_opus-packets/49.opus +0 -0
  248. package/examples/assets/16khz_opus_60ms_opus-packets/5.opus +0 -0
  249. package/examples/assets/16khz_opus_60ms_opus-packets/50.opus +0 -0
  250. package/examples/assets/16khz_opus_60ms_opus-packets/51.opus +0 -0
  251. package/examples/assets/16khz_opus_60ms_opus-packets/52.opus +0 -0
  252. package/examples/assets/16khz_opus_60ms_opus-packets/53.opus +0 -0
  253. package/examples/assets/16khz_opus_60ms_opus-packets/54.opus +0 -0
  254. package/examples/assets/16khz_opus_60ms_opus-packets/55.opus +0 -0
  255. package/examples/assets/16khz_opus_60ms_opus-packets/56.opus +0 -0
  256. package/examples/assets/16khz_opus_60ms_opus-packets/57.opus +0 -0
  257. package/examples/assets/16khz_opus_60ms_opus-packets/58.opus +0 -0
  258. package/examples/assets/16khz_opus_60ms_opus-packets/59.opus +5 -0
  259. package/examples/assets/16khz_opus_60ms_opus-packets/6.opus +0 -0
  260. package/examples/assets/16khz_opus_60ms_opus-packets/60.opus +0 -0
  261. package/examples/assets/16khz_opus_60ms_opus-packets/61.opus +3 -0
  262. package/examples/assets/16khz_opus_60ms_opus-packets/62.opus +7 -0
  263. package/examples/assets/16khz_opus_60ms_opus-packets/63.opus +0 -0
  264. package/examples/assets/16khz_opus_60ms_opus-packets/64.opus +2 -1
  265. package/examples/assets/16khz_opus_60ms_opus-packets/65.opus +0 -0
  266. package/examples/assets/16khz_opus_60ms_opus-packets/66.opus +0 -0
  267. package/examples/assets/16khz_opus_60ms_opus-packets/67.opus +0 -0
  268. package/examples/assets/16khz_opus_60ms_opus-packets/68.opus +0 -0
  269. package/examples/assets/16khz_opus_60ms_opus-packets/69.opus +0 -0
  270. package/examples/assets/16khz_opus_60ms_opus-packets/7.opus +0 -0
  271. package/examples/assets/16khz_opus_60ms_opus-packets/70.opus +0 -0
  272. package/examples/assets/16khz_opus_60ms_opus-packets/71.opus +2 -0
  273. package/examples/assets/16khz_opus_60ms_opus-packets/72.opus +0 -0
  274. package/examples/assets/16khz_opus_60ms_opus-packets/73.opus +0 -0
  275. package/examples/assets/16khz_opus_60ms_opus-packets/74.opus +0 -0
  276. package/examples/assets/16khz_opus_60ms_opus-packets/75.opus +0 -0
  277. package/examples/assets/16khz_opus_60ms_opus-packets/76.opus +0 -0
  278. package/examples/assets/16khz_opus_60ms_opus-packets/77.opus +0 -0
  279. package/examples/assets/16khz_opus_60ms_opus-packets/78.opus +0 -0
  280. package/examples/assets/16khz_opus_60ms_opus-packets/79.opus +0 -0
  281. package/examples/assets/16khz_opus_60ms_opus-packets/8.opus +0 -0
  282. package/examples/assets/16khz_opus_60ms_opus-packets/80.opus +4 -0
  283. package/examples/assets/16khz_opus_60ms_opus-packets/81.opus +2 -0
  284. package/examples/assets/16khz_opus_60ms_opus-packets/82.opus +0 -0
  285. package/examples/assets/16khz_opus_60ms_opus-packets/83.opus +0 -0
  286. package/examples/assets/16khz_opus_60ms_opus-packets/84.opus +0 -0
  287. package/examples/assets/16khz_opus_60ms_opus-packets/85.opus +0 -0
  288. package/examples/assets/16khz_opus_60ms_opus-packets/86.opus +0 -0
  289. package/examples/assets/16khz_opus_60ms_opus-packets/87.opus +0 -0
  290. package/examples/assets/16khz_opus_60ms_opus-packets/88.opus +0 -0
  291. package/examples/assets/16khz_opus_60ms_opus-packets/89.opus +0 -0
  292. package/examples/assets/16khz_opus_60ms_opus-packets/9.opus +1 -0
  293. package/examples/assets/16khz_opus_60ms_opus-packets/90.opus +0 -0
  294. package/examples/assets/16khz_opus_60ms_opus-packets/91.opus +2 -0
  295. package/examples/assets/16khz_opus_60ms_opus-packets/92.opus +0 -0
  296. package/examples/assets/16khz_opus_60ms_opus-packets/93.opus +0 -0
  297. package/examples/assets/16khz_opus_60ms_opus-packets/94.opus +0 -0
  298. package/examples/assets/16khz_opus_60ms_opus-packets/95.opus +0 -0
  299. package/examples/assets/16khz_opus_60ms_opus-packets/96.opus +0 -0
  300. package/examples/assets/16khz_opus_60ms_opus-packets/97.opus +0 -0
  301. package/examples/assets/16khz_opus_60ms_opus-packets/98.opus +0 -0
  302. package/examples/assets/16khz_opus_60ms_opus-packets/99.opus +0 -0
  303. package/examples/{ogg-to-opus-packets-demo.ts → audio/ogg-to-opus-packets.ts} +4 -5
  304. package/examples/{opus-packets-to-ogg-demo.ts → audio/opus-packets-to-ogg.ts} +5 -6
  305. package/examples/{llm-to-tts-demo.ts → tts/advanced/llm-to-tts.ts} +1 -1
  306. package/examples/tts/basic/speak-stream.ts +194 -0
  307. package/examples/tts/basic/speak-string.ts +193 -0
  308. package/examples/tts/providers/doubao/README.md +96 -0
  309. package/examples/{doubao-tts-demo.ts → tts/providers/doubao/basic.ts} +2 -2
  310. package/examples/tts/providers/doubao/connect-and-speak-stream.ts +98 -0
  311. package/examples/tts/providers/doubao/connect-and-synthesize.ts +83 -0
  312. package/examples/tts/providers/doubao/pcm-output.ts +45 -0
  313. package/examples/tts/providers/doubao/seed-tts-1.0/README.md +56 -0
  314. package/examples/tts/providers/doubao/seed-tts-1.0/direct-instance.ts +89 -0
  315. package/examples/tts/providers/doubao/seed-tts-1.0/non-stream-in-non-stream-out.ts +73 -0
  316. package/examples/tts/providers/doubao/seed-tts-1.0/stream-in-stream-out.ts +89 -0
  317. package/examples/tts/providers/doubao/seed-tts-2.0/README.md +49 -0
  318. package/examples/tts/providers/doubao/seed-tts-2.0/direct-instance.ts +89 -0
  319. package/examples/tts/providers/doubao/seed-tts-2.0/non-stream-in-non-stream-out.ts +73 -0
  320. package/examples/{doubao-tts-speak-string.ts → tts/providers/doubao/seed-tts-2.0/stream-in-stream-out.ts} +22 -10
  321. package/examples/tts/providers/glm/README.md +98 -0
  322. package/examples/{glm-tts-demo.ts → tts/providers/glm/basic.ts} +2 -14
  323. package/examples/tts/providers/glm/glm-tts/README.md +60 -0
  324. package/examples/tts/providers/glm/glm-tts/direct-instance.ts +87 -0
  325. package/examples/tts/providers/glm/glm-tts/non-stream-in-non-stream-out.ts +70 -0
  326. package/examples/tts/providers/glm/glm-tts/stream-in-stream-out.ts +89 -0
  327. package/examples/tts/providers/minimax/README.md +106 -0
  328. package/examples/tts/providers/minimax/basic.ts +48 -0
  329. package/examples/tts/providers/minimax/speech-02/README.md +46 -0
  330. package/examples/tts/providers/minimax/speech-02/direct-instance.ts +86 -0
  331. package/examples/tts/providers/minimax/speech-02/non-stream-in-non-stream-out.ts +76 -0
  332. package/examples/tts/providers/minimax/speech-02/stream-in-stream-out.ts +88 -0
  333. package/examples/tts/providers/minimax/speech-2.6-hd/README.md +46 -0
  334. package/examples/tts/providers/minimax/speech-2.6-hd/direct-instance.ts +86 -0
  335. package/examples/tts/providers/minimax/speech-2.6-hd/non-stream-in-non-stream-out.ts +76 -0
  336. package/examples/tts/providers/minimax/speech-2.6-hd/stream-in-stream-out.ts +88 -0
  337. package/examples/tts/providers/minimax/speech-2.8-hd/README.md +46 -0
  338. package/examples/tts/providers/minimax/speech-2.8-hd/direct-instance.ts +84 -0
  339. package/examples/tts/providers/minimax/speech-2.8-hd/non-stream-in-non-stream-out.ts +76 -0
  340. package/examples/tts/providers/minimax/speech-2.8-hd/stream-in-stream-out.ts +88 -0
  341. package/examples/tts/providers/qwen/README.md +228 -0
  342. package/examples/tts/providers/qwen/basic.ts +134 -0
  343. package/examples/tts/providers/qwen/cosyvoice-v1/README.md +48 -0
  344. package/examples/tts/providers/qwen/cosyvoice-v1/direct-instance.ts +85 -0
  345. package/examples/tts/providers/qwen/cosyvoice-v1/non-stream-in-non-stream-out.ts +69 -0
  346. package/examples/tts/providers/qwen/cosyvoice-v1/stream-in-stream-out.ts +85 -0
  347. package/examples/tts/providers/qwen/cosyvoice-v2/README.md +48 -0
  348. package/examples/tts/providers/qwen/cosyvoice-v2/direct-instance.ts +85 -0
  349. package/examples/tts/providers/qwen/cosyvoice-v2/non-stream-in-non-stream-out.ts +69 -0
  350. package/examples/tts/providers/qwen/cosyvoice-v2/stream-in-stream-out.ts +85 -0
  351. package/examples/tts/providers/qwen/cosyvoice-v3-flash/README.md +48 -0
  352. package/examples/tts/providers/qwen/cosyvoice-v3-flash/connect-and-speak.ts +103 -0
  353. package/examples/tts/providers/qwen/cosyvoice-v3-flash/direct-instance.ts +85 -0
  354. package/examples/tts/providers/qwen/cosyvoice-v3-flash/non-stream-in-non-stream-out.ts +69 -0
  355. package/examples/tts/providers/qwen/cosyvoice-v3-flash/stream-in-stream-out.ts +85 -0
  356. package/examples/tts/providers/qwen/cosyvoice-v3-plus/README.md +48 -0
  357. package/examples/tts/providers/qwen/cosyvoice-v3-plus/direct-instance.ts +87 -0
  358. package/examples/tts/providers/qwen/cosyvoice-v3-plus/non-stream-in-non-stream-out.ts +69 -0
  359. package/examples/tts/providers/qwen/cosyvoice-v3-plus/stream-in-stream-out.ts +85 -0
  360. package/examples/tts/providers/qwen/non-stream-output.ts +157 -0
  361. package/examples/tts/providers/qwen/opus-output.ts +49 -0
  362. package/examples/tts/providers/qwen/qwen3-tts-flash-realtime/README.md +44 -0
  363. package/examples/tts/providers/qwen/qwen3-tts-flash-realtime/direct-instance.ts +85 -0
  364. package/examples/tts/providers/qwen/qwen3-tts-flash-realtime/stream-in-stream-out.ts +86 -0
  365. package/examples/tts/providers/qwen/qwen3-tts-instruct-flash-realtime/README.md +58 -0
  366. package/examples/tts/providers/qwen/qwen3-tts-instruct-flash-realtime/direct-instance.ts +94 -0
  367. package/examples/tts/providers/qwen/qwen3-tts-instruct-flash-realtime/stream-in-stream-out.ts +93 -0
  368. package/examples/tts/providers/qwen/realtime.ts +67 -0
  369. package/examples/tts/providers/qwen/stream-input.ts +110 -0
  370. package/examples/utils/common.ts +129 -9
  371. package/examples/utils/ogg-muxer-stream.ts +9 -409
  372. package/package.json +9 -1
  373. package/dist/base-CfHq7-hs.d.ts +0 -87
  374. package/dist/chunk-B5H2N2DT.js.map +0 -1
  375. package/dist/chunk-IDAZ5B4H.js.map +0 -1
  376. package/dist/chunk-XKOFZUYW.js +0 -38
  377. package/dist/chunk-XKOFZUYW.js.map +0 -1
  378. package/examples/.env.example +0 -23
  379. package/examples/asr-listen-non-stream-demo.ts +0 -55
  380. package/examples/doubao-asr-demo.ts +0 -50
  381. package/examples/doubao-asr-stream-demo.ts +0 -82
  382. package/examples/doubao-asr-stream-pcm-demo.ts +0 -60
  383. package/examples/doubao-asr-streamfrom-file-demo.ts +0 -76
  384. package/examples/doubao-tts-speak-collect.ts +0 -53
  385. package/examples/doubao-tts-speak-non-stream.ts +0 -75
  386. package/examples/doubao-tts-speak-stream-input.ts +0 -94
  387. package/examples/doubao-tts-stream-chunks.ts +0 -57
  388. package/examples/doubao-tts-stream-direct.ts +0 -40
  389. package/examples/extract-opus-from-ogg-demo.ts +0 -29
  390. package/examples/glm-asr-demo.ts +0 -56
  391. package/examples/glm-asr-stream-demo.ts +0 -86
  392. package/examples/glm-tts-stream-demo.ts +0 -65
  393. package/examples/minimax-tts-speak-collect.ts +0 -111
  394. package/examples/minimax-tts-speak-non-stream.ts +0 -88
  395. package/examples/minimax-tts-speak-stream-input.ts +0 -129
  396. package/examples/minimax-tts-speak-string.ts +0 -92
  397. package/examples/openai-stream-demo.ts +0 -71
  398. package/examples/opus-packets-stream-to-asr-demo.ts +0 -145
  399. package/examples/qwen-asr-demo.ts +0 -56
  400. package/examples/qwen-asr-stream-demo.ts +0 -88
  401. package/examples/qwen-asr-stream-input-demo.ts +0 -207
  402. package/examples/qwen-tts-demo.ts +0 -62
  403. package/examples/qwen-tts-speak-stream-input.ts +0 -120
  404. package/examples/qwen-tts-speak-string.ts +0 -91
  405. package/examples/utils/opus-packets-to-pcm-stream.ts +0 -225
package/README.md CHANGED
@@ -476,6 +476,217 @@ const asr = createASR({
476
476
 
477
477
  ---
478
478
 
479
+ <!-- PERFORMANCE_TABLE_START -->
480
+
481
+ # Univoice 性能基准测试报告
482
+
483
+ > ⚠️ **重要说明**
484
+ >
485
+ > 本报告仅反映在使用 **univoice** 时不同服务商和模型之间的**相对性能差异**,仅供参考,不代表服务商和模型的绝对性能。
486
+ >
487
+ > 实际测试结果受多种因素影响,包括但不限于:
488
+ > - 网络波动与延迟
489
+ > - 测试环境与地理位置
490
+ > - univoice 的实现方式
491
+ > - 服务商当前的负载情况
492
+ > - 服务商对模型的迭代
493
+ >
494
+ > 如需评估服务商的真实性能,建议直接使用服务商官方 SDK 进行测试。
495
+
496
+ > 生成时间: 2026/3/29 21:20:30
497
+
498
+ > 环境: Node.js v24.14.0, darwin arm64
499
+
500
+ ## TTS 性能指标
501
+
502
+ ### 场景说明
503
+
504
+ | 场景 | 说明 |
505
+ |------|------|
506
+ | 非流式入/流式出 | 完整文本输入,实时音频流输出 |
507
+ | 非流式入/非流式出 | 完整文本输入,完整音频返回 |
508
+
509
+ ### 指标说明
510
+
511
+ | 指标 | 含义 | 计算方法 | 作用 |
512
+ |------|------|----------|------|
513
+ | 首包延迟 | 从发送请求到收到第一个音频块的时间 | 所有测试首包延迟的平均值 | 反映 TTS 服务的响应速度 |
514
+ | 平均间隔 | 稳定状态下平均每个 chunk 的间隔时间 | (总耗时 - 首包延迟) / (chunk数 - 1) 的平均值 | 反映 TTS 服务吐数据块的节奏 |
515
+ | P50 | 中位数,50% 请求低于此值 | 所有耗时排序后取中位数 | 反映典型请求的性能 |
516
+ | P95 | 95% 请求低于此值 | 所有耗时排序后取第95百分位 | 评估尾部延迟,了解最坏情况 |
517
+ | 标准差 | 延迟的离散程度 | 各耗时与平均值差值的平方的均值的平方根 | 值越小性能越稳定 |
518
+ | 吞吐量 | 每秒处理的字符数 | 文本长度 / 平均耗时(秒) | 值越大处理效率越高 |
519
+
520
+ ### 非流式入/流式出
521
+
522
+ | 服务商 | 模型 | 音色 | 编码格式 | 采样率 (Hz) | 测试次数 | 首包延迟 (ms) | 平均间隔 (ms) | P50 (ms) | P95 (ms) | 标准差 (ms) | 吞吐量 (chars/s) |
523
+ |--------|------|------|----------|-------------|----------|---------------|---------------|----------|----------|-------------|-----------------|
524
+ | 通义千问 | cosyvoice-v3-flash | longanyang | pcm | 8000 | 6 | 624 | 118 | 8726 | 10184 | 838 | 64.1 |
525
+ | 通义千问 | cosyvoice-v3-flash | longanyang | pcm | 16000 | 6 | 556 | 64 | 8586 | 9838 | 3129 | 77.1 |
526
+ | 通义千问 | cosyvoice-v3-flash | longanyang | pcm | 22050 | 6 | 573 | 57 | 8328 | 11354 | 1178 | 65.2 |
527
+ | 通义千问 | cosyvoice-v3-flash | longanyang | pcm | 24000 | 6 | 704 | 67 | 11027 | 12958 | 1619 | 54.0 |
528
+ | 通义千问 | cosyvoice-v3-flash | longanyang | pcm | 44100 | 6 | 532 | 27 | 8558 | 10379 | 3168 | 76.3 |
529
+ | 通义千问 | cosyvoice-v3-flash | longanyang | pcm | 48000 | 6 | 578 | 27 | 8588 | 9112 | 443 | 67.5 |
530
+ | 通义千问 | cosyvoice-v3-flash | longanyang | opus | 8000 | 9 | 729 | 23 | 8813 | 12104 | 1307 | 92.0 |
531
+ | 通义千问 | cosyvoice-v3-flash | longanyang | opus | 16000 | 9 | 760 | 23 | 8797 | 13435 | 3442 | 94.0 |
532
+ | 通义千问 | cosyvoice-v3-flash | longanyang | opus | 22050 | 18 | 测试失败 | - | - | - | - | - |
533
+ | 通义千问 | cosyvoice-v3-flash | longanyang | opus | 24000 | 9 | 821 | 20 | 8368 | 13894 | 3968 | 105.0 |
534
+ | 通义千问 | cosyvoice-v3-flash | longanyang | opus | 44100 | 6 | 测试失败 | - | - | - | - | - |
535
+ | 通义千问 | cosyvoice-v3-flash | longanyang | opus | 48000 | 12 | 662 | 21 | 8402 | *17053* | 4134 | 136.8 |
536
+ | 通义千问 | cosyvoice-v3-plus | longanyang | pcm | 8000 | 6 | 839 | 153 | 11754 | 11923 | 517 | 49.3 |
537
+ | 通义千问 | cosyvoice-v3-plus | longanyang | pcm | 16000 | 6 | 792 | 81 | 11509 | 12051 | 4063 | 59.6 |
538
+ | 通义千问 | cosyvoice-v3-plus | longanyang | pcm | 22050 | 6 | 832 | 69 | 10916 | 11902 | 1025 | 52.8 |
539
+ | 通义千问 | cosyvoice-v3-plus | longanyang | pcm | 24000 | 6 | 868 | 75 | 11809 | 12117 | 195 | 48.2 |
540
+ | 通义千问 | cosyvoice-v3-plus | longanyang | pcm | 44100 | 6 | 801 | 34 | 11631 | 11973 | 3981 | 59.3 |
541
+ | 通义千问 | cosyvoice-v3-plus | longanyang | pcm | 48000 | 6 | 868 | 37 | *11900* | 13024 | 882 | 48.6 |
542
+ | 通义千问 | cosyvoice-v3-plus | longanyang | opus | 8000 | 9 | 1063 | 30 | 11896 | 12627 | 331 | 71.7 |
543
+ | 通义千问 | cosyvoice-v3-plus | longanyang | opus | 16000 | 9 | 902 | 22 | 11514 | 12601 | 4307 | 93.2 |
544
+ | 通义千问 | cosyvoice-v3-plus | longanyang | opus | 22050 | 9 | 测试失败 | - | - | - | - | - |
545
+ | 通义千问 | cosyvoice-v3-plus | longanyang | opus | 24000 | 9 | 819 | 17 | 11060 | 11858 | 5180 | 122.9 |
546
+ | 通义千问 | cosyvoice-v3-plus | longanyang | opus | 44100 | 9 | 测试失败 | - | - | - | - | - |
547
+ | 通义千问 | cosyvoice-v3-plus | longanyang | opus | 48000 | 9 | 846 | 17 | 11501 | 12383 | *5206* | 118.3 |
548
+ | 通义千问 | cosyvoice-v2 | longyingxiao | pcm | 8000 | 6 | 1602 | 99 | 9461 | 12421 | 3538 | 66.8 |
549
+ | 通义千问 | cosyvoice-v2 | longyingxiao | pcm | 16000 | 6 | 1575 | 67 | 9929 | 11489 | 3463 | 65.0 |
550
+ | 通义千问 | cosyvoice-v2 | longyingxiao | pcm | 22050 | 6 | 1299 | 49 | 9829 | 11190 | 3612 | 67.4 |
551
+ | 通义千问 | cosyvoice-v2 | longyingxiao | pcm | 24000 | 6 | 1673 | 60 | 10435 | 11589 | 875 | 54.7 |
552
+ | 通义千问 | cosyvoice-v2 | longyingxiao | pcm | 44100 | 6 | 1299 | 32 | 9563 | 11176 | 917 | 59.3 |
553
+ | 通义千问 | cosyvoice-v2 | longyingxiao | pcm | 48000 | 6 | *1700* | 30 | 10863 | 12202 | 1336 | 53.8 |
554
+ | 通义千问 | cosyvoice-v2 | longyingxiao | opus | 8000 | 6 | 920 | 16 | 8183 | 12148 | 4475 | 85.7 |
555
+ | 通义千问 | cosyvoice-v2 | longyingxiao | opus | 16000 | 6 | 1141 | 15 | 9283 | 10047 | 4008 | 84.3 |
556
+ | 通义千问 | cosyvoice-v2 | longyingxiao | opus | 22050 | 6 | 测试失败 | - | - | - | - | - |
557
+ | 通义千问 | cosyvoice-v2 | longyingxiao | opus | 24000 | 6 | 1443 | 20 | 9942 | 11236 | 3302 | 64.7 |
558
+ | 通义千问 | cosyvoice-v2 | longyingxiao | opus | 44100 | 6 | 测试失败 | - | - | - | - | - |
559
+ | 通义千问 | cosyvoice-v2 | longyingxiao | opus | 48000 | 6 | 1085 | 19 | 9183 | 10977 | 3316 | 70.5 |
560
+ | 通义千问 | cosyvoice-v1 | longwan | pcm | 8000 | 6 | 675 | 114 | 6465 | 6533 | 220 | 89.6 |
561
+ | 通义千问 | cosyvoice-v1 | longwan | pcm | 16000 | 6 | 728 | 58 | 6363 | 6776 | 199 | 88.9 |
562
+ | 通义千问 | cosyvoice-v1 | longwan | pcm | 22050 | 6 | 681 | 43 | 6336 | 7031 | 303 | 88.2 |
563
+ | 通义千问 | cosyvoice-v1 | longwan | pcm | 24000 | 6 | 694 | 39 | 6246 | 7566 | 551 | 87.8 |
564
+ | 通义千问 | cosyvoice-v1 | longwan | pcm | 44100 | 6 | 1029 | 23 | 6641 | 10311 | 1427 | 79.5 |
565
+ | 通义千问 | cosyvoice-v1 | longwan | pcm | 48000 | 6 | 661 | 20 | 6626 | 6753 | 219 | 87.3 |
566
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | pcm | 8000 | 9 | 815 | 127 | 6269 | 7875 | 745 | 132.4 |
567
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | pcm | 16000 | 6 | 903 | 123 | 6208 | 6887 | 337 | 91.3 |
568
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | pcm | 24000 | 4 | 961 | 122 | 6331 | 6854 | 512 | 60.9 |
569
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | pcm | 48000 | 3 | 1274 | 121 | 6379 | 6867 | 415 | 44.8 |
570
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | opus | 8000 | 6 | 1039 | 16 | 6191 | 7811 | 680 | 87.9 |
571
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | opus | 16000 | 4 | 1101 | 16 | 6600 | 6928 | 273 | 57.4 |
572
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | opus | 24000 | 3 | 1078 | 16 | 6665 | 7372 | 446 | *42.0* |
573
+ | qwen-realtime | qwen3-tts-instruct-flash-realtime | Cherry | opus | 48000 | 3 | 941 | 16 | 6339 | 6852 | 346 | 44.5 |
574
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | pcm | 8000 | 3 | 494 | 81 | 3877 | 3883 | 91 | 74.7 |
575
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | pcm | 16000 | 3 | 489 | 85 | 3923 | 4608 | 355 | 69.3 |
576
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | pcm | 24000 | 3 | 450 | 82 | 3951 | 4131 | 125 | 71.8 |
577
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | pcm | 48000 | 3 | 570 | 79 | 3859 | 3861 | 73 | 74.8 |
578
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | opus | 8000 | 3 | 508 | 10 | 3918 | 3987 | 136 | 73.9 |
579
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | opus | 16000 | 3 | 501 | 11 | 3786 | 3846 | 68 | 75.6 |
580
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | opus | 24000 | 3 | 473 | 10 | 3899 | 4131 | 124 | 72.0 |
581
+ | qwen-realtime | qwen3-tts-flash-realtime | Cherry | opus | 48000 | 3 | 457 | 10 | 3807 | 4134 | 176 | 73.3 |
582
+ | qwen-realtime | qwen-tts-realtime | Cherry | pcm | 24000 | 3 | 667 | 63 | 4585 | 4897 | 169 | 61.1 |
583
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | pcm | 8000 | 3 | 679 | 62 | 3082 | 3373 | 156 | 90.3 |
584
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | pcm | 16000 | 3 | 710 | 61 | 3224 | 3297 | 35 | 87.8 |
585
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | pcm | 24000 | 3 | 935 | 112 | 3531 | 9650 | 2997 | 52.6 |
586
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | pcm | 48000 | 3 | 760 | 61 | 3181 | 3397 | 151 | 89.0 |
587
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | ogg_opus | 8000 | 3 | 827 | 60 | 3146 | 3722 | 318 | 86.8 |
588
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | ogg_opus | 16000 | 3 | 653 | 62 | 3254 | 3461 | 231 | 88.9 |
589
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | ogg_opus | 24000 | 3 | 670 | 102 | 3429 | 7919 | 2209 | 59.3 |
590
+ | 豆包 | seed-tts-1.0 | zh_male_lengkugege_emo_v2_mars_bigtts | ogg_opus | 48000 | 3 | 698 | 65 | 3217 | 3603 | 200 | 85.8 |
591
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | pcm | 8000 | 3 | 491 | 65 | 3810 | 3859 | **29 🏆** | 74.6 |
592
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | pcm | 16000 | 3 | 500 | 66 | 3752 | 3832 | 43 | 75.5 |
593
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | pcm | 24000 | 3 | 510 | 65 | 3760 | 3783 | 50 | 76.3 |
594
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | pcm | 48000 | 3 | 560 | 64 | 3770 | 3835 | 43 | 75.4 |
595
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | ogg_opus | 8000 | 3 | 511 | 65 | 3733 | 3798 | 70 | 76.6 |
596
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | ogg_opus | 16000 | 3 | 509 | 65 | 3740 | 3761 | 52 | 76.7 |
597
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | ogg_opus | 24000 | 3 | 514 | 66 | 3810 | 3837 | 41 | 75.1 |
598
+ | 豆包 | seed-tts-2.0 | zh_female_vv_uranus_bigtts | ogg_opus | 48000 | 3 | 476 | 64 | 3631 | 3839 | 125 | 77.7 |
599
+ | MiniMax | speech-2.8-hd | male-qn-qingse | pcm | 8000 | 3 | 399 | 10 | 2496 | 2728 | 112 | 110.9 |
600
+ | MiniMax | speech-2.8-hd | male-qn-qingse | pcm | 16000 | 3 | 431 | 6 | 2533 | 2989 | 295 | 109.6 |
601
+ | MiniMax | speech-2.8-hd | male-qn-qingse | pcm | 22050 | 3 | 458 | 3 | 2203 | 2379 | 88 | 126.4 |
602
+ | MiniMax | speech-2.8-hd | male-qn-qingse | pcm | 24000 | 3 | 453 | 3 | 2281 | 3109 | 436 | 114.0 |
603
+ | MiniMax | speech-2.8-hd | male-qn-qingse | pcm | 32000 | 3 | 490 | 3 | 2781 | 2945 | 288 | 107.0 |
604
+ | MiniMax | speech-2.8-hd | male-qn-qingse | pcm | 44100 | 3 | 465 | 2 | 2323 | 2410 | 61 | 122.2 |
605
+ | MiniMax | speech-2.8-turbo | male-qn-qingse | pcm | 8000 | 3 | **374 🏆** | 8 | **1890 🏆** | **2051 🏆** | 88 | **147.8 🏆** |
606
+ | MiniMax | speech-2.8-turbo | male-qn-qingse | pcm | 16000 | 3 | 419 | 5 | 2528 | 2876 | 367 | 115.7 |
607
+ | MiniMax | speech-2.8-turbo | male-qn-qingse | pcm | 22050 | 3 | 386 | 3 | 2188 | 2298 | 80 | 129.8 |
608
+ | MiniMax | speech-2.8-turbo | male-qn-qingse | pcm | 24000 | 3 | 486 | 3 | 2483 | 2679 | 156 | 114.6 |
609
+ | MiniMax | speech-2.8-turbo | male-qn-qingse | pcm | 32000 | 3 | 395 | 2 | 2382 | 2453 | 169 | 123.9 |
610
+ | MiniMax | speech-2.8-turbo | male-qn-qingse | pcm | 44100 | 3 | 447 | 2 | 2398 | 2489 | 213 | 124.2 |
611
+ | MiniMax | speech-2.6-hd | male-qn-qingse | pcm | 8000 | 3 | 484 | 12 | 2552 | 2889 | 174 | 107.7 |
612
+ | MiniMax | speech-2.6-hd | male-qn-qingse | pcm | 16000 | 3 | 708 | 6 | 2824 | 3097 | 214 | 100.6 |
613
+ | MiniMax | speech-2.6-hd | male-qn-qingse | pcm | 22050 | 3 | 554 | 4 | 2581 | 3188 | 296 | 102.9 |
614
+ | MiniMax | speech-2.6-hd | male-qn-qingse | pcm | 24000 | 3 | 522 | 4 | 2799 | 2902 | 156 | 103.9 |
615
+ | MiniMax | speech-2.6-hd | male-qn-qingse | pcm | 32000 | 3 | 490 | 3 | 2526 | 2707 | 164 | 113.4 |
616
+ | MiniMax | speech-2.6-hd | male-qn-qingse | pcm | 44100 | 3 | 588 | 2 | 2821 | 2943 | 167 | 102.9 |
617
+ | MiniMax | speech-2.6-turbo | male-qn-qingse | pcm | 8000 | 3 | 479 | 9 | 2201 | 2225 | 53 | 131.0 |
618
+ | MiniMax | speech-2.6-turbo | male-qn-qingse | pcm | 16000 | 3 | 511 | 5 | 2203 | 2574 | 196 | 123.9 |
619
+ | MiniMax | speech-2.6-turbo | male-qn-qingse | pcm | 22050 | 3 | 458 | 4 | 2157 | 2740 | 318 | 124.0 |
620
+ | MiniMax | speech-2.6-turbo | male-qn-qingse | pcm | 24000 | 3 | 450 | 3 | 1990 | 2484 | 235 | 132.4 |
621
+ | MiniMax | speech-2.6-turbo | male-qn-qingse | pcm | 32000 | 3 | 526 | 3 | 2291 | 2415 | 86 | 123.7 |
622
+ | MiniMax | speech-2.6-turbo | male-qn-qingse | pcm | 44100 | 3 | 476 | 2 | 2037 | 2113 | 79 | 140.9 |
623
+ | MiniMax | speech-02-hd | male-qn-qingse | pcm | 8000 | 3 | 490 | 15 | 2680 | 3387 | 1141 | 126.5 |
624
+ | MiniMax | speech-02-hd | male-qn-qingse | pcm | 16000 | 3 | 497 | 6 | 2485 | 2625 | 90 | 113.7 |
625
+ | MiniMax | speech-02-hd | male-qn-qingse | pcm | 22050 | 3 | 519 | 4 | 2674 | 2795 | 154 | 108.3 |
626
+ | MiniMax | speech-02-hd | male-qn-qingse | pcm | 24000 | 3 | 528 | 4 | 2785 | 3025 | 116 | 99.6 |
627
+ | MiniMax | speech-02-hd | male-qn-qingse | pcm | 32000 | 3 | 610 | 3 | 2816 | 3432 | 303 | 94.8 |
628
+ | MiniMax | speech-02-hd | male-qn-qingse | pcm | 44100 | 3 | 555 | 2 | 2837 | 3231 | 197 | 96.5 |
629
+ | MiniMax | speech-02-turbo | male-qn-qingse | pcm | 8000 | 3 | 429 | 10 | 1979 | 2730 | 370 | 129.1 |
630
+ | MiniMax | speech-02-turbo | male-qn-qingse | pcm | 16000 | 3 | 456 | 5 | 2026 | 2761 | 431 | 131.0 |
631
+ | MiniMax | speech-02-turbo | male-qn-qingse | pcm | 22050 | 3 | 418 | 4 | 2563 | 2919 | 349 | 113.2 |
632
+ | MiniMax | speech-02-turbo | male-qn-qingse | pcm | 24000 | 3 | 862 | 4 | 2714 | 2877 | 277 | 109.4 |
633
+ | MiniMax | speech-02-turbo | male-qn-qingse | pcm | 32000 | 3 | 424 | 2 | 1995 | 2120 | 75 | 141.2 |
634
+ | MiniMax | speech-02-turbo | male-qn-qingse | pcm | 44100 | 3 | 436 | 2 | 2244 | 2815 | 270 | 117.1 |
635
+ | MiniMax | speech-01-hd | male-qn-qingse | pcm | 8000 | 3 | 484 | 10 | 2247 | 2306 | 30 | 125.9 |
636
+ | MiniMax | speech-01-hd | male-qn-qingse | pcm | 16000 | 3 | 505 | 6 | 2531 | 2559 | 46 | 113.4 |
637
+ | MiniMax | speech-01-hd | male-qn-qingse | pcm | 22050 | 3 | 464 | 4 | 2375 | 2483 | 227 | 125.5 |
638
+ | MiniMax | speech-01-hd | male-qn-qingse | pcm | 24000 | 3 | 538 | 4 | 2325 | 2856 | 266 | 114.8 |
639
+ | MiniMax | speech-01-hd | male-qn-qingse | pcm | 32000 | 3 | 590 | 3 | 2548 | 2634 | 143 | 114.3 |
640
+ | MiniMax | speech-01-hd | male-qn-qingse | pcm | 44100 | 3 | 592 | 2 | 2432 | 2509 | 136 | 119.9 |
641
+ | MiniMax | speech-01-turbo | male-qn-qingse | pcm | 8000 | 3 | 427 | 10 | 2146 | 2243 | 72 | 132.4 |
642
+ | MiniMax | speech-01-turbo | male-qn-qingse | pcm | 16000 | 3 | 516 | 4 | 1965 | 2055 | 59 | 144.1 |
643
+ | MiniMax | speech-01-turbo | male-qn-qingse | pcm | 22050 | 3 | 465 | 4 | 2088 | 2247 | 119 | 135.9 |
644
+ | MiniMax | speech-01-turbo | male-qn-qingse | pcm | 24000 | 3 | 471 | 3 | 2048 | 2201 | 74 | 135.9 |
645
+ | MiniMax | speech-01-turbo | male-qn-qingse | pcm | 32000 | 3 | 490 | 2 | 2101 | 2148 | 99 | 138.6 |
646
+ | MiniMax | speech-01-turbo | male-qn-qingse | pcm | 44100 | 3 | 448 | **2 🏆** | 1920 | 2100 | 99 | 145.2 |
647
+ | 智谱 GLM | glm-tts | tongtong | pcm | 24000 | 3 | 861 | *542* | 5037 | 5614 | 296 | 54.8 |
648
+
649
+ ## ASR 性能指标
650
+
651
+ ### 场景说明
652
+
653
+ | 场景 | 说明 |
654
+ |------|------|
655
+ | 流式入/流式出 | 实时音频流输入,实时识别结果输出 |
656
+ | 非流式入/非流式出 | 完整音频输入,完整结果返回 |
657
+ | 非流式入/流式出 | 完整音频输入,实时识别结果输出 |
658
+
659
+ > **注意**:标记 `*` 的场景使用 WebSocket 流式传输后聚合结果,并非原生非流式。
660
+
661
+ ### 指标说明
662
+
663
+ | 指标 | 含义 | 计算方法 | 作用 |
664
+ |------|------|----------|------|
665
+ | 首包延迟 | 从发送请求到收到第一个识别结果的时间 | 所有测试首包延迟的平均值 | 反映 ASR 服务的响应速度 |
666
+ | 平均间隔 | 稳定状态下平均每个 chunk 的间隔时间 | (总耗时 - 首包延迟) / (chunk数 - 1) 的平均值 | 反映 ASR 服务吐识别结果的节奏 |
667
+ | P50 | 中位数,50% 请求低于此值 | 所有耗时排序后取中位数 | 反映典型请求的性能 |
668
+ | P95 | 95% 请求低于此值 | 所有耗时排序后取第95百分位 | 评估尾部延迟,了解最坏情况 |
669
+ | 标准差 | 延迟的离散程度 | 各耗时与平均值差值的平方的均值的平方根 | 值越小性能越稳定 |
670
+ | RTF | 实时因子,处理时间与音频时长的比值 | 处理耗时 / 音频时长 | 值越小效率越高,<1 表示快于实时 |
671
+ | 准确率 | 识别正确的字符比例 | 正确字符数 / 总字符数 | 值越高识别越准确 |
672
+ | CER | 字符错误率,需编辑操作的字符比例 | (替换+删除+插入) / 总字符数 | 值越低识别越准确 |
673
+
674
+ ### 非流式入/流式出
675
+
676
+ | 服务商 | 模型 | 语言 | 输入格式 | 采样率 (Hz) | 测试次数 | 首包延迟 (ms) | 平均间隔 (ms) | P50 (ms) | P95 (ms) | 标准差 (ms) | RTF |
677
+ |--------|------|------|----------|-------------|----------|---------------|---------------|----------|----------|-------------|-----|
678
+ | 通义千问 | paraformer-realtime-v2 | zh-CN | pcm | 16000 | 3 | *978* | *82* | 685 | *2085* | *666* | *1.32* |
679
+ | 通义千问 | paraformer-realtime-v1 | zh-CN | pcm | 16000 | 3 | **439 🏆** | **29 🏆** | **498 🏆** | **509 🏆** | **10 🏆** | **0.57 🏆** |
680
+ | 豆包 | bigmodel | zh-CN | pcm | 16000 | 3 | 513 | 69 | *904* | 960 | 107 | 0.99 |
681
+
682
+ ---
683
+
684
+ *数据更新于: 2026-03-29*
685
+
686
+ <!-- PERFORMANCE_TABLE_END -->
687
+
688
+ ---
689
+
479
690
  ## 开发指南
480
691
 
481
692
  ### 本地开发
@@ -5,36 +5,61 @@ interface AudioFormat {
5
5
  }
6
6
  type AudioContainerFormat = 'pcm' | 'wav' | 'ogg' | 'mp3';
7
7
  type AudioCodecFormat = 'raw' | 'opus';
8
- interface ASROptions {
9
- provider: string;
8
+ interface BaseASROptions {
10
9
  apiKey?: string;
11
10
  baseUrl?: string;
12
11
  model?: string;
13
12
  language?: string;
14
13
  prompt?: string;
15
14
  responseFormat?: 'json' | 'text' | 'srt' | 'vtt' | 'verbose_json';
15
+ format?: AudioContainerFormat;
16
+ codec?: AudioCodecFormat;
17
+ }
18
+ interface DoubaoASROptions extends BaseASROptions {
16
19
  appKey?: string;
17
20
  accessKey?: string;
18
21
  resourceId?: string;
19
22
  mode?: 'streaming' | 'nostream' | 'async';
20
23
  audioFormat?: AudioFormat;
21
- format?: AudioContainerFormat;
22
- codec?: AudioCodecFormat;
23
24
  segmentDuration?: number;
24
25
  enableItn?: boolean;
25
26
  enablePunc?: boolean;
26
27
  enableDdc?: boolean;
27
28
  showUtterances?: boolean;
29
+ }
30
+ interface QwenASROptions extends BaseASROptions {
31
+ audioFormat?: {
32
+ sampleRate?: number;
33
+ };
34
+ enableItn?: boolean;
35
+ enablePunc?: boolean;
28
36
  enableWords?: boolean;
37
+ }
38
+ interface GlmASROptions extends BaseASROptions {
29
39
  hotwords?: string[];
30
40
  context?: string;
31
41
  }
42
+ type ASROptions = ({
43
+ provider: 'doubao';
44
+ } & DoubaoASROptions) | ({
45
+ provider: 'qwen';
46
+ } & QwenASROptions) | ({
47
+ provider: 'glm';
48
+ } & GlmASROptions) | ({
49
+ provider: 'minimax';
50
+ } & BaseASROptions) | ({
51
+ provider: 'openai';
52
+ } & BaseASROptions) | ({
53
+ provider: 'gemini';
54
+ } & BaseASROptions) | ({
55
+ provider: string;
56
+ } & BaseASROptions);
32
57
  interface ListenInstanceOptions {
33
58
  stream?: boolean;
34
59
  }
35
60
  interface ASRRequest {
36
61
  audio: Buffer | Uint8Array | string;
37
- options?: Partial<ASROptions>;
62
+ options?: Partial<BaseASROptions>;
38
63
  }
39
64
  interface ASRResponse {
40
65
  text: string;
@@ -63,6 +88,21 @@ interface ASRProvider {
63
88
  type ASRProviderType = 'doubao' | 'minimax' | 'qwen' | 'openai' | 'gemini' | string;
64
89
  type AudioStream = AsyncIterable<Buffer | Uint8Array>;
65
90
  type AudioStreamInput = AudioStream | Buffer | Uint8Array | string;
91
+ type ASRConnectionState = 'connected' | 'closed' | 'error';
92
+ interface ASRConnectOptions {
93
+ timeout?: number;
94
+ }
95
+ interface ASRConnection {
96
+ readonly state: ASRConnectionState;
97
+ listen(audio: AudioStreamInput, options: ListenInstanceOptions & {
98
+ stream: true;
99
+ }): AsyncIterable<ASRStreamChunk>;
100
+ listen(audio: AudioStreamInput, options?: ListenInstanceOptions & {
101
+ stream?: false;
102
+ }): Promise<ASRResponse>;
103
+ listen(audio: AudioStreamInput, options?: ListenInstanceOptions): Promise<ASRResponse> | AsyncIterable<ASRStreamChunk>;
104
+ close(): void;
105
+ }
66
106
 
67
107
  declare abstract class BaseASR {
68
108
  abstract name: string;
@@ -74,12 +114,13 @@ declare abstract class BaseASR {
74
114
  responseFormat: 'json' | 'text' | 'srt' | 'vtt' | 'verbose_json';
75
115
  format: AudioContainerFormat;
76
116
  codec: AudioCodecFormat;
77
- constructor(options: ASROptions);
117
+ constructor(options: BaseASROptions);
78
118
  abstract listenStream(audio: AudioStream): AsyncIterable<ASRStreamChunk>;
79
119
  private isAudioStream;
80
120
  private isString;
81
121
  private adaptAudioInput;
82
122
  private fileToPcmAudioStream;
123
+ connect(_options?: ASRConnectOptions): Promise<ASRConnection>;
83
124
  private createStreamIterable;
84
125
  private collectASRResponse;
85
126
  listen(audio: AudioStreamInput, options: ListenInstanceOptions & {
@@ -90,4 +131,4 @@ declare abstract class BaseASR {
90
131
  }): Promise<ASRResponse>;
91
132
  }
92
133
 
93
- export { type ASROptions as A, BaseASR as B, type ListenInstanceOptions as L, type ASRProvider as a, type ASRProviderType as b, type ASRRequest as c, type ASRResponse as d, type ASRSegment as e, type ASRStreamChunk as f, type AudioCodecFormat as g, type AudioContainerFormat as h, type AudioFormat as i, type AudioStream as j, type AudioStreamInput as k };
134
+ export { type ASRConnectOptions as A, BaseASR as B, type DoubaoASROptions as D, type GlmASROptions as G, type ListenInstanceOptions as L, type QwenASROptions as Q, type ASRConnection as a, type ASRConnectionState as b, type ASROptions as c, type ASRProvider as d, type ASRProviderType as e, type ASRRequest as f, type ASRResponse as g, type ASRSegment as h, type ASRStreamChunk as i, type AudioCodecFormat as j, type AudioContainerFormat as k, type AudioFormat as l, type AudioStream as m, type AudioStreamInput as n, type BaseASROptions as o };
@@ -0,0 +1,191 @@
1
+ interface OpenAIChatCompletionChunk {
2
+ choices?: Array<{
3
+ delta?: {
4
+ content?: string | null;
5
+ reasoning_content?: string | null;
6
+ };
7
+ }>;
8
+ }
9
+ type OpenAIStream = AsyncIterable<OpenAIChatCompletionChunk>;
10
+
11
+ type DoubaoV2Voice = 'zh_female_vv_uranus_bigtts' | 'zh_female_xiaohe_uranus_bigtts' | 'zh_male_m191_uranus_bigtts' | 'zh_male_taocheng_uranus_bigtts' | 'zh_male_liufei_uranus_bigtts' | 'zh_male_sophie_uranus_bigtts' | 'zh_female_qingxinnvsheng_uranus_bigtts' | 'zh_female_cancan_uranus_bigtts' | 'zh_female_sajiaoxuemei_uranus_bigtts' | 'zh_female_tianmeixiaoyuan_uranus_bigtts' | 'zh_female_tianmeitaozi_uranus_bigtts' | 'zh_female_shuangkuaisisi_uranus_bigtts' | 'zh_female_peiqi_uranus_bigtts' | 'zh_female_linjianvhai_uranus_bigtts' | 'zh_male_shaonianzixin_uranus_bigtts' | 'zh_male_sunwukong_uranus_bigtts' | 'zh_female_yingyujiaoxue_uranus_bigtts' | 'zh_female_kefunvsheng_uranus_bigtts' | 'zh_female_xiaoxue_uranus_bigtts' | 'zh_male_dayi_uranus_bigtts' | 'zh_female_mizai_uranus_bigtts' | 'zh_female_jitangnv_uranus_bigtts' | 'zh_female_meilinvyou_uranus_bigtts' | 'zh_female_liuchangnvsheng_uranus_bigtts' | 'zh_male_ruyayichen_uranus_bigtts' | 'en_male_tim_uranus_bigtts' | 'en_female_dacey_uranus_bigtts' | 'en_female_stokie_uranus_bigtts' | 'saturn_zh_female_keainvsheng_tob' | 'saturn_zh_female_tiaopigongzhu_tob' | 'saturn_zh_male_shuanglangshaonian_tob' | 'saturn_zh_male_tiancaitongzhuo_tob' | 'saturn_zh_female_cancan_tob' | 'saturn_zh_female_qingyingduoduo_cs_tob' | 'saturn_zh_female_wenwanshanshan_cs_tob' | 'saturn_zh_female_reqingaina_cs_tob';
12
+ type DoubaoJupiterVoice = 'zh_female_vv_jupiter_bigtts' | 'zh_female_xiaohe_jupiter_bigtts' | 'zh_male_yunzhou_jupiter_bigtts' | 'zh_male_xiaotian_jupiter_bigtts';
13
+ type DoubaoV1Voice = 'zh_male_lengkugege_emo_v2_mars_bigtts' | 'zh_female_tianxinxiaomei_emo_v2_mars_bigtts' | 'zh_female_gaolengyujie_emo_v2_mars_bigtts' | 'zh_male_aojiaobazong_emo_v2_mars_bigtts' | 'zh_male_guangzhoudege_emo_mars_bigtts' | 'zh_male_jingqiangkanye_emo_mars_bigtts' | 'zh_female_linjuayi_emo_v2_mars_bigtts' | 'zh_male_yourougongzi_emo_v2_mars_bigtts' | 'zh_male_ruyayichen_emo_v2_mars_bigtts' | 'zh_male_junlangnanyou_emo_v2_mars_bigtts' | 'zh_male_beijingxiaoye_emo_v2_mars_bigtts' | 'zh_female_roumeinvyou_emo_v2_mars_bigtts' | 'zh_male_yangguangqingnian_emo_v2_mars_bigtts' | 'zh_female_meilinvyou_emo_v2_mars_bigtts' | 'zh_female_shuangkuaisisi_emo_v2_mars_bigtts' | 'en_female_candice_emo_v2_mars_bigtts' | 'en_female_skye_emo_v2_mars_bigtts' | 'en_male_glen_emo_v2_mars_bigtts' | 'en_male_sylus_emo_v2_mars_bigtts' | 'en_male_corey_emo_v2_mars_bigtts' | 'en_female_nadia_tips_emo_v2_mars_bigtts' | 'zh_male_shenyeboke_emo_v2_mars_bigtts' | 'zh_female_yingyujiaoyu_mars_bigtts' | 'ICL_zh_female_wenrounvshen_239eff5e8ffa_tob' | 'zh_female_vv_mars_bigtts' | 'zh_female_qinqienvsheng_moon_bigtts' | 'ICL_zh_male_shenmi_v1_tob' | 'ICL_zh_female_wuxi_tob' | 'ICL_zh_female_wenyinvsheng_v1_tob' | 'zh_male_qingyiyuxuan_mars_bigtts' | 'zh_male_xudong_conversation_wvae_bigtts' | 'ICL_zh_male_lengkugege_v1_tob' | 'ICL_zh_female_feicui_v1_tob' | 'ICL_zh_female_yuxin_v1_tob' | 'ICL_zh_female_xnx_tob' | 'ICL_zh_female_yry_tob' | 'ICL_zh_male_BV705_streaming_cs_tob' | 'en_male_jason_conversation_wvae_bigtts' | 'zh_female_sophie_conversation_wvae_bigtts' | 'ICL_zh_female_yilin_tob' | 'zh_female_tianmeitaozi_mars_bigtts' | 'zh_female_qingxinnvsheng_mars_bigtts' | 'zh_female_zhixingnvsheng_mars_bigtts' | 'zh_male_qingshuangnanda_mars_bigtts' | 'zh_female_linjianvhai_moon_bigtts' | 'zh_male_yuanboxiaoshu_moon_bigtts' | 'zh_male_yangguangqingnian_moon_bigtts' | 'zh_female_tianmeixiaoyuan_moon_bigtts' | 'zh_female_qingchezizi_moon_bigtts' | 'zh_male_jieshuoxiaoming_moon_bigtts' | 'zh_female_kailangjiejie_moon_bigtts' | 'zh_male_linjiananhai_moon_bigtts' | 'zh_female_tianmeiyueyue_moon_bigtts' | 'zh_female_xinlingjitang_moon_bigtts' | 'ICL_zh_female_zhixingwenwan_tob' | 'ICL_zh_male_nuanxintitie_tob' | 'ICL_zh_male_kailangqingkuai_tob' | 'ICL_zh_male_huoposhuanglang_tob' | 'ICL_zh_male_shuaizhenxiaohuo_tob' | 'zh_male_wenrouxiaoge_mars_bigtts' | 'zh_female_cancan_mars_bigtts' | 'zh_female_shuangkuaisisi_moon_bigtts' | 'zh_male_wennuanahu_moon_bigtts' | 'zh_male_shaonianzixin_moon_bigtts' | 'ICL_zh_female_wenrouwenya_tob' | 'zh_male_hupunan_mars_bigtts' | 'zh_male_lubanqihao_mars_bigtts' | 'zh_female_yangmi_mars_bigtts' | 'zh_female_linzhiling_mars_bigtts' | 'zh_female_jiyejizi2_mars_bigtts' | 'zh_male_tangseng_mars_bigtts' | 'zh_male_zhuangzhou_mars_bigtts' | 'zh_male_zhubajie_mars_bigtts' | 'zh_female_ganmaodianyin_mars_bigtts' | 'zh_female_naying_mars_bigtts' | 'zh_female_leidian_mars_bigtts' | 'zh_female_yueyunv_mars_bigtts' | 'zh_male_yuzhouzixuan_moon_bigtts' | 'zh_female_daimengchuanmei_moon_bigtts' | 'zh_male_guangxiyuanzhou_moon_bigtts' | 'zh_male_zhoujielun_emo_v2_mars_bigtts' | 'zh_female_wanwanxiaohe_moon_bigtts' | 'zh_female_wanqudashu_moon_bigtts' | 'zh_male_guozhoudege_moon_bigtts' | 'zh_male_haoyuxiaoge_moon_bigtts' | 'zh_male_beijingxiaoye_moon_bigtts' | 'zh_male_jingqiangkanye_moon_bigtts' | 'zh_female_meituojieer_moon_bigtts' | 'ICL_zh_female_chunzhenshaonv_e588402fb8ad_tob' | 'ICL_zh_male_xiaonaigou_edf58cf28b8b_tob' | 'ICL_zh_female_jinglingxiangdao_1beb294a9e3e_tob' | 'ICL_zh_male_menyoupingxiaoge_ffed9fc2fee7_tob' | 'ICL_zh_male_anrenqinzhu_cd62e63dcdab_tob' | 'ICL_zh_male_badaozongcai_v1_tob' | 'ICL_zh_female_ganli_v1_tob' | 'ICL_zh_female_xiangliangya_v1_tob' | 'ICL_zh_male_ms_tob' | 'ICL_zh_male_you_tob' | 'ICL_zh_male_guaogongzi_v1_tob' | 'ICL_zh_male_huzi_v1_tob' | 'ICL_zh_female_luoqing_v1_tob' | 'ICL_zh_male_bingruogongzi_tob' | 'ICL_zh_female_bingjiao3_tob' | 'ICL_zh_male_aomanqingnian_tob' | 'ICL_zh_male_cujingnansheng_tob' | 'ICL_zh_male_shuanglangshaonian_tob' | 'ICL_zh_male_sajiaonanyou_tob' | 'ICL_zh_male_wenrounanyou_tob' | 'ICL_zh_male_wenshunshaonian_tob' | 'ICL_zh_male_naigounanyou_tob' | 'ICL_zh_male_sajiaonansheng_tob' | 'ICL_zh_male_huoponanyou_tob' | 'ICL_zh_male_tianxinanyou_tob' | 'ICL_zh_male_huoliqingnian_tob' | 'ICL_zh_male_kailangqingnian_tob' | 'ICL_zh_male_lengmoxiongzhang_tob' | 'ICL_zh_male_tiancaitongzhuo_tob' | 'ICL_zh_male_pianpiangongzi_tob' | 'ICL_zh_male_mengdongqingnian_tob' | 'ICL_zh_male_lenglianxiongzhang_tob' | 'ICL_zh_male_bingjiaoshaonian_tob' | 'ICL_zh_male_bingjiaonanyou_tob' | 'ICL_zh_male_bingruoshaonian_tob' | 'ICL_zh_male_yiqishaonian_tob' | 'ICL_zh_male_ganjingshaonian_tob' | 'ICL_zh_male_lengmonanyou_tob' | 'ICL_zh_male_jingyingqingnian_tob' | 'ICL_zh_male_rexueshaonian_tob' | 'ICL_zh_male_qingshuangshaonian_tob' | 'ICL_zh_male_zhongerqingnian_tob' | 'ICL_zh_male_lingyunqingnian_tob' | 'ICL_zh_male_zifuqingnian_tob' | 'ICL_zh_male_bujiqingnian_tob' | 'ICL_zh_male_ruyajunzi_tob' | 'ICL_zh_male_diyinchenyu_tob' | 'ICL_zh_male_lenglianxueba_tob' | 'ICL_zh_male_ruyazongcai_tob' | 'ICL_zh_male_shenchenzongcai_tob' | 'ICL_zh_male_xiaohouye_tob' | 'ICL_zh_male_gugaogongzi_tob' | 'ICL_zh_male_zhangjianjunzi_tob' | 'ICL_zh_male_wenrunxuezhe_tob' | 'ICL_zh_male_qinqieqingnian_tob' | 'ICL_zh_male_wenrouxuezhang_tob' | 'ICL_zh_male_gaolengzongcai_tob' | 'ICL_zh_male_lengjungaozhi_tob' | 'ICL_zh_male_chanruoshaoye_tob' | 'ICL_zh_male_zixinqingnian_tob' | 'ICL_zh_male_qingseqingnian_tob' | 'ICL_zh_male_xuebatongzhuo_tob' | 'ICL_zh_male_lengaozongcai_tob' | 'ICL_zh_male_yuanqishaonian_tob' | 'ICL_zh_male_satuoqingnian_tob' | 'ICL_zh_male_zhishuaiqingnian_tob' | 'ICL_zh_male_siwenqingnian_tob' | 'ICL_zh_male_junyigongzi_tob' | 'ICL_zh_male_zhangjianxiake_tob' | 'ICL_zh_male_jijiaozhineng_tob' | 'zh_male_naiqimengwa_mars_bigtts' | 'zh_female_popo_mars_bigtts' | 'zh_female_gaolengyujie_moon_bigtts' | 'zh_male_aojiaobazong_moon_bigtts' | 'zh_female_meilinvyou_moon_bigtts' | 'zh_male_shenyeboke_moon_bigtts' | 'zh_female_sajiaonvyou_moon_bigtts' | 'zh_female_yuanqinvyou_moon_bigtts' | 'ICL_zh_female_bingruoshaonv_tob' | 'ICL_zh_female_huoponvhai_tob' | 'zh_male_dongfanghaoran_moon_bigtts' | 'ICL_zh_male_lvchaxiaoge_tob' | 'ICL_zh_female_jiaoruoluoli_tob' | 'ICL_zh_male_lengdanshuli_tob' | 'ICL_zh_male_hanhoudunshi_tob' | 'ICL_zh_female_huopodiaoman_tob' | 'ICL_zh_male_guzhibingjiao_tob' | 'ICL_zh_male_sajiaonianren_tob' | 'ICL_zh_female_aomanjiaosheng_tob' | 'ICL_zh_male_xiaosasuixing_tob' | 'ICL_zh_male_guiyishenmi_tob' | 'ICL_zh_male_ruyacaijun_tob' | 'ICL_zh_male_zhengzhiqingnian_tob' | 'ICL_zh_female_jiaohannvwang_tob' | 'ICL_zh_female_bingjiaomengmei_tob' | 'ICL_zh_male_qingsenaigou_tob' | 'ICL_zh_male_chunzhenxuedi_tob' | 'ICL_zh_male_youroubangzhu_tob' | 'ICL_zh_male_yourougongzi_tob' | 'ICL_zh_female_tiaopigongzhu_tob' | 'ICL_zh_male_tiexinnanyou_tob' | 'ICL_zh_male_shaonianjiangjun_tob' | 'ICL_zh_male_bingjiaogege_tob' | 'ICL_zh_male_xuebanantongzhuo_tob' | 'ICL_zh_male_youmoshushu_tob' | 'ICL_zh_female_jiaxiaozi_tob' | 'ICL_zh_male_wenrounantongzhuo_tob' | 'ICL_zh_male_youmodaye_tob' | 'ICL_zh_male_asmryexiu_tob' | 'ICL_zh_male_shenmifashi_tob' | 'zh_female_jiaochuan_mars_bigtts' | 'zh_male_livelybro_mars_bigtts' | 'zh_female_flattery_mars_bigtts' | 'ICL_zh_male_lengjunshangsi_tob' | 'ICL_zh_male_xiaoge_v1_tob' | 'ICL_zh_male_renyuwangzi_v1_tob' | 'ICL_zh_male_xiaosha_v1_tob' | 'ICL_zh_male_liyisheng_v1_tob' | 'ICL_zh_male_qinglen_v1_tob' | 'ICL_zh_male_chongqingzhanzhan_v1_tob' | 'ICL_zh_male_xingjiwangzi_v1_tob' | 'ICL_zh_male_sigeshiye_v1_tob' | 'ICL_zh_male_lanyingcaohunshi_v1_tob' | 'ICL_zh_female_liumengdie_v1_tob' | 'ICL_zh_female_linxueying_v1_tob' | 'ICL_zh_female_rouguhunshi_v1_tob' | 'ICL_zh_female_tianmei_v1_tob' | 'ICL_zh_female_chengshu_v1_tob' | 'ICL_zh_female_xnx_v1_tob' | 'ICL_zh_female_yry_v1_tob' | 'zh_male_bv139_audiobook_ummv3_bigtts' | 'ICL_zh_male_cujingnanyou_tob' | 'ICL_zh_male_fengfashaonian_tob' | 'ICL_zh_male_cixingnansang_tob' | 'ICL_zh_male_chengshuzongcai_tob' | 'ICL_zh_male_aojiaojingying_tob' | 'ICL_zh_male_aojiaogongzi_tob' | 'ICL_zh_male_badaoshaoye_tob' | 'ICL_zh_male_fuheigongzi_tob' | 'ICL_zh_female_nuanxinxuejie_tob' | 'ICL_zh_female_keainvsheng_tob' | 'ICL_zh_female_chengshujiejie_tob' | 'ICL_zh_female_bingjiaojiejie_tob' | 'ICL_zh_female_wumeiyujie_tob' | 'ICL_zh_female_aojiaonvyou_tob' | 'ICL_zh_female_tiexinnvyou_tob' | 'ICL_zh_female_xingganyujie_tob' | 'ICL_zh_male_bingjiaodidi_tob' | 'ICL_zh_male_aomanshaoye_tob' | 'ICL_zh_male_aiqilingren_tob' | 'ICL_zh_male_bingjiaobailian_tob' | 'en_female_lauren_moon_bigtts' | 'en_male_campaign_jamal_moon_bigtts' | 'en_male_chris_moon_bigtts' | 'en_female_product_darcie_moon_bigtts' | 'en_female_emotional_moon_bigtts' | 'en_female_nara_moon_bigtts' | 'en_male_bruce_moon_bigtts' | 'en_male_michael_moon_bigtts' | 'ICL_en_male_cc_sha_v1_tob' | 'zh_male_M100_conversation_wvae_bigtts' | 'en_female_dacey_conversation_wvae_bigtts' | 'en_male_charlie_conversation_wvae_bigtts' | 'en_female_sarah_new_conversation_wvae_bigtts' | 'ICL_en_male_michael_tob' | 'ICL_en_female_cc_cm_v1_tob' | 'ICL_en_male_oogie2_tob' | 'ICL_en_male_frosty1_tob' | 'ICL_en_male_grinch2_tob' | 'ICL_en_male_zayne_tob' | 'ICL_en_male_cc_jigsaw_tob' | 'ICL_en_male_cc_chucky_tob' | 'ICL_en_male_cc_penny_v1_tob' | 'ICL_en_male_kevin2_tob' | 'ICL_en_male_xavier1_v1_tob' | 'ICL_en_male_cc_dracula_v1_tob' | 'en_male_adam_mars_bigtts' | 'en_female_amanda_mars_bigtts' | 'en_male_jackson_mars_bigtts' | 'en_female_daisy_moon_bigtts' | 'en_male_dave_moon_bigtts' | 'en_male_hades_moon_bigtts' | 'en_female_onez_moon_bigtts' | 'en_female_emily_mars_bigtts' | 'en_male_smith_mars_bigtts' | 'en_female_anna_mars_bigtts' | 'ICL_en_male_aussie_v1_tob' | 'en_female_sarah_mars_bigtts' | 'en_male_dryw_mars_bigtts' | 'multi_female_maomao_conversation_wvae_bigtts' | 'multi_male_M100_conversation_wvae_bigtts' | 'multi_female_sophie_conversation_wvae_bigtts' | 'multi_male_xudong_conversation_wvae_bigtts' | 'multi_zh_male_youyoujunzi_moon_bigtts' | 'multi_female_gaolengyujie_moon_bigtts' | 'multi_male_jingqiangkanye_moon_bigtts' | 'multi_female_shuangkuaisisi_moon_bigtts' | 'multi_male_wanqudashu_moon_bigtts' | 'ICL_zh_female_lixingyuanzi_cs_tob' | 'ICL_zh_female_qingtiantaotao_cs_tob' | 'ICL_zh_female_qingxixiaoxue_cs_tob' | 'ICL_zh_female_qingtianmeimei_cs_tob' | 'ICL_zh_female_kailangtingting_cs_tob' | 'ICL_zh_male_qingxinmumu_cs_tob' | 'ICL_zh_male_shuanglangxiaoyang_cs_tob' | 'ICL_zh_male_qingxinbobo_cs_tob' | 'ICL_zh_female_wenwanshanshan_cs_tob' | 'ICL_zh_female_tianmeixiaoyu_cs_tob' | 'ICL_zh_female_reqingaina_cs_tob' | 'ICL_zh_female_tianmeixiaoju_cs_tob' | 'ICL_zh_male_chenwenmingzai_cs_tob' | 'ICL_zh_male_qinqiexiaozhuo_cs_tob' | 'ICL_zh_female_lingdongxinxin_cs_tob' | 'ICL_zh_female_guaiqiaokeer_cs_tob' | 'ICL_zh_female_nuanxinqianqian_cs_tob' | 'ICL_zh_female_ruanmengtuanzi_cs_tob' | 'ICL_zh_male_yangguangyangyang_cs_tob' | 'ICL_zh_female_ruanmengtangtang_cs_tob' | 'ICL_zh_female_xiuliqianqian_cs_tob' | 'ICL_zh_female_kaixinxiaohong_cs_tob' | 'ICL_zh_female_qingyingduoduo_cs_tob' | 'zh_female_kefunvsheng_mars_bigtts' | 'zh_female_maomao_conversation_wvae_bigtts' | 'ICL_zh_female_qiuling_v1_tob' | 'ICL_zh_male_buyan_v1_tob' | 'ICL_zh_male_BV144_paoxiaoge_v1_tob' | 'ICL_zh_female_heainainai_tob' | 'ICL_zh_female_linjuayi_tob' | 'zh_female_wenrouxiaoya_moon_bigtts' | 'zh_male_tiancaitongsheng_mars_bigtts' | 'zh_male_sunwukong_mars_bigtts' | 'zh_male_xionger_mars_bigtts' | 'zh_female_peiqi_mars_bigtts' | 'zh_female_wuzetian_mars_bigtts' | 'zh_female_gujie_mars_bigtts' | 'zh_female_yingtaowanzi_mars_bigtts' | 'zh_male_chunhui_mars_bigtts' | 'zh_female_shaoergushi_mars_bigtts' | 'zh_male_silang_mars_bigtts' | 'zh_female_qiaopinvsheng_mars_bigtts' | 'zh_male_lanxiaoyang_mars_bigtts' | 'zh_male_dongmanhaimian_mars_bigtts' | 'zh_male_jieshuonansheng_mars_bigtts' | 'zh_female_jitangmeimei_mars_bigtts' | 'zh_female_tiexinnvsheng_mars_bigtts' | 'zh_female_mengyatou_mars_bigtts' | 'ICL_zh_male_neiliancaijun_e991be511569_tob' | 'ICL_zh_male_yangyang_v1_tob' | 'ICL_zh_male_flc_v1_tob' | 'zh_male_changtianyi_mars_bigtts' | 'zh_male_ruyaqingnian_mars_bigtts' | 'zh_male_baqiqingshu_mars_bigtts' | 'zh_male_qingcang_mars_bigtts' | 'zh_male_yangguangqingnian_mars_bigtts' | 'zh_female_gufengshaoyu_mars_bigtts' | 'zh_female_wenroushunv_mars_bigtts' | 'zh_male_fanjuanqingnian_mars_bigtts';
14
+ type DoubaoVoice = DoubaoV2Voice | DoubaoJupiterVoice | DoubaoV1Voice;
15
+
16
+ type GlmVoice = 'tongtong' | 'chuichui' | 'xiaochen' | 'jam' | 'kazi' | 'douji' | 'luodo';
17
+
18
+ type MinimaxChineseMandarinVoice = 'male-qn-qingse' | 'male-qn-jingying' | 'male-qn-badao' | 'male-qn-daxuesheng' | 'female-shaonv' | 'female-yujie' | 'female-chengshu' | 'female-tianmei' | 'male-qn-qingse-jingpin' | 'male-qn-jingying-jingpin' | 'male-qn-badao-jingpin' | 'male-qn-daxuesheng-jingpin' | 'female-shaonv-jingpin' | 'female-yujie-jingpin' | 'female-chengshu-jingpin' | 'female-tianmei-jingpin' | 'clever_boy' | 'cute_boy' | 'lovely_girl' | 'cartoon_pig' | 'bingjiao_didi' | 'junlang_nanyou' | 'chunzhen_xuedi' | 'lengdan_xiongzhang' | 'badao_shaoye' | 'tianxin_xiaoling' | 'qiaopi_mengmei' | 'wumei_yujie' | 'diadia_xuemei' | 'danya_xuejie' | 'Chinese (Mandarin)_Reliable_Executive' | 'Chinese (Mandarin)_News_Anchor' | 'Chinese (Mandarin)_Mature_Woman' | 'Chinese (Mandarin)_Unrestrained_Young_Man' | 'Arrogant_Miss' | 'Robot_Armor' | 'Chinese (Mandarin)_Kind-hearted_Antie' | 'Chinese (Mandarin)_HK_Flight_Attendant' | 'Chinese (Mandarin)_Humorous_Elder' | 'Chinese (Mandarin)_Gentleman' | 'Chinese (Mandarin)_Warm_Bestie' | 'Chinese (Mandarin)_Male_Announcer' | 'Chinese (Mandarin)_Sweet_Lady' | 'Chinese (Mandarin)_Southern_Young_Man' | 'Chinese (Mandarin)_Wise_Women' | 'Chinese (Mandarin)_Gentle_Youth' | 'Chinese (Mandarin)_Warm_Girl' | 'Chinese (Mandarin)_Kind-hearted_Elder' | 'Chinese (Mandarin)_Cute_Spirit' | 'Chinese (Mandarin)_Radio_Host' | 'Chinese (Mandarin)_Lyrical_Voice' | 'Chinese (Mandarin)_Straightforward_Boy' | 'Chinese (Mandarin)_Sincere_Adult' | 'Chinese (Mandarin)_Gentle_Senior' | 'Chinese (Mandarin)_Stubborn_Friend' | 'Chinese (Mandarin)_Crisp_Girl' | 'Chinese (Mandarin)_Pure-hearted_Boy' | 'Chinese (Mandarin)_Soft_Girl';
19
+ type MinimaxChineseCantoneseVoice = 'Cantonese_ProfessionalHost(F)' | 'Cantonese_GentleLady' | 'Cantonese_ProfessionalHost(M)' | 'Cantonese_PlayfulMan' | 'Cantonese_CuteGirl' | 'Cantonese_KindWoman';
20
+ type MinimaxEnglishVoice = 'Santa_Claus' | 'Grinch' | 'Rudolph' | 'Arnold' | 'Charming_Santa' | 'Charming_Lady' | 'Sweet_Girl' | 'Cute_Elf' | 'Attractive_Girl' | 'Serene_Woman' | 'English_Trustworthy_Man' | 'English_Graceful_Lady' | 'English_Aussie_Bloke' | 'English_Whispering_girl' | 'English_Diligent_Man' | 'English_Gentle-voiced_man';
21
+ type MinimaxJapaneseVoice = 'Japanese_IntellectualSenior' | 'Japanese_DecisivePrincess' | 'Japanese_LoyalKnight' | 'Japanese_DominantMan' | 'Japanese_SeriousCommander' | 'Japanese_ColdQueen' | 'Japanese_DependableWoman' | 'Japanese_GentleButler' | 'Japanese_KindLady' | 'Japanese_CalmLady' | 'Japanese_OptimisticYouth' | 'Japanese_GenerousIzakayaOwner' | 'Japanese_SportyStudent' | 'Japanese_InnocentBoy' | 'Japanese_GracefulMaiden';
22
+ type MinimaxKoreanVoice = 'Korean_SweetGirl' | 'Korean_CheerfulBoyfriend' | 'Korean_EnchantingSister' | 'Korean_ShyGirl' | 'Korean_ReliableSister' | 'Korean_StrictBoss' | 'Korean_SassyGirl' | 'Korean_ChildhoodFriendGirl' | 'Korean_PlayboyCharmer' | 'Korean_ElegantPrincess' | 'Korean_BraveFemaleWarrior' | 'Korean_BraveYouth' | 'Korean_CalmLady' | 'Korean_EnthusiasticTeen' | 'Korean_SoothingLady' | 'Korean_IntellectualSenior' | 'Korean_LonelyWarrior' | 'Korean_MatureLady' | 'Korean_InnocentBoy' | 'Korean_CharmingSister' | 'Korean_AthleticStudent' | 'Korean_BraveAdventurer' | 'Korean_CalmGentleman' | 'Korean_WiseElf' | 'Korean_CheerfulCoolJunior' | 'Korean_DecisiveQueen' | 'Korean_ColdYoungMan' | 'Korean_MysteriousGirl' | 'Korean_QuirkyGirl' | 'Korean_ConsiderateSenior' | 'Korean_CheerfulLittleSister' | 'Korean_DominantMan' | 'Korean_AirheadedGirl' | 'Korean_ReliableYouth' | 'Korean_FriendlyBigSister' | 'Korean_GentleBoss' | 'Korean_ColdGirl' | 'Korean_HaughtyLady' | 'Korean_CharmingElderSister' | 'Korean_IntellectualMan' | 'Korean_CaringWoman' | 'Korean_WiseTeacher' | 'Korean_ConfidentBoss' | 'Korean_AthleticGirl' | 'Korean_PossessiveMan' | 'Korean_GentleWoman' | 'Korean_CockyGuy' | 'Korean_ThoughtfulWoman' | 'Korean_OptimisticYouth';
23
+ type MinimaxSpanishVoice = 'Spanish_SereneWoman' | 'Spanish_MaturePartner' | 'Spanish_CaptivatingStoryteller' | 'Spanish_Narrator' | 'Spanish_WiseScholar' | 'Spanish_Kind-heartedGirl' | 'Spanish_DeterminedManager' | 'Spanish_BossyLeader' | 'Spanish_ReservedYoungMan' | 'Spanish_ConfidentWoman' | 'Spanish_ThoughtfulMan' | 'Spanish_Strong-WilledBoy' | 'Spanish_SophisticatedLady' | 'Spanish_RationalMan' | 'Spanish_AnimeCharacter' | 'Spanish_Deep-tonedMan' | 'Spanish_Fussyhostess' | 'Spanish_SincereTeen' | 'Spanish_FrankLady' | 'Spanish_Comedian' | 'Spanish_Debator' | 'Spanish_ToughBoss' | 'Spanish_Wiselady' | 'Spanish_Steadymentor' | 'Spanish_Jovialman' | 'Spanish_SantaClaus' | 'Spanish_Rudolph' | 'Spanish_Intonategirl' | 'Spanish_Arnold' | 'Spanish_Ghost' | 'Spanish_HumorousElder' | 'Spanish_EnergeticBoy' | 'Spanish_WhimsicalGirl' | 'Spanish_StrictBoss' | 'Spanish_ReliableMan' | 'Spanish_SereneElder' | 'Spanish_AngryMan' | 'Spanish_AssertiveQueen' | 'Spanish_CaringGirlfriend' | 'Spanish_PowerfulSoldier' | 'Spanish_PassionateWarrior' | 'Spanish_ChattyGirl' | 'Spanish_RomanticHusband' | 'Spanish_CompellingGirl' | 'Spanish_PowerfulVeteran' | 'Spanish_SensibleManager' | 'Spanish_ThoughtfulLady';
24
+ type MinimaxPortugueseVoice = 'Portuguese_SentimentalLady' | 'Portuguese_BossyLeader' | 'Portuguese_Wiselady' | 'Portuguese_Strong-WilledBoy' | 'Portuguese_Deep-VoicedGentleman' | 'Portuguese_UpsetGirl' | 'Portuguese_PassionateWarrior' | 'Portuguese_AnimeCharacter' | 'Portuguese_ConfidentWoman' | 'Portuguese_AngryMan' | 'Portuguese_CaptivatingStoryteller' | 'Portuguese_Godfather' | 'Portuguese_ReservedYoungMan' | 'Portuguese_SmartYoungGirl' | 'Portuguese_Kind-heartedGirl' | 'Portuguese_Pompouslady' | 'Portuguese_Grinch' | 'Portuguese_Debator' | 'Portuguese_SweetGirl' | 'Portuguese_AttractiveGirl' | 'Portuguese_ThoughtfulMan' | 'Portuguese_PlayfulGirl' | 'Portuguese_GorgeousLady' | 'Portuguese_LovelyLady' | 'Portuguese_SereneWoman' | 'Portuguese_SadTeen' | 'Portuguese_MaturePartner' | 'Portuguese_Comedian' | 'Portuguese_NaughtySchoolgirl' | 'Portuguese_Narrator' | 'Portuguese_ToughBoss' | 'Portuguese_Fussyhostess' | 'Portuguese_Dramatist' | 'Portuguese_Steadymentor' | 'Portuguese_Jovialman' | 'Portuguese_CharmingQueen' | 'Portuguese_SantaClaus' | 'Portuguese_Rudolph' | 'Portuguese_Arnold' | 'Portuguese_CharmingSanta' | 'Portuguese_CharmingLady' | 'Portuguese_Ghost' | 'Portuguese_HumorousElder' | 'Portuguese_CalmLeader' | 'Portuguese_GentleTeacher' | 'Portuguese_EnergeticBoy' | 'Portuguese_ReliableMan' | 'Portuguese_SereneElder' | 'Portuguese_GrimReaper' | 'Portuguese_AssertiveQueen' | 'Portuguese_WhimsicalGirl' | 'Portuguese_StressedLady' | 'Portuguese_FriendlyNeighbor' | 'Portuguese_CaringGirlfriend' | 'Portuguese_PowerfulSoldier' | 'Portuguese_FascinatingBoy' | 'Portuguese_RomanticHusband' | 'Portuguese_StrictBoss' | 'Portuguese_InspiringLady' | 'Portuguese_PlayfulSpirit' | 'Portuguese_ElegantGirl' | 'Portuguese_CompellingGirl' | 'Portuguese_PowerfulVeteran' | 'Portuguese_SensibleManager' | 'Portuguese_ThoughtfulLady' | 'Portuguese_TheatricalActor' | 'Portuguese_FragileBoy' | 'Portuguese_ChattyGirl' | 'Portuguese_Conscientiousinstructor' | 'Portuguese_RationalMan' | 'Portuguese_WiseScholar' | 'Portuguese_FrankLady' | 'Portuguese_DeterminedManager';
25
+ type MinimaxFrenchVoice = 'French_Male_Speech_New' | 'French_Female_News Anchor' | 'French_CasualMan' | 'French_MovieLeadFemale' | 'French_FemaleAnchor' | 'French_MaleNarrator';
26
+ type MinimaxIndonesianVoice = 'Indonesian_SweetGirl' | 'Indonesian_ReservedYoungMan' | 'Indonesian_CharmingGirl' | 'Indonesian_CalmWoman' | 'Indonesian_ConfidentWoman' | 'Indonesian_CaringMan' | 'Indonesian_BossyLeader' | 'Indonesian_DeterminedBoy' | 'Indonesian_GentleGirl';
27
+ type MinimaxGermanVoice = 'German_FriendlyMan' | 'German_SweetLady' | 'German_PlayfulMan';
28
+ type MinimaxRussianVoice = 'Russian_HandsomeChildhoodFriend' | 'Russian_BrightHeroine' | 'Russian_AmbitiousWoman' | 'Russian_ReliableMan' | 'Russian_CrazyQueen' | 'Russian_PessimisticGirl' | 'Russian_AttractiveGuy' | 'Russian_Bad-temperedBoy';
29
+ type MinimaxItalianVoice = 'Italian_BraveHeroine' | 'Italian_Narrator' | 'Italian_WanderingSorcerer' | 'Italian_DiligentLeader';
30
+ type MinimaxArabicVoice = 'Arabic_CalmWoman' | 'Arabic_FriendlyGuy';
31
+ type MinimaxTurkishVoice = 'Turkish_CalmWoman' | 'Turkish_Trustworthyman';
32
+ type MinimaxUkrainianVoice = 'Ukrainian_CalmWoman' | 'Ukrainian_WiseScholar';
33
+ type MinimaxDutchVoice = 'Dutch_kindhearted_girl' | 'Dutch_bossy_leader';
34
+ type MinimaxVietnameseVoice = 'Vietnamese_kindhearted_girl';
35
+ type MinimaxThaiVoice = 'Thai_male_1_sample8' | 'Thai_male_2_sample2' | 'Thai_female_1_sample1' | 'Thai_female_2_sample2';
36
+ type MinimaxPolishVoice = 'Polish_male_1_sample4' | 'Polish_male_2_sample3' | 'Polish_female_1_sample1' | 'Polish_female_2_sample3';
37
+ type MinimaxRomanianVoice = 'Romanian_male_1_sample2' | 'Romanian_male_2_sample1' | 'Romanian_female_1_sample4' | 'Romanian_female_2_sample1';
38
+ type MinimaxGreekVoice = 'greek_male_1a_v1' | 'Greek_female_1_sample1' | 'Greek_female_2_sample3';
39
+ type MinimaxCzechVoice = 'czech_male_1_v1' | 'czech_female_5_v7' | 'czech_female_2_v2';
40
+ type MinimaxFinnishVoice = 'finnish_male_3_v1' | 'finnish_male_1_v2' | 'finnish_female_4_v1';
41
+ type MinimaxHindiVoice = 'hindi_male_1_v2' | 'hindi_female_2_v1' | 'hindi_female_1_v2';
42
+ type MinimaxVoice = MinimaxChineseMandarinVoice | MinimaxChineseCantoneseVoice | MinimaxEnglishVoice | MinimaxJapaneseVoice | MinimaxKoreanVoice | MinimaxSpanishVoice | MinimaxPortugueseVoice | MinimaxFrenchVoice | MinimaxIndonesianVoice | MinimaxGermanVoice | MinimaxRussianVoice | MinimaxItalianVoice | MinimaxArabicVoice | MinimaxTurkishVoice | MinimaxUkrainianVoice | MinimaxDutchVoice | MinimaxVietnameseVoice | MinimaxThaiVoice | MinimaxPolishVoice | MinimaxRomanianVoice | MinimaxGreekVoice | MinimaxCzechVoice | MinimaxFinnishVoice | MinimaxHindiVoice;
43
+
44
+ type QwenTTSModel = 'cosyvoice-v1' | 'cosyvoice-v2' | 'cosyvoice-v3-flash' | 'cosyvoice-v3-plus';
45
+ type CosyVoiceV1Voice = 'longwan' | 'longcheng' | 'longhua' | 'longxiaochun' | 'longxiaoxia' | 'longxiaocheng' | 'longxiaobai' | 'longlaotie' | 'longshu' | 'longshuo' | 'longjing' | 'longmiao' | 'longyue' | 'longyuan' | 'longfei' | 'longjielidou' | 'longtong' | 'longxiang' | 'loongstella' | 'loongbella';
46
+ type CosyVoiceV2Voice = 'longyingxiao' | 'longjiqi' | 'longhouge' | 'longjixin' | 'longanyue' | 'longshange' | 'longanmin' | 'longdaiyu' | 'longgaoseng' | 'longanli' | 'longanlang' | 'longanwen' | 'longanyun' | 'longyumi_v2' | 'longxiaochun_v2' | 'longxiaoxia_v2' | 'longyichen' | 'longwanjun' | 'longlaobo' | 'longlaoyi' | 'longbaizhi' | 'longsanshu' | 'longxiu_v2' | 'longmiao_v2' | 'longyue_v2' | 'longnan_v2' | 'longyuan_v2' | 'longanqin' | 'longanya' | 'longanshuo' | 'longanling' | 'longanzhi' | 'longanrou' | 'longqiang_v2' | 'longhan_v2' | 'longxing_v2' | 'longhua_v2' | 'longwan_v2' | 'longcheng_v2' | 'longfeifei_v2' | 'longxiaocheng_v2' | 'longzhe_v2' | 'longyan_v2' | 'longtian_v2' | 'longze_v2' | 'longshao_v2' | 'longhao_v2' | 'kabuleshen_v2' | 'longhuhu' | 'longanpei' | 'longwangwang' | 'longpaopao' | 'longshanshan' | 'longniuniu' | 'longyingmu' | 'longyingxun' | 'longyingcui' | 'longyingda' | 'longyingjing' | 'longyingyan' | 'longyingtian' | 'longyingbing' | 'longyingtao' | 'longyingling' | 'longanran' | 'longanxuan' | 'longanchong' | 'longanping' | 'longjielidou_v2' | 'longling_v2' | 'longke_v2' | 'longxian_v2' | 'longlaotie_v2' | 'longjiayi_v2' | 'longtao_v2' | 'longfei_v2' | 'libai_v2' | 'longjin_v2' | 'longshu_v2' | 'loongbella_v2' | 'longshuo_v2' | 'longxiaobai_v2' | 'longjing_v2' | 'loongstella_v2' | 'loongyuuna_v2' | 'loongyuuma_v2' | 'loongjihun_v2' | 'loongeva_v2' | 'loongbrian_v2' | 'loongluna_v2' | 'loongluca_v2' | 'loongemily_v2' | 'loongeric_v2' | 'loongabby_v2' | 'loongannie_v2' | 'loongandy_v2' | 'loongava_v2' | 'loongbeth_v2' | 'loongbetty_v2' | 'loongcindy_v2' | 'loongcally_v2' | 'loongdavid_v2' | 'loongdonna_v2' | 'loongkyong_v2' | 'loongtomoka_v2' | 'loongtomoya_v2';
47
+ type CosyVoiceV3FlashVoice = 'longanyang' | 'longanhuan' | 'longhuhu_v3' | 'longpaopao_v3' | 'longjielidou_v3' | 'longxian_v3' | 'longling_v3' | 'longshanshan_v3' | 'longniuniu_v3' | 'longjiaxin_v3' | 'longjiayi_v3' | 'longanyue_v3' | 'longlaotie_v3' | 'longshange_v3' | 'longanmin_v3' | 'loongkyong_v3' | 'loongriko_v3' | 'loongtomoka_v3' | 'longfei_v3' | 'longyingxiao_v3' | 'longyingxun_v3' | 'longyingjing_v3' | 'longyingling_v3' | 'longyingtao_v3' | 'longxiaochun_v3' | 'longxiaoxia_v3' | 'longyumi_v3' | 'longanyun_v3' | 'longanwen_v3' | 'longanli_v3' | 'longanlang_v3' | 'longyingmu_v3' | 'longantai_v3' | 'longhua_v3' | 'longcheng_v3' | 'longze_v3' | 'longzhe_v3' | 'longyan_v3' | 'longxing_v3' | 'longtian_v3' | 'longwan_v3' | 'longqiang_v3' | 'longfeifei_v3' | 'longhao_v3' | 'longanrou_v3' | 'longhan_v3' | 'longanzhi_v3' | 'longanling_v3' | 'longanya_v3' | 'longanqin_v3' | 'longmiao_v3' | 'longsanshu_v3' | 'longyuan_v3' | 'longyue_v3' | 'longxiu_v3' | 'longnan_v3' | 'longwanjun_v3' | 'longyichen_v3' | 'longlaobo_v3' | 'longlaoyi_v3' | 'longjiqi_v3' | 'longhouge_v3' | 'longdaiyu_v3' | 'longanran_v3' | 'longanxuan_v3' | 'longshuo_v3' | 'longshu_v3' | 'loongbella_v3';
48
+ type CosyVoiceV3PlusVoice = 'longanyang' | 'longanhuan';
49
+ type CosyVoiceVoice = CosyVoiceV1Voice | CosyVoiceV2Voice | CosyVoiceV3FlashVoice | CosyVoiceV3PlusVoice;
50
+ type QwenRealtimeVoice = 'Cherry' | 'Serena' | 'Ethan' | 'Chelsie' | 'Momo' | 'Vivian' | 'Moon' | 'Maia' | 'Kai' | 'Nofish' | 'Bella' | 'Jennifer' | 'Ryan' | 'Katerina' | 'Aiden' | 'Eldric Sage' | 'Mia' | 'Mochi' | 'Bellona' | 'Vincent' | 'Bunny' | 'Neil' | 'Elias' | 'Arthur' | 'Nini' | 'Seren' | 'Pip' | 'Stella' | 'Bodega' | 'Sonrisa' | 'Alek' | 'Dolce' | 'Sohee' | 'Ono Anna' | 'Lenn' | 'Emilien' | 'Andre' | 'Radio Gol' | 'Jada' | 'Dylan' | 'Li' | 'Marcus' | 'Roy' | 'Peter' | 'Sunny' | 'Eric' | 'Rocky' | 'Kiki';
51
+
52
+ type AcceptAnyString<T extends string> = T | (string & {});
53
+ interface QwenRealtimeOptions {
54
+ mode?: 'server_commit' | 'commit';
55
+ languageType?: 'Auto' | 'Chinese' | 'English' | 'Japanese' | 'Korean';
56
+ instructions?: string;
57
+ optimizeInstructions?: boolean;
58
+ speechRate?: number;
59
+ pitchRate?: number;
60
+ bitrate?: number;
61
+ }
62
+ interface BaseTTSOptions {
63
+ apiKey?: string;
64
+ baseUrl?: string;
65
+ model?: string;
66
+ voice?: string;
67
+ speed?: number;
68
+ volume?: number;
69
+ pitch?: number;
70
+ format?: 'mp3' | 'wav' | 'ogg' | 'flac' | 'pcm' | 'opus' | 'ogg_opus';
71
+ language?: string;
72
+ }
73
+ interface DoubaoTTSOptions extends BaseTTSOptions {
74
+ voice?: AcceptAnyString<DoubaoVoice>;
75
+ appId?: string;
76
+ accessToken?: string;
77
+ resourceId?: string;
78
+ sampleRate?: number;
79
+ enableTimestamp?: boolean;
80
+ }
81
+ interface MinimaxTTSOptions extends BaseTTSOptions {
82
+ voice?: AcceptAnyString<MinimaxVoice>;
83
+ sampleRate?: number;
84
+ bitrate?: number;
85
+ }
86
+ interface QwenTTSOptions extends BaseTTSOptions {
87
+ voice?: AcceptAnyString<CosyVoiceVoice>;
88
+ sampleRate?: number;
89
+ instruction?: string;
90
+ }
91
+ interface QwenRealtimeTTSOptions extends BaseTTSOptions {
92
+ voice?: AcceptAnyString<QwenRealtimeVoice>;
93
+ sampleRate?: number;
94
+ realtime?: QwenRealtimeOptions;
95
+ }
96
+ interface GlmTTSOptions extends BaseTTSOptions {
97
+ voice?: AcceptAnyString<GlmVoice>;
98
+ }
99
+ type TTSOptions = ({
100
+ provider: 'doubao';
101
+ } & DoubaoTTSOptions) | ({
102
+ provider: 'minimax';
103
+ } & MinimaxTTSOptions) | ({
104
+ provider: 'qwen';
105
+ } & QwenTTSOptions) | ({
106
+ provider: 'qwen-realtime';
107
+ } & QwenRealtimeTTSOptions) | ({
108
+ provider: 'openai';
109
+ } & BaseTTSOptions) | ({
110
+ provider: 'gemini';
111
+ } & BaseTTSOptions) | ({
112
+ provider: 'glm';
113
+ } & GlmTTSOptions) | ({
114
+ provider: string;
115
+ } & BaseTTSOptions);
116
+ interface TTSRequest {
117
+ text: string;
118
+ options?: Partial<BaseTTSOptions>;
119
+ }
120
+ interface TTSResponse {
121
+ audio: Buffer | Uint8Array;
122
+ format: string;
123
+ duration?: number;
124
+ }
125
+ interface SpeakInstanceOptions {
126
+ stream?: boolean;
127
+ }
128
+ interface TTSProvider {
129
+ name: string;
130
+ synthesize(request: TTSRequest): Promise<TTSResponse>;
131
+ speak?(input: string | TextStream, options?: SpeakInstanceOptions): AsyncIterable<TTSStreamChunk> | Promise<TTSResponse>;
132
+ listVoices?(): Promise<TTSVoice[]>;
133
+ }
134
+ interface TTSStreamChunk {
135
+ audioChunk: Uint8Array;
136
+ }
137
+ type TextStream = AsyncIterable<string> | AsyncGenerator<string> | OpenAIStream;
138
+ interface TTSVoice {
139
+ id: string;
140
+ name: string;
141
+ language: string;
142
+ gender?: 'male' | 'female' | 'neutral';
143
+ }
144
+ type TTSProviderType = 'doubao' | 'minimax' | 'qwen' | 'openai' | 'gemini' | string;
145
+ type TTSConnectionState = 'connected' | 'closed' | 'error';
146
+ interface TTSConnectOptions {
147
+ timeout?: number;
148
+ }
149
+ interface TTSConnection {
150
+ readonly state: TTSConnectionState;
151
+ speak(input: string | TextStream, options: SpeakInstanceOptions & {
152
+ stream: true;
153
+ }): AsyncIterable<TTSStreamChunk>;
154
+ speak(input: string | TextStream, options?: SpeakInstanceOptions & {
155
+ stream?: false;
156
+ }): Promise<TTSResponse>;
157
+ speak(input: string | TextStream, options?: SpeakInstanceOptions): Promise<TTSResponse> | AsyncIterable<TTSStreamChunk>;
158
+ close(): void;
159
+ }
160
+
161
+ declare abstract class BaseTTS implements TTSProvider {
162
+ abstract name: string;
163
+ apiKey: string;
164
+ baseUrl: string;
165
+ model: string;
166
+ voice: string;
167
+ speed: number;
168
+ volume: number;
169
+ pitch: number;
170
+ format: 'mp3' | 'wav' | 'ogg' | 'flac' | 'pcm' | 'opus' | 'ogg_opus';
171
+ language: string;
172
+ constructor(options: BaseTTSOptions);
173
+ abstract synthesize(request: TTSRequest): Promise<TTSResponse>;
174
+ speak(input: string | TextStream): Promise<TTSResponse>;
175
+ speak(input: string | TextStream, options: SpeakInstanceOptions & {
176
+ stream: true;
177
+ }): AsyncIterable<TTSStreamChunk>;
178
+ speak(input: string | TextStream, options: SpeakInstanceOptions & {
179
+ stream: false;
180
+ }): Promise<TTSResponse>;
181
+ private createSpeakStreamIterable;
182
+ private synthesizeFromInput;
183
+ protected speakStream(_input: string | TextStream): AsyncIterable<TTSStreamChunk>;
184
+ listVoices(): Promise<TTSVoice[]>;
185
+ connect(_options?: TTSConnectOptions): Promise<TTSConnection>;
186
+ buildRequestOptions(request: TTSRequest): BaseTTSOptions & {
187
+ provider: string;
188
+ };
189
+ }
190
+
191
+ export { BaseTTS as B, type CosyVoiceV1Voice as C, type DoubaoTTSOptions as D, type GlmTTSOptions as G, type MinimaxTTSOptions as M, type OpenAIChatCompletionChunk as O, type QwenRealtimeOptions as Q, type SpeakInstanceOptions as S, type TTSConnectOptions as T, type BaseTTSOptions as a, type QwenRealtimeTTSOptions as b, type QwenTTSOptions as c, type TTSConnection as d, type TTSConnectionState as e, type TTSOptions as f, type TTSProvider as g, type TTSProviderType as h, type TTSRequest as i, type TTSResponse as j, type TTSStreamChunk as k, type TTSVoice as l, type TextStream as m, type CosyVoiceV2Voice as n, type CosyVoiceV3FlashVoice as o, type CosyVoiceV3PlusVoice as p, type CosyVoiceVoice as q, type DoubaoJupiterVoice as r, type DoubaoV1Voice as s, type DoubaoV2Voice as t, type DoubaoVoice as u, type MinimaxVoice as v, type OpenAIStream as w, type QwenRealtimeVoice as x, type QwenTTSModel as y };