@pipedog/core 0.0.0 → 0.2.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 (736) hide show
  1. package/LICENSE +25 -0
  2. package/NOTICE +9 -0
  3. package/dist/adapters/base_llm_adapter.d.ts +266 -0
  4. package/dist/adapters/base_llm_adapter.js +489 -0
  5. package/dist/adapters/index.d.ts +2 -0
  6. package/dist/adapters/index.js +8 -0
  7. package/dist/adapters/schemas/direct_function.d.ts +202 -0
  8. package/dist/adapters/schemas/direct_function.js +302 -0
  9. package/dist/adapters/schemas/function_schema.d.ts +67 -0
  10. package/dist/adapters/schemas/function_schema.js +72 -0
  11. package/dist/adapters/schemas/index.d.ts +2 -0
  12. package/dist/adapters/schemas/index.js +8 -0
  13. package/dist/adapters/schemas/tools_schema.d.ts +57 -0
  14. package/dist/adapters/schemas/tools_schema.js +79 -0
  15. package/dist/adapters/services/index.d.ts +2 -0
  16. package/dist/adapters/services/index.js +8 -0
  17. package/dist/adapters/services/open_ai_adapter.d.ts +147 -0
  18. package/dist/adapters/services/open_ai_adapter.js +250 -0
  19. package/dist/audio/dtmf/dtmf_data.d.ts +3 -0
  20. package/dist/audio/dtmf/dtmf_data.js +22 -0
  21. package/dist/audio/dtmf/index.d.ts +2 -0
  22. package/dist/audio/dtmf/index.js +8 -0
  23. package/dist/audio/dtmf/types.d.ts +31 -0
  24. package/dist/audio/dtmf/types.js +35 -0
  25. package/dist/audio/dtmf/utils.d.ts +13 -0
  26. package/dist/audio/dtmf/utils.js +62 -0
  27. package/dist/audio/filters/base_audio_filter.d.ts +51 -0
  28. package/dist/audio/filters/base_audio_filter.js +17 -0
  29. package/dist/audio/filters/index.d.ts +2 -0
  30. package/dist/audio/filters/index.js +8 -0
  31. package/dist/audio/index.d.ts +2 -0
  32. package/dist/audio/index.js +8 -0
  33. package/dist/audio/krisp_instance.d.ts +95 -0
  34. package/dist/audio/krisp_instance.js +229 -0
  35. package/dist/audio/mixers/base_audio_mixer.d.ts +56 -0
  36. package/dist/audio/mixers/base_audio_mixer.js +16 -0
  37. package/dist/audio/mixers/index.d.ts +2 -0
  38. package/dist/audio/mixers/index.js +8 -0
  39. package/dist/audio/resamplers/base_audio_resampler.d.ts +46 -0
  40. package/dist/audio/resamplers/base_audio_resampler.js +35 -0
  41. package/dist/audio/resamplers/engine.d.ts +60 -0
  42. package/dist/audio/resamplers/engine.js +89 -0
  43. package/dist/audio/resamplers/index.d.ts +2 -0
  44. package/dist/audio/resamplers/index.js +8 -0
  45. package/dist/audio/resamplers/resampy_resampler.d.ts +10 -0
  46. package/dist/audio/resamplers/resampy_resampler.js +15 -0
  47. package/dist/audio/resamplers/sinc_engine.d.ts +10 -0
  48. package/dist/audio/resamplers/sinc_engine.js +235 -0
  49. package/dist/audio/resamplers/soxr_resampler.d.ts +58 -0
  50. package/dist/audio/resamplers/soxr_resampler.js +79 -0
  51. package/dist/audio/resamplers/soxr_stream_resampler.d.ts +78 -0
  52. package/dist/audio/resamplers/soxr_stream_resampler.js +159 -0
  53. package/dist/audio/turn/base_turn_analyzer.d.ts +84 -0
  54. package/dist/audio/turn/base_turn_analyzer.js +61 -0
  55. package/dist/audio/turn/index.d.ts +2 -0
  56. package/dist/audio/turn/index.js +8 -0
  57. package/dist/audio/turn/smart_turn/_whisper_features.d.ts +30 -0
  58. package/dist/audio/turn/smart_turn/_whisper_features.js +225 -0
  59. package/dist/audio/turn/smart_turn/base_smart_turn.d.ts +94 -0
  60. package/dist/audio/turn/smart_turn/base_smart_turn.js +239 -0
  61. package/dist/audio/turn/smart_turn/local_smart_turn_v3.d.ts +76 -0
  62. package/dist/audio/turn/smart_turn/local_smart_turn_v3.js +151 -0
  63. package/dist/audio/utils.d.ts +224 -0
  64. package/dist/audio/utils.js +634 -0
  65. package/dist/audio/vad/data/index.d.ts +2 -0
  66. package/dist/audio/vad/data/index.js +8 -0
  67. package/dist/audio/vad/index.d.ts +2 -0
  68. package/dist/audio/vad/index.js +8 -0
  69. package/dist/audio/vad/vad_analyzer.d.ts +134 -0
  70. package/dist/audio/vad/vad_analyzer.js +249 -0
  71. package/dist/audio/vad/vad_controller.d.ts +143 -0
  72. package/dist/audio/vad/vad_controller.js +228 -0
  73. package/dist/audio/volume.d.ts +38 -0
  74. package/dist/audio/volume.js +75 -0
  75. package/dist/bus/adapters/base.d.ts +35 -0
  76. package/dist/bus/adapters/base.js +19 -0
  77. package/dist/bus/adapters/index.d.ts +10 -0
  78. package/dist/bus/adapters/index.js +15 -0
  79. package/dist/bus/adapters/llm_context_adapter.d.ts +36 -0
  80. package/dist/bus/adapters/llm_context_adapter.js +82 -0
  81. package/dist/bus/adapters/tools_schema_adapter.d.ts +25 -0
  82. package/dist/bus/adapters/tools_schema_adapter.js +70 -0
  83. package/dist/bus/bridge_processor.d.ts +111 -0
  84. package/dist/bus/bridge_processor.js +166 -0
  85. package/dist/bus/bus.d.ts +110 -0
  86. package/dist/bus/bus.js +200 -0
  87. package/dist/bus/index.d.ts +22 -0
  88. package/dist/bus/index.js +27 -0
  89. package/dist/bus/local/async_queue.d.ts +12 -0
  90. package/dist/bus/local/async_queue.js +21 -0
  91. package/dist/bus/local/index.d.ts +3 -0
  92. package/dist/bus/local/index.js +8 -0
  93. package/dist/bus/messages.d.ts +378 -0
  94. package/dist/bus/messages.js +357 -0
  95. package/dist/bus/network/index.d.ts +16 -0
  96. package/dist/bus/network/index.js +21 -0
  97. package/dist/bus/queue.d.ts +27 -0
  98. package/dist/bus/queue.js +51 -0
  99. package/dist/bus/serializers/base.d.ts +25 -0
  100. package/dist/bus/serializers/base.js +14 -0
  101. package/dist/bus/serializers/index.d.ts +9 -0
  102. package/dist/bus/serializers/index.js +14 -0
  103. package/dist/bus/serializers/json.d.ts +77 -0
  104. package/dist/bus/serializers/json.js +367 -0
  105. package/dist/bus/subscriber.d.ts +46 -0
  106. package/dist/bus/subscriber.js +27 -0
  107. package/dist/bus/ui/index.d.ts +3 -0
  108. package/dist/bus/ui/index.js +8 -0
  109. package/dist/bus/ui/messages.d.ts +186 -0
  110. package/dist/bus/ui/messages.js +171 -0
  111. package/dist/classifiers/base_classifier.d.ts +263 -0
  112. package/dist/classifiers/base_classifier.js +346 -0
  113. package/dist/classifiers/cloudflare/clef/classifier.d.ts +70 -0
  114. package/dist/classifiers/cloudflare/clef/classifier.js +204 -0
  115. package/dist/classifiers/cloudflare/clef/client.d.ts +104 -0
  116. package/dist/classifiers/cloudflare/clef/client.js +234 -0
  117. package/dist/classifiers/cloudflare/clef/index.d.ts +2 -0
  118. package/dist/classifiers/cloudflare/clef/index.js +8 -0
  119. package/dist/classifiers/cloudflare/index.d.ts +2 -0
  120. package/dist/classifiers/cloudflare/index.js +8 -0
  121. package/dist/classifiers/http_client.d.ts +70 -0
  122. package/dist/classifiers/http_client.js +161 -0
  123. package/dist/classifiers/index.d.ts +2 -0
  124. package/dist/classifiers/index.js +8 -0
  125. package/dist/classifiers/jev/classifier.d.ts +8 -0
  126. package/dist/classifiers/jev/classifier.js +13 -0
  127. package/dist/classifiers/jev/client.d.ts +8 -0
  128. package/dist/classifiers/jev/client.js +13 -0
  129. package/dist/classifiers/jev/index.d.ts +2 -0
  130. package/dist/classifiers/jev/index.js +8 -0
  131. package/dist/classifiers/llm/classifier.d.ts +72 -0
  132. package/dist/classifiers/llm/classifier.js +304 -0
  133. package/dist/classifiers/llm/index.d.ts +2 -0
  134. package/dist/classifiers/llm/index.js +8 -0
  135. package/dist/classifiers/openai/decisions/classifier.d.ts +77 -0
  136. package/dist/classifiers/openai/decisions/classifier.js +241 -0
  137. package/dist/classifiers/openai/decisions/client.d.ts +108 -0
  138. package/dist/classifiers/openai/decisions/client.js +234 -0
  139. package/dist/classifiers/openai/decisions/index.d.ts +2 -0
  140. package/dist/classifiers/openai/decisions/index.js +8 -0
  141. package/dist/classifiers/openai/index.d.ts +2 -0
  142. package/dist/classifiers/openai/index.js +8 -0
  143. package/dist/classifiers/typesafe/index.d.ts +2 -0
  144. package/dist/classifiers/typesafe/index.js +8 -0
  145. package/dist/classifiers/typesafe/jev/classifier.d.ts +70 -0
  146. package/dist/classifiers/typesafe/jev/classifier.js +220 -0
  147. package/dist/classifiers/typesafe/jev/client.d.ts +105 -0
  148. package/dist/classifiers/typesafe/jev/client.js +233 -0
  149. package/dist/classifiers/typesafe/jev/index.d.ts +2 -0
  150. package/dist/classifiers/typesafe/jev/index.js +8 -0
  151. package/dist/clocks/base_clock.d.ts +13 -0
  152. package/dist/clocks/base_clock.js +14 -0
  153. package/dist/clocks/index.d.ts +2 -0
  154. package/dist/clocks/index.js +8 -0
  155. package/dist/clocks/system_clock.d.ts +15 -0
  156. package/dist/clocks/system_clock.js +25 -0
  157. package/dist/frames/frames.d.ts +2533 -0
  158. package/dist/frames/frames.js +2485 -0
  159. package/dist/frames/index.d.ts +2 -0
  160. package/dist/frames/index.js +8 -0
  161. package/dist/frames/protobufs/frames_pb2.d.ts +229 -0
  162. package/dist/frames/protobufs/frames_pb2.js +466 -0
  163. package/dist/index.d.ts +11 -0
  164. package/dist/index.js +56 -0
  165. package/dist/metrics/index.d.ts +2 -0
  166. package/dist/metrics/index.js +8 -0
  167. package/dist/metrics/metrics.d.ts +276 -0
  168. package/dist/metrics/metrics.js +254 -0
  169. package/dist/observers/base_observer.d.ts +173 -0
  170. package/dist/observers/base_observer.js +151 -0
  171. package/dist/observers/error_observer.d.ts +75 -0
  172. package/dist/observers/error_observer.js +87 -0
  173. package/dist/observers/function_call_observer.d.ts +157 -0
  174. package/dist/observers/function_call_observer.js +222 -0
  175. package/dist/observers/index.d.ts +2 -0
  176. package/dist/observers/index.js +8 -0
  177. package/dist/observers/loggers/debug_log_observer.d.ts +91 -0
  178. package/dist/observers/loggers/debug_log_observer.js +228 -0
  179. package/dist/observers/loggers/index.d.ts +2 -0
  180. package/dist/observers/loggers/index.js +8 -0
  181. package/dist/observers/loggers/llm_log_observer.d.ts +24 -0
  182. package/dist/observers/loggers/llm_log_observer.js +110 -0
  183. package/dist/observers/loggers/metrics_log_observer.d.ts +85 -0
  184. package/dist/observers/loggers/metrics_log_observer.js +186 -0
  185. package/dist/observers/loggers/transcription_log_observer.d.ts +23 -0
  186. package/dist/observers/loggers/transcription_log_observer.js +74 -0
  187. package/dist/observers/service_metrics_observer.d.ts +168 -0
  188. package/dist/observers/service_metrics_observer.js +236 -0
  189. package/dist/observers/speaking_observer.d.ts +104 -0
  190. package/dist/observers/speaking_observer.js +150 -0
  191. package/dist/observers/startup_timing_observer.d.ts +221 -0
  192. package/dist/observers/startup_timing_observer.js +365 -0
  193. package/dist/observers/turn_tracking_observer.d.ts +78 -0
  194. package/dist/observers/turn_tracking_observer.js +189 -0
  195. package/dist/observers/user_bot_latency_observer.d.ts +411 -0
  196. package/dist/observers/user_bot_latency_observer.js +974 -0
  197. package/dist/pipeline/base_pipeline.d.ts +49 -0
  198. package/dist/pipeline/base_pipeline.js +101 -0
  199. package/dist/pipeline/capabilities.d.ts +76 -0
  200. package/dist/pipeline/capabilities.js +97 -0
  201. package/dist/pipeline/index.d.ts +2 -0
  202. package/dist/pipeline/index.js +8 -0
  203. package/dist/pipeline/job_context.d.ts +317 -0
  204. package/dist/pipeline/job_context.js +450 -0
  205. package/dist/pipeline/job_decorator.d.ts +54 -0
  206. package/dist/pipeline/job_decorator.js +92 -0
  207. package/dist/pipeline/llm_switcher.d.ts +84 -0
  208. package/dist/pipeline/llm_switcher.js +107 -0
  209. package/dist/pipeline/llm_with_backend.d.ts +435 -0
  210. package/dist/pipeline/llm_with_backend.js +806 -0
  211. package/dist/pipeline/parallel_pipeline.d.ts +83 -0
  212. package/dist/pipeline/parallel_pipeline.js +200 -0
  213. package/dist/pipeline/pipeline.d.ts +126 -0
  214. package/dist/pipeline/pipeline.js +196 -0
  215. package/dist/pipeline/service_switcher.d.ts +287 -0
  216. package/dist/pipeline/service_switcher.js +509 -0
  217. package/dist/pipeline/sync_parallel_pipeline.d.ts +192 -0
  218. package/dist/pipeline/sync_parallel_pipeline.js +387 -0
  219. package/dist/pipeline/worker.d.ts +821 -0
  220. package/dist/pipeline/worker.js +1656 -0
  221. package/dist/pipeline/worker_observer.d.ts +131 -0
  222. package/dist/pipeline/worker_observer.js +274 -0
  223. package/dist/pipeline/worker_ready_decorator.d.ts +45 -0
  224. package/dist/pipeline/worker_ready_decorator.js +76 -0
  225. package/dist/processors/aggregators/async_tool_messages.d.ts +146 -0
  226. package/dist/processors/aggregators/async_tool_messages.js +291 -0
  227. package/dist/processors/aggregators/dtmf_aggregator.d.ts +61 -0
  228. package/dist/processors/aggregators/dtmf_aggregator.js +144 -0
  229. package/dist/processors/aggregators/gated.d.ts +43 -0
  230. package/dist/processors/aggregators/gated.js +86 -0
  231. package/dist/processors/aggregators/gated_llm_context.d.ts +42 -0
  232. package/dist/processors/aggregators/gated_llm_context.js +86 -0
  233. package/dist/processors/aggregators/index.d.ts +2 -0
  234. package/dist/processors/aggregators/index.js +8 -0
  235. package/dist/processors/aggregators/llm_context.d.ts +370 -0
  236. package/dist/processors/aggregators/llm_context.js +580 -0
  237. package/dist/processors/aggregators/llm_context_summarizer.d.ts +219 -0
  238. package/dist/processors/aggregators/llm_context_summarizer.js +447 -0
  239. package/dist/processors/aggregators/llm_response.d.ts +37 -0
  240. package/dist/processors/aggregators/llm_response.js +71 -0
  241. package/dist/processors/aggregators/llm_response_universal.d.ts +966 -0
  242. package/dist/processors/aggregators/llm_response_universal.js +2394 -0
  243. package/dist/processors/aggregators/llm_text_processor.d.ts +53 -0
  244. package/dist/processors/aggregators/llm_text_processor.js +102 -0
  245. package/dist/processors/aggregators/sentence.d.ts +39 -0
  246. package/dist/processors/aggregators/sentence.js +69 -0
  247. package/dist/processors/async_generator.d.ts +42 -0
  248. package/dist/processors/async_generator.js +76 -0
  249. package/dist/processors/audio/audio_buffer_processor.d.ts +241 -0
  250. package/dist/processors/audio/audio_buffer_processor.js +565 -0
  251. package/dist/processors/audio/index.d.ts +2 -0
  252. package/dist/processors/audio/index.js +8 -0
  253. package/dist/processors/audio/vad_processor.d.ts +67 -0
  254. package/dist/processors/audio/vad_processor.js +103 -0
  255. package/dist/processors/consumer_processor.d.ts +49 -0
  256. package/dist/processors/consumer_processor.js +85 -0
  257. package/dist/processors/filters/frame_filter.d.ts +39 -0
  258. package/dist/processors/filters/frame_filter.js +52 -0
  259. package/dist/processors/filters/function_filter.d.ts +59 -0
  260. package/dist/processors/filters/function_filter.js +78 -0
  261. package/dist/processors/filters/identity_filter.d.ts +33 -0
  262. package/dist/processors/filters/identity_filter.js +37 -0
  263. package/dist/processors/filters/index.d.ts +2 -0
  264. package/dist/processors/filters/index.js +8 -0
  265. package/dist/processors/filters/null_filter.d.ts +34 -0
  266. package/dist/processors/filters/null_filter.js +47 -0
  267. package/dist/processors/filters/wake_notifier_filter.d.ts +48 -0
  268. package/dist/processors/filters/wake_notifier_filter.js +49 -0
  269. package/dist/processors/frame_processor.d.ts +360 -0
  270. package/dist/processors/frame_processor.js +932 -0
  271. package/dist/processors/frameworks/index.d.ts +2 -0
  272. package/dist/processors/frameworks/index.js +8 -0
  273. package/dist/processors/frameworks/rtvi/frames.d.ts +241 -0
  274. package/dist/processors/frameworks/rtvi/frames.js +259 -0
  275. package/dist/processors/frameworks/rtvi/index.d.ts +6 -0
  276. package/dist/processors/frameworks/rtvi/index.js +11 -0
  277. package/dist/processors/frameworks/rtvi/models.d.ts +1741 -0
  278. package/dist/processors/frameworks/rtvi/models.js +1807 -0
  279. package/dist/processors/frameworks/rtvi/observer.d.ts +340 -0
  280. package/dist/processors/frameworks/rtvi/observer.js +1113 -0
  281. package/dist/processors/frameworks/rtvi/processor.d.ts +182 -0
  282. package/dist/processors/frameworks/rtvi/processor.js +676 -0
  283. package/dist/processors/idle_frame_processor.d.ts +44 -0
  284. package/dist/processors/idle_frame_processor.js +86 -0
  285. package/dist/processors/index.d.ts +2 -0
  286. package/dist/processors/index.js +8 -0
  287. package/dist/processors/logger.d.ts +42 -0
  288. package/dist/processors/logger.js +87 -0
  289. package/dist/processors/metrics/frame_processor_metrics.d.ts +172 -0
  290. package/dist/processors/metrics/frame_processor_metrics.js +372 -0
  291. package/dist/processors/metrics/index.d.ts +2 -0
  292. package/dist/processors/metrics/index.js +8 -0
  293. package/dist/processors/producer_processor.d.ts +68 -0
  294. package/dist/processors/producer_processor.js +78 -0
  295. package/dist/processors/text_transformer.d.ts +30 -0
  296. package/dist/processors/text_transformer.js +48 -0
  297. package/dist/registry/index.d.ts +3 -0
  298. package/dist/registry/index.js +8 -0
  299. package/dist/registry/registry.d.ts +69 -0
  300. package/dist/registry/registry.js +149 -0
  301. package/dist/registry/types.d.ts +47 -0
  302. package/dist/registry/types.js +39 -0
  303. package/dist/serializers/base_serializer.d.ts +94 -0
  304. package/dist/serializers/base_serializer.js +82 -0
  305. package/dist/serializers/index.d.ts +2 -0
  306. package/dist/serializers/index.js +8 -0
  307. package/dist/services/ai_service.d.ts +145 -0
  308. package/dist/services/ai_service.js +262 -0
  309. package/dist/services/anthropic/index.d.ts +2 -0
  310. package/dist/services/anthropic/index.js +7 -0
  311. package/dist/services/assemblyai/index.d.ts +2 -0
  312. package/dist/services/assemblyai/index.js +7 -0
  313. package/dist/services/asyncai/index.d.ts +2 -0
  314. package/dist/services/asyncai/index.js +7 -0
  315. package/dist/services/aws/index.d.ts +2 -0
  316. package/dist/services/aws/index.js +7 -0
  317. package/dist/services/azure/index.d.ts +2 -0
  318. package/dist/services/azure/index.js +7 -0
  319. package/dist/services/baseten/index.d.ts +2 -0
  320. package/dist/services/baseten/index.js +7 -0
  321. package/dist/services/bland/index.d.ts +2 -0
  322. package/dist/services/bland/index.js +7 -0
  323. package/dist/services/camb/index.d.ts +2 -0
  324. package/dist/services/camb/index.js +7 -0
  325. package/dist/services/cartesia/index.d.ts +2 -0
  326. package/dist/services/cartesia/index.js +7 -0
  327. package/dist/services/cerebras/index.d.ts +2 -0
  328. package/dist/services/cerebras/index.js +7 -0
  329. package/dist/services/crusoe/index.d.ts +2 -0
  330. package/dist/services/crusoe/index.js +7 -0
  331. package/dist/services/deepgram/index.d.ts +2 -0
  332. package/dist/services/deepgram/index.js +7 -0
  333. package/dist/services/deepseek/index.d.ts +2 -0
  334. package/dist/services/deepseek/index.js +7 -0
  335. package/dist/services/elevenlabs/index.d.ts +2 -0
  336. package/dist/services/elevenlabs/index.js +7 -0
  337. package/dist/services/fal/index.d.ts +2 -0
  338. package/dist/services/fal/index.js +7 -0
  339. package/dist/services/fireworks/index.d.ts +2 -0
  340. package/dist/services/fireworks/index.js +7 -0
  341. package/dist/services/fish/index.d.ts +2 -0
  342. package/dist/services/fish/index.js +7 -0
  343. package/dist/services/funasr/index.d.ts +3 -0
  344. package/dist/services/funasr/index.js +8 -0
  345. package/dist/services/gladia/index.d.ts +2 -0
  346. package/dist/services/gladia/index.js +7 -0
  347. package/dist/services/google/index.d.ts +2 -0
  348. package/dist/services/google/index.js +7 -0
  349. package/dist/services/gradium/index.d.ts +2 -0
  350. package/dist/services/gradium/index.js +7 -0
  351. package/dist/services/grok/index.d.ts +2 -0
  352. package/dist/services/grok/index.js +7 -0
  353. package/dist/services/groq/index.d.ts +2 -0
  354. package/dist/services/groq/index.js +7 -0
  355. package/dist/services/heygen/index.d.ts +2 -0
  356. package/dist/services/heygen/index.js +7 -0
  357. package/dist/services/hume/index.d.ts +2 -0
  358. package/dist/services/hume/index.js +7 -0
  359. package/dist/services/image_service.d.ts +52 -0
  360. package/dist/services/image_service.js +60 -0
  361. package/dist/services/inception/index.d.ts +2 -0
  362. package/dist/services/inception/index.js +7 -0
  363. package/dist/services/index.d.ts +2 -0
  364. package/dist/services/index.js +8 -0
  365. package/dist/services/inworld/index.d.ts +2 -0
  366. package/dist/services/inworld/index.js +7 -0
  367. package/dist/services/keenable/index.d.ts +2 -0
  368. package/dist/services/keenable/index.js +7 -0
  369. package/dist/services/kokoro/index.d.ts +2 -0
  370. package/dist/services/kokoro/index.js +7 -0
  371. package/dist/services/llm_service.d.ts +1106 -0
  372. package/dist/services/llm_service.js +2231 -0
  373. package/dist/services/mem0/index.d.ts +2 -0
  374. package/dist/services/mem0/index.js +7 -0
  375. package/dist/services/meta/index.d.ts +2 -0
  376. package/dist/services/meta/index.js +7 -0
  377. package/dist/services/minimax/index.d.ts +2 -0
  378. package/dist/services/minimax/index.js +7 -0
  379. package/dist/services/mistral/index.d.ts +2 -0
  380. package/dist/services/mistral/index.js +7 -0
  381. package/dist/services/moondream/index.d.ts +2 -0
  382. package/dist/services/moondream/index.js +7 -0
  383. package/dist/services/moonshine/index.d.ts +2 -0
  384. package/dist/services/moonshine/index.js +7 -0
  385. package/dist/services/nebius/index.d.ts +2 -0
  386. package/dist/services/nebius/index.js +7 -0
  387. package/dist/services/neuphonic/index.d.ts +2 -0
  388. package/dist/services/neuphonic/index.js +7 -0
  389. package/dist/services/novita/index.d.ts +2 -0
  390. package/dist/services/novita/index.js +7 -0
  391. package/dist/services/nvidia/index.d.ts +2 -0
  392. package/dist/services/nvidia/index.js +11 -0
  393. package/dist/services/ollama/index.d.ts +2 -0
  394. package/dist/services/ollama/index.js +7 -0
  395. package/dist/services/openai/index.d.ts +2 -0
  396. package/dist/services/openai/index.js +7 -0
  397. package/dist/services/openclaw/index.d.ts +14 -0
  398. package/dist/services/openclaw/index.js +19 -0
  399. package/dist/services/openrouter/index.d.ts +2 -0
  400. package/dist/services/openrouter/index.js +7 -0
  401. package/dist/services/perplexity/index.d.ts +2 -0
  402. package/dist/services/perplexity/index.js +7 -0
  403. package/dist/services/piper/index.d.ts +2 -0
  404. package/dist/services/piper/index.js +7 -0
  405. package/dist/services/pocket_tts/index.d.ts +2 -0
  406. package/dist/services/pocket_tts/index.js +7 -0
  407. package/dist/services/qwen/index.d.ts +2 -0
  408. package/dist/services/qwen/index.js +7 -0
  409. package/dist/services/resembleai/index.d.ts +2 -0
  410. package/dist/services/resembleai/index.js +7 -0
  411. package/dist/services/rime/index.d.ts +2 -0
  412. package/dist/services/rime/index.js +7 -0
  413. package/dist/services/sambanova/index.d.ts +2 -0
  414. package/dist/services/sambanova/index.js +7 -0
  415. package/dist/services/sarvam/index.d.ts +2 -0
  416. package/dist/services/sarvam/index.js +7 -0
  417. package/dist/services/settings.d.ts +356 -0
  418. package/dist/services/settings.js +437 -0
  419. package/dist/services/simli/index.d.ts +2 -0
  420. package/dist/services/simli/index.js +7 -0
  421. package/dist/services/smallest/index.d.ts +2 -0
  422. package/dist/services/smallest/index.js +7 -0
  423. package/dist/services/soniox/index.d.ts +2 -0
  424. package/dist/services/soniox/index.js +7 -0
  425. package/dist/services/speechify/index.d.ts +2 -0
  426. package/dist/services/speechify/index.js +7 -0
  427. package/dist/services/speechmatics/index.d.ts +2 -0
  428. package/dist/services/speechmatics/index.js +7 -0
  429. package/dist/services/stt_latency.d.ts +62 -0
  430. package/dist/services/stt_latency.js +71 -0
  431. package/dist/services/stt_service.d.ts +601 -0
  432. package/dist/services/stt_service.js +1044 -0
  433. package/dist/services/tavus/index.d.ts +2 -0
  434. package/dist/services/tavus/index.js +7 -0
  435. package/dist/services/together/index.d.ts +2 -0
  436. package/dist/services/together/index.js +7 -0
  437. package/dist/services/tts_service.d.ts +909 -0
  438. package/dist/services/tts_service.js +2018 -0
  439. package/dist/services/ultravox/index.d.ts +2 -0
  440. package/dist/services/ultravox/index.js +9 -0
  441. package/dist/services/vision_service.d.ts +56 -0
  442. package/dist/services/vision_service.js +62 -0
  443. package/dist/services/websocket_service.d.ts +213 -0
  444. package/dist/services/websocket_service.js +654 -0
  445. package/dist/services/whisper/index.d.ts +2 -0
  446. package/dist/services/whisper/index.js +9 -0
  447. package/dist/services/xai/index.d.ts +2 -0
  448. package/dist/services/xai/index.js +9 -0
  449. package/dist/services/xtts/index.d.ts +2 -0
  450. package/dist/services/xtts/index.js +9 -0
  451. package/dist/tests/index.d.ts +2 -0
  452. package/dist/tests/index.js +8 -0
  453. package/dist/tests/utils.d.ts +123 -0
  454. package/dist/tests/utils.js +212 -0
  455. package/dist/transcriptions/index.d.ts +2 -0
  456. package/dist/transcriptions/index.js +8 -0
  457. package/dist/transcriptions/language.d.ts +376 -0
  458. package/dist/transcriptions/language.js +543 -0
  459. package/dist/transports/base_input.d.ts +149 -0
  460. package/dist/transports/base_input.js +338 -0
  461. package/dist/transports/base_output.d.ts +432 -0
  462. package/dist/transports/base_output.js +1231 -0
  463. package/dist/transports/base_transport.d.ts +223 -0
  464. package/dist/transports/base_transport.js +167 -0
  465. package/dist/transports/daily/index.d.ts +2 -0
  466. package/dist/transports/daily/index.js +9 -0
  467. package/dist/transports/heygen/index.d.ts +2 -0
  468. package/dist/transports/heygen/index.js +9 -0
  469. package/dist/transports/index.d.ts +2 -0
  470. package/dist/transports/index.js +8 -0
  471. package/dist/transports/lemonslice/index.d.ts +2 -0
  472. package/dist/transports/lemonslice/index.js +9 -0
  473. package/dist/transports/livekit/index.d.ts +2 -0
  474. package/dist/transports/livekit/index.js +9 -0
  475. package/dist/transports/local/index.d.ts +2 -0
  476. package/dist/transports/local/index.js +9 -0
  477. package/dist/transports/moq/index.d.ts +2 -0
  478. package/dist/transports/moq/index.js +9 -0
  479. package/dist/transports/smallwebrtc/index.d.ts +2 -0
  480. package/dist/transports/smallwebrtc/index.js +9 -0
  481. package/dist/transports/tavus/index.d.ts +2 -0
  482. package/dist/transports/tavus/index.js +9 -0
  483. package/dist/transports/video_in_sampler.d.ts +157 -0
  484. package/dist/transports/video_in_sampler.js +258 -0
  485. package/dist/transports/vonage/index.d.ts +2 -0
  486. package/dist/transports/vonage/index.js +9 -0
  487. package/dist/transports/websocket/index.d.ts +2 -0
  488. package/dist/transports/websocket/index.js +9 -0
  489. package/dist/transports/whatsapp/index.d.ts +2 -0
  490. package/dist/transports/whatsapp/index.js +9 -0
  491. package/dist/turns/eager_end_of_turn_mixin.d.ts +70 -0
  492. package/dist/turns/eager_end_of_turn_mixin.js +122 -0
  493. package/dist/turns/empty_user_turn.d.ts +55 -0
  494. package/dist/turns/empty_user_turn.js +53 -0
  495. package/dist/turns/index.d.ts +2 -0
  496. package/dist/turns/index.js +8 -0
  497. package/dist/turns/speculation_gate.d.ts +169 -0
  498. package/dist/turns/speculation_gate.js +294 -0
  499. package/dist/turns/types.d.ts +33 -0
  500. package/dist/turns/types.js +35 -0
  501. package/dist/turns/user_idle_controller.d.ts +94 -0
  502. package/dist/turns/user_idle_controller.js +187 -0
  503. package/dist/turns/user_mute/always_user_mute_strategy.d.ts +15 -0
  504. package/dist/turns/user_mute/always_user_mute_strategy.js +29 -0
  505. package/dist/turns/user_mute/base_user_mute_strategy.d.ts +39 -0
  506. package/dist/turns/user_mute/base_user_mute_strategy.js +45 -0
  507. package/dist/turns/user_mute/first_speech_user_mute_strategy.d.ts +28 -0
  508. package/dist/turns/user_mute/first_speech_user_mute_strategy.js +52 -0
  509. package/dist/turns/user_mute/function_call_user_mute_strategy.d.ts +25 -0
  510. package/dist/turns/user_mute/function_call_user_mute_strategy.js +50 -0
  511. package/dist/turns/user_mute/index.d.ts +6 -0
  512. package/dist/turns/user_mute/index.js +11 -0
  513. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.d.ts +43 -0
  514. package/dist/turns/user_mute/mute_until_first_bot_complete_user_mute_strategy.js +76 -0
  515. package/dist/turns/user_start/base_user_turn_start_strategy.d.ts +135 -0
  516. package/dist/turns/user_start/base_user_turn_start_strategy.js +134 -0
  517. package/dist/turns/user_start/external_user_turn_start_strategy.d.ts +45 -0
  518. package/dist/turns/user_start/external_user_turn_start_strategy.js +64 -0
  519. package/dist/turns/user_start/index.d.ts +8 -0
  520. package/dist/turns/user_start/index.js +16 -0
  521. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.d.ts +133 -0
  522. package/dist/turns/user_start/krisp_viva_ip_user_turn_start_strategy.js +243 -0
  523. package/dist/turns/user_start/min_words_user_turn_start_strategy.d.ts +60 -0
  524. package/dist/turns/user_start/min_words_user_turn_start_strategy.js +102 -0
  525. package/dist/turns/user_start/transcription_user_turn_start_strategy.d.ts +29 -0
  526. package/dist/turns/user_start/transcription_user_turn_start_strategy.js +43 -0
  527. package/dist/turns/user_start/vad_user_turn_start_strategy.d.ts +20 -0
  528. package/dist/turns/user_start/vad_user_turn_start_strategy.js +31 -0
  529. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.d.ts +141 -0
  530. package/dist/turns/user_start/wake_phrase_user_turn_start_strategy.js +238 -0
  531. package/dist/turns/user_stop/base_user_turn_stop_strategy.d.ts +174 -0
  532. package/dist/turns/user_stop/base_user_turn_stop_strategy.js +170 -0
  533. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.d.ts +81 -0
  534. package/dist/turns/user_stop/deferred_user_turn_stop_strategy.js +107 -0
  535. package/dist/turns/user_stop/eager_match_policy.d.ts +36 -0
  536. package/dist/turns/user_stop/eager_match_policy.js +50 -0
  537. package/dist/turns/user_stop/eager_user_turn_stop_strategy.d.ts +84 -0
  538. package/dist/turns/user_stop/eager_user_turn_stop_strategy.js +154 -0
  539. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.d.ts +45 -0
  540. package/dist/turns/user_stop/external_user_turn_completion_stop_strategy.js +55 -0
  541. package/dist/turns/user_stop/external_user_turn_stop_strategy.d.ts +115 -0
  542. package/dist/turns/user_stop/external_user_turn_stop_strategy.js +205 -0
  543. package/dist/turns/user_stop/index.d.ts +10 -0
  544. package/dist/turns/user_stop/index.js +15 -0
  545. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.d.ts +44 -0
  546. package/dist/turns/user_stop/llm_turn_completion_user_turn_stop_strategy.js +59 -0
  547. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.d.ts +140 -0
  548. package/dist/turns/user_stop/speech_timeout_user_turn_stop_strategy.js +303 -0
  549. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.d.ts +135 -0
  550. package/dist/turns/user_stop/turn_analyzer_user_turn_stop_strategy.js +332 -0
  551. package/dist/turns/user_turn_completion_mixin.d.ts +147 -0
  552. package/dist/turns/user_turn_completion_mixin.js +591 -0
  553. package/dist/turns/user_turn_controller.d.ts +134 -0
  554. package/dist/turns/user_turn_controller.js +335 -0
  555. package/dist/turns/user_turn_processor.d.ts +87 -0
  556. package/dist/turns/user_turn_processor.js +180 -0
  557. package/dist/turns/user_turn_strategies.d.ts +187 -0
  558. package/dist/turns/user_turn_strategies.js +222 -0
  559. package/dist/utils/async_tool_cancellation.d.ts +35 -0
  560. package/dist/utils/async_tool_cancellation.js +78 -0
  561. package/dist/utils/asyncio/index.d.ts +2 -0
  562. package/dist/utils/asyncio/index.js +7 -0
  563. package/dist/utils/asyncio/task_manager.d.ts +49 -0
  564. package/dist/utils/asyncio/task_manager.js +105 -0
  565. package/dist/utils/base_object.d.ts +76 -0
  566. package/dist/utils/base_object.js +154 -0
  567. package/dist/utils/context/aggregated_frame_sequencer.d.ts +491 -0
  568. package/dist/utils/context/aggregated_frame_sequencer.js +803 -0
  569. package/dist/utils/context/audio_context_manager.d.ts +131 -0
  570. package/dist/utils/context/audio_context_manager.js +233 -0
  571. package/dist/utils/context/index.d.ts +2 -0
  572. package/dist/utils/context/index.js +7 -0
  573. package/dist/utils/context/llm_context_summarization.d.ts +258 -0
  574. package/dist/utils/context/llm_context_summarization.js +511 -0
  575. package/dist/utils/context/text_segment_map.d.ts +611 -0
  576. package/dist/utils/context/text_segment_map.js +1132 -0
  577. package/dist/utils/context/word_completion_tracker.d.ts +273 -0
  578. package/dist/utils/context/word_completion_tracker.js +441 -0
  579. package/dist/utils/context/word_timestamp_tracker.d.ts +72 -0
  580. package/dist/utils/context/word_timestamp_tracker.js +98 -0
  581. package/dist/utils/deprecation.d.ts +28 -0
  582. package/dist/utils/deprecation.js +75 -0
  583. package/dist/utils/env.d.ts +38 -0
  584. package/dist/utils/env.js +62 -0
  585. package/dist/utils/errors.d.ts +75 -0
  586. package/dist/utils/errors.js +202 -0
  587. package/dist/utils/file_resolver.d.ts +126 -0
  588. package/dist/utils/file_resolver.js +314 -0
  589. package/dist/utils/file_storage.d.ts +115 -0
  590. package/dist/utils/file_storage.js +178 -0
  591. package/dist/utils/frame_queue.d.ts +36 -0
  592. package/dist/utils/frame_queue.js +66 -0
  593. package/dist/utils/http.d.ts +39 -0
  594. package/dist/utils/http.js +53 -0
  595. package/dist/utils/image.d.ts +14 -0
  596. package/dist/utils/image.js +63 -0
  597. package/dist/utils/index.d.ts +2 -0
  598. package/dist/utils/index.js +8 -0
  599. package/dist/utils/jpeg_encoder.d.ts +14 -0
  600. package/dist/utils/jpeg_encoder.js +315 -0
  601. package/dist/utils/log_config.d.ts +34 -0
  602. package/dist/utils/log_config.js +76 -0
  603. package/dist/utils/logger.d.ts +40 -0
  604. package/dist/utils/logger.js +91 -0
  605. package/dist/utils/mixin.d.ts +14 -0
  606. package/dist/utils/mixin.js +63 -0
  607. package/dist/utils/network.d.ts +73 -0
  608. package/dist/utils/network.js +90 -0
  609. package/dist/utils/security/allowed_origins.d.ts +16 -0
  610. package/dist/utils/security/allowed_origins.js +34 -0
  611. package/dist/utils/security/index.d.ts +2 -0
  612. package/dist/utils/security/index.js +7 -0
  613. package/dist/utils/security/redaction.d.ts +27 -0
  614. package/dist/utils/security/redaction.js +123 -0
  615. package/dist/utils/security/ssrf.d.ts +79 -0
  616. package/dist/utils/security/ssrf.js +327 -0
  617. package/dist/utils/shared.d.ts +35 -0
  618. package/dist/utils/shared.js +136 -0
  619. package/dist/utils/startup.d.ts +17 -0
  620. package/dist/utils/startup.js +130 -0
  621. package/dist/utils/string.d.ts +116 -0
  622. package/dist/utils/string.js +460 -0
  623. package/dist/utils/sync/base_notifier.d.ts +25 -0
  624. package/dist/utils/sync/base_notifier.js +16 -0
  625. package/dist/utils/sync/event_notifier.d.ts +38 -0
  626. package/dist/utils/sync/event_notifier.js +51 -0
  627. package/dist/utils/sync/index.d.ts +2 -0
  628. package/dist/utils/sync/index.js +7 -0
  629. package/dist/utils/text/alnum_utils.d.ts +109 -0
  630. package/dist/utils/text/alnum_utils.js +262 -0
  631. package/dist/utils/text/base_text_aggregator.d.ts +146 -0
  632. package/dist/utils/text/base_text_aggregator.js +102 -0
  633. package/dist/utils/text/base_text_filter.d.ts +54 -0
  634. package/dist/utils/text/base_text_filter.js +50 -0
  635. package/dist/utils/text/index.d.ts +2 -0
  636. package/dist/utils/text/index.js +7 -0
  637. package/dist/utils/text/markdown_text_filter.d.ts +147 -0
  638. package/dist/utils/text/markdown_text_filter.js +522 -0
  639. package/dist/utils/text/markup_utils.d.ts +54 -0
  640. package/dist/utils/text/markup_utils.js +156 -0
  641. package/dist/utils/text/pattern_pair_aggregator.d.ts +251 -0
  642. package/dist/utils/text/pattern_pair_aggregator.js +478 -0
  643. package/dist/utils/text/phonemes.d.ts +60 -0
  644. package/dist/utils/text/phonemes.js +172 -0
  645. package/dist/utils/text/simple_text_aggregator.d.ts +135 -0
  646. package/dist/utils/text/simple_text_aggregator.js +254 -0
  647. package/dist/utils/text/skip_tags_aggregator.d.ts +85 -0
  648. package/dist/utils/text/skip_tags_aggregator.js +147 -0
  649. package/dist/utils/text/transforms/acronyms.d.ts +21 -0
  650. package/dist/utils/text/transforms/acronyms.js +31 -0
  651. package/dist/utils/text/transforms/currency.d.ts +16 -0
  652. package/dist/utils/text/transforms/currency.js +56 -0
  653. package/dist/utils/text/transforms/dates.d.ts +18 -0
  654. package/dist/utils/text/transforms/dates.js +102 -0
  655. package/dist/utils/text/transforms/email.d.ts +17 -0
  656. package/dist/utils/text/transforms/email.js +35 -0
  657. package/dist/utils/text/transforms/index.d.ts +37 -0
  658. package/dist/utils/text/transforms/index.js +42 -0
  659. package/dist/utils/text/transforms/numbers.d.ts +25 -0
  660. package/dist/utils/text/transforms/numbers.js +59 -0
  661. package/dist/utils/text/transforms/percentages.d.ts +16 -0
  662. package/dist/utils/text/transforms/percentages.js +32 -0
  663. package/dist/utils/text/transforms/phone.d.ts +21 -0
  664. package/dist/utils/text/transforms/phone.js +39 -0
  665. package/dist/utils/text/transforms/pronunciations.d.ts +65 -0
  666. package/dist/utils/text/transforms/pronunciations.js +112 -0
  667. package/dist/utils/text/transforms/replacements.d.ts +39 -0
  668. package/dist/utils/text/transforms/replacements.js +46 -0
  669. package/dist/utils/text/transforms/strip_markdown.d.ts +25 -0
  670. package/dist/utils/text/transforms/strip_markdown.js +60 -0
  671. package/dist/utils/text/transforms/units.d.ts +22 -0
  672. package/dist/utils/text/transforms/units.js +81 -0
  673. package/dist/utils/text/transforms/voice_formatter.d.ts +86 -0
  674. package/dist/utils/text/transforms/voice_formatter.js +98 -0
  675. package/dist/utils/text/unicode_digits.d.ts +3 -0
  676. package/dist/utils/text/unicode_digits.js +34 -0
  677. package/dist/utils/text/word_timestamp_utils.d.ts +26 -0
  678. package/dist/utils/text/word_timestamp_utils.js +52 -0
  679. package/dist/utils/time.d.ts +13 -0
  680. package/dist/utils/time.js +31 -0
  681. package/dist/utils/tracing/index.d.ts +3 -0
  682. package/dist/utils/tracing/index.js +8 -0
  683. package/dist/utils/tracing/service_attributes.d.ts +198 -0
  684. package/dist/utils/tracing/service_attributes.js +434 -0
  685. package/dist/utils/tracing/service_decorators.d.ts +214 -0
  686. package/dist/utils/tracing/service_decorators.js +1662 -0
  687. package/dist/utils/tracing/setup.d.ts +107 -0
  688. package/dist/utils/tracing/setup.js +160 -0
  689. package/dist/utils/tracing/tracing_context.d.ts +55 -0
  690. package/dist/utils/tracing/tracing_context.js +97 -0
  691. package/dist/utils/tracing/turn_trace_observer.d.ts +95 -0
  692. package/dist/utils/tracing/turn_trace_observer.js +233 -0
  693. package/dist/utils/types.d.ts +80 -0
  694. package/dist/utils/types.js +108 -0
  695. package/dist/utils/utils.d.ts +5 -0
  696. package/dist/utils/utils.js +22 -0
  697. package/dist/utils/yaml.d.ts +179 -0
  698. package/dist/utils/yaml.js +556 -0
  699. package/dist/version.d.ts +3 -0
  700. package/dist/version.js +7 -0
  701. package/dist/workers/base_worker.d.ts +772 -0
  702. package/dist/workers/base_worker.js +1298 -0
  703. package/dist/workers/index.d.ts +2 -0
  704. package/dist/workers/index.js +8 -0
  705. package/dist/workers/llm/backend_llm_worker.d.ts +552 -0
  706. package/dist/workers/llm/backend_llm_worker.js +1055 -0
  707. package/dist/workers/llm/index.d.ts +6 -0
  708. package/dist/workers/llm/index.js +11 -0
  709. package/dist/workers/llm/llm_context_worker.d.ts +66 -0
  710. package/dist/workers/llm/llm_context_worker.js +72 -0
  711. package/dist/workers/llm/llm_worker.d.ts +180 -0
  712. package/dist/workers/llm/llm_worker.js +323 -0
  713. package/dist/workers/llm/tool_decorator.d.ts +68 -0
  714. package/dist/workers/llm/tool_decorator.js +60 -0
  715. package/dist/workers/proxy/index.d.ts +3 -0
  716. package/dist/workers/proxy/index.js +9 -0
  717. package/dist/workers/proxy/websocket/client.d.ts +110 -0
  718. package/dist/workers/proxy/websocket/client.js +196 -0
  719. package/dist/workers/proxy/websocket/index.d.ts +3 -0
  720. package/dist/workers/proxy/websocket/index.js +10 -0
  721. package/dist/workers/runner.d.ts +268 -0
  722. package/dist/workers/runner.js +489 -0
  723. package/dist/workers/ui/index.d.ts +22 -0
  724. package/dist/workers/ui/index.js +27 -0
  725. package/dist/workers/ui/ui_event_decorator.d.ts +43 -0
  726. package/dist/workers/ui/ui_event_decorator.js +75 -0
  727. package/dist/workers/ui/ui_job_context.d.ts +12 -0
  728. package/dist/workers/ui/ui_job_context.js +17 -0
  729. package/dist/workers/ui/ui_prompts.d.ts +21 -0
  730. package/dist/workers/ui/ui_prompts.js +41 -0
  731. package/dist/workers/ui/ui_tools.d.ts +32 -0
  732. package/dist/workers/ui/ui_tools.js +112 -0
  733. package/dist/workers/ui/ui_worker.d.ts +571 -0
  734. package/dist/workers/ui/ui_worker.js +1156 -0
  735. package/package.json +61 -3
  736. package/README.md +0 -5
@@ -0,0 +1,15 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/resamplers/resampy_resampler.py
6
+ /**
7
+ * Resampy-based audio resampler implementation.
8
+ *
9
+ * PORTING NOTE: upstream's only export, `ResampyResampler`, is deprecated
10
+ * (since 1.2.0, removed in 2.0.0) and is not ported. Use
11
+ * `SOXRAudioResampler`, `createFileResampler()` or `createStreamResampler()`
12
+ * instead.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=resampy_resampler.js.map
@@ -0,0 +1,10 @@
1
+ import type { ResamplerEngine } from "./engine.ts";
2
+ /**
3
+ * Create the pure-TypeScript windowed-sinc engine.
4
+ *
5
+ * Applications normally never call this: core falls back to it on its own
6
+ * when the WASM engine cannot load. It can also be installed explicitly with
7
+ * `setResamplerEngine(createSincResamplerEngine())`.
8
+ */
9
+ export declare function createSincResamplerEngine(): ResamplerEngine;
10
+ //# sourceMappingURL=sinc_engine.d.ts.map
@@ -0,0 +1,235 @@
1
+ // Copyright (c) 2026, pipedog contributors
2
+ // SPDX-License-Identifier: BSD-2-Clause
3
+ const SPECS = {
4
+ QQ: { passband: 0.8, attenuation: 50 },
5
+ LQ: { passband: 0.676, attenuation: 96 },
6
+ MQ: { passband: 0.91, attenuation: 96 },
7
+ HQ: { passband: 0.91, attenuation: 120 },
8
+ VHQ: { passband: 0.91, attenuation: 140 },
9
+ };
10
+ /** Kaiser window design (Kaiser's formulas for beta and length). */
11
+ function design({ passband, attenuation }) {
12
+ const transition = 1 - passband; // in units of the lower Nyquist frequency
13
+ const cutoff = (1 + passband) / 2;
14
+ const beta = attenuation > 50
15
+ ? 0.1102 * (attenuation - 8.7)
16
+ : 0.5842 * (attenuation - 21) ** 0.4 + 0.07886 * (attenuation - 21);
17
+ // Total length in samples of the lower rate, then in zero crossings per side.
18
+ const length = (attenuation - 7.95) / (2.285 * Math.PI * transition);
19
+ const zeros = Math.ceil((length / 2) * cutoff);
20
+ return { zeros, cutoff, beta };
21
+ }
22
+ const PRESETS = Object.fromEntries(Object.entries(SPECS).map(([q, spec]) => [q, design(spec)]));
23
+ /** Table points per zero crossing (linear interpolation error ~ -118 dB). */
24
+ const OVERSAMPLE = 1024;
25
+ /** Zeroth-order modified Bessel function of the first kind. */
26
+ function besselI0(x) {
27
+ let sum = 1;
28
+ let term = 1;
29
+ const q = (x * x) / 4;
30
+ for (let k = 1; k < 200; k++) {
31
+ term *= q / (k * k);
32
+ sum += term;
33
+ if (term < sum * 1e-17)
34
+ break;
35
+ }
36
+ return sum;
37
+ }
38
+ const TABLES = new Map();
39
+ /** sinc(x) * kaiser(x / zeros) for x in [0, zeros], OVERSAMPLE points per unit (plus guard). */
40
+ function kernelTable(quality) {
41
+ let table = TABLES.get(quality);
42
+ if (table)
43
+ return table;
44
+ const { zeros, beta } = PRESETS[quality];
45
+ const n = zeros * OVERSAMPLE;
46
+ table = new Float32Array(n + 2);
47
+ const i0b = besselI0(beta);
48
+ for (let i = 0; i <= n; i++) {
49
+ const x = i / OVERSAMPLE;
50
+ const r = x / zeros;
51
+ const w = besselI0(beta * Math.sqrt(Math.max(0, 1 - r * r))) / i0b;
52
+ const s = i === 0 ? 1 : Math.sin(Math.PI * x) / (Math.PI * x);
53
+ table[i] = s * w;
54
+ }
55
+ TABLES.set(quality, table);
56
+ return table;
57
+ }
58
+ function checkRates(inRate, outRate) {
59
+ if (!(inRate > 0) || !(outRate > 0) || !Number.isFinite(inRate) || !Number.isFinite(outRate)) {
60
+ throw new Error(`invalid sample rates: ${inRate}->${outRate}`);
61
+ }
62
+ }
63
+ /** One channel of a streaming windowed-sinc resampler. */
64
+ class SincChannel {
65
+ #step; // input samples per output sample
66
+ #scale; // 2 * fc (fc in cycles per input sample)
67
+ #halfWidth; // kernel half width in input samples
68
+ #table;
69
+ #tableScale; // table index per input-sample distance
70
+ /** Input history; #buf[0] is absolute input index #base. */
71
+ #buf = new Float64Array(256);
72
+ #len = 0;
73
+ #base = 0;
74
+ /** Total input samples seen and next output index (absolute). */
75
+ #totalIn = 0;
76
+ #nextOut = 0;
77
+ constructor(inRate, outRate, quality) {
78
+ const preset = PRESETS[quality];
79
+ this.#step = inRate / outRate;
80
+ const fc = 0.5 * Math.min(1, outRate / inRate) * preset.cutoff;
81
+ this.#scale = 2 * fc;
82
+ this.#halfWidth = preset.zeros / this.#scale;
83
+ this.#table = kernelTable(quality);
84
+ this.#tableScale = this.#scale * OVERSAMPLE;
85
+ }
86
+ #append(samples, start, stride, count) {
87
+ if (this.#len + count > this.#buf.length) {
88
+ const grown = new Float64Array(Math.max(this.#buf.length * 2, this.#len + count));
89
+ grown.set(this.#buf.subarray(0, this.#len));
90
+ this.#buf = grown;
91
+ }
92
+ for (let i = 0; i < count; i++) {
93
+ this.#buf[this.#len + i] = samples[start + i * stride];
94
+ }
95
+ this.#len += count;
96
+ this.#totalIn += count;
97
+ }
98
+ #sampleAt(t) {
99
+ const lo = Math.ceil(t - this.#halfWidth);
100
+ const hi = Math.floor(t + this.#halfWidth);
101
+ const buf = this.#buf;
102
+ const base = this.#base;
103
+ const table = this.#table;
104
+ const ts = this.#tableScale;
105
+ const tableMax = table.length - 2;
106
+ let acc = 0;
107
+ const from = Math.max(lo, base);
108
+ const to = Math.min(hi, base + this.#len - 1);
109
+ for (let n = from; n <= to; n++) {
110
+ const pos = Math.abs(t - n) * ts;
111
+ const i = pos | 0;
112
+ if (i > tableMax)
113
+ continue;
114
+ const frac = pos - i;
115
+ const k = table[i] + (table[i + 1] - table[i]) * frac;
116
+ acc += buf[n - base] * k;
117
+ }
118
+ return acc * this.#scale;
119
+ }
120
+ /** Number of outputs computable now (or, with `end`, the remaining outputs of the stream). */
121
+ #available(end) {
122
+ if (end) {
123
+ const total = Math.round(this.#totalIn / this.#step);
124
+ return Math.max(0, total - this.#nextOut);
125
+ }
126
+ // Output k needs inputs up to floor(k*step + halfWidth) < totalIn.
127
+ const last = Math.floor((this.#totalIn - 1 - this.#halfWidth) / this.#step);
128
+ return Math.max(0, last + 1 - this.#nextOut);
129
+ }
130
+ /** Feed `count` samples (strided) and write the outputs produced to `out` (strided). */
131
+ process(samples, start, stride, count, end) {
132
+ if (count > 0)
133
+ this.#append(samples, start, stride, count);
134
+ const n = this.#available(end);
135
+ const out = new Float64Array(n);
136
+ for (let i = 0; i < n; i++) {
137
+ out[i] = this.#sampleAt((this.#nextOut + i) * this.#step);
138
+ }
139
+ this.#nextOut += n;
140
+ if (end) {
141
+ this.clear();
142
+ }
143
+ else {
144
+ // Drop history no future output can reach.
145
+ const keepFrom = Math.floor(this.#nextOut * this.#step - this.#halfWidth) - 1;
146
+ const drop = Math.min(this.#len, keepFrom - this.#base);
147
+ if (drop > 0) {
148
+ this.#buf.copyWithin(0, drop, this.#len);
149
+ this.#len -= drop;
150
+ this.#base += drop;
151
+ }
152
+ }
153
+ return out;
154
+ }
155
+ clear() {
156
+ this.#len = 0;
157
+ this.#base = 0;
158
+ this.#totalIn = 0;
159
+ this.#nextOut = 0;
160
+ }
161
+ }
162
+ function toInt16(x) {
163
+ const r = Math.round(x);
164
+ return r > 32767 ? 32767 : r < -32768 ? -32768 : r;
165
+ }
166
+ /** A streaming windowed-sinc resampler over interleaved samples. */
167
+ class SincStream {
168
+ #channels;
169
+ #numChannels;
170
+ /** Samples of an incomplete frame carried to the next call. */
171
+ #pending = [];
172
+ constructor(options) {
173
+ checkRates(options.inRate, options.outRate);
174
+ const numChannels = options.numChannels;
175
+ if (!Number.isInteger(numChannels) || numChannels < 1) {
176
+ throw new Error(`invalid channel count: ${numChannels}`);
177
+ }
178
+ this.#numChannels = numChannels;
179
+ this.#channels = Array.from({ length: numChannels }, () => new SincChannel(options.inRate, options.outRate, options.quality));
180
+ }
181
+ resampleChunk(chunk, last = false) {
182
+ const c = this.#numChannels;
183
+ let input = chunk;
184
+ if (this.#pending.length > 0) {
185
+ input = [...this.#pending, ...chunk];
186
+ this.#pending = [];
187
+ }
188
+ const frames = Math.floor(input.length / c);
189
+ const rest = input.length - frames * c;
190
+ if (rest > 0 && !last) {
191
+ this.#pending = Array.from({ length: rest }, (_, i) => input[frames * c + i]);
192
+ }
193
+ const outs = this.#channels.map((ch, i) => ch.process(input, i, c, frames, last));
194
+ const outFrames = outs[0]?.length ?? 0;
195
+ const isFloat = chunk instanceof Float32Array;
196
+ const out = isFloat ? new Float32Array(outFrames * c) : new Int16Array(outFrames * c);
197
+ for (let ch = 0; ch < c; ch++) {
198
+ const data = outs[ch];
199
+ for (let f = 0; f < outFrames; f++) {
200
+ const v = data[f];
201
+ out[f * c + ch] = isFloat ? v : toInt16(v);
202
+ }
203
+ }
204
+ if (last)
205
+ this.#pending = [];
206
+ return out;
207
+ }
208
+ clear() {
209
+ this.#pending = [];
210
+ for (const ch of this.#channels)
211
+ ch.clear();
212
+ }
213
+ destroy() { }
214
+ }
215
+ /**
216
+ * Create the pure-TypeScript windowed-sinc engine.
217
+ *
218
+ * Applications normally never call this: core falls back to it on its own
219
+ * when the WASM engine cannot load. It can also be installed explicitly with
220
+ * `setResamplerEngine(createSincResamplerEngine())`.
221
+ */
222
+ export function createSincResamplerEngine() {
223
+ return {
224
+ resample(audio, inRate, outRate, quality) {
225
+ if (inRate === outRate)
226
+ return audio;
227
+ const stream = new SincStream({ inRate, outRate, numChannels: 1, quality });
228
+ return stream.resampleChunk(audio, true);
229
+ },
230
+ createStream(options) {
231
+ return new SincStream(options);
232
+ },
233
+ };
234
+ }
235
+ //# sourceMappingURL=sinc_engine.js.map
@@ -0,0 +1,58 @@
1
+ /**
2
+ * SoX-based audio resampler implementation.
3
+ *
4
+ * Provides an audio resampler that uses the SoX resampler library for very
5
+ * high-quality audio sample rate conversion.
6
+ *
7
+ * When to use the SOXRAudioResampler:
8
+ * 1. For batch processing of complete audio files
9
+ * 2. When you have all the audio data available at once
10
+ *
11
+ * PORTING NOTE: libsoxr is not used. `soxr.resample()` is replaced by the
12
+ * resampler engine from `engine.ts`: `@pipedog/resampler-wasm` (rubato
13
+ * windowed sinc in WebAssembly) by default, a pure-TypeScript windowed-sinc
14
+ * fallback if that cannot load, or whatever `setResamplerEngine()` installed.
15
+ * Output lengths follow soxr's; the samples differ slightly because the
16
+ * filters differ.
17
+ */
18
+ import { BaseAudioResampler, type SoxrQuality } from "./base_audio_resampler.ts";
19
+ /**
20
+ * Stand-in for `soxr.resample()`: resample a whole mono signal.
21
+ *
22
+ * Synchronous, like soxr's: it uses the engine already loaded (or injected)
23
+ * and throws if there is none yet. `await getResamplerEngine()` first when
24
+ * calling it outside `SOXRAudioResampler.resample()`.
25
+ *
26
+ * @internal
27
+ */
28
+ export declare function soxrResample<T extends Int16Array | Float32Array>(audio: T, inRate: number, outRate: number, quality: SoxrQuality): T;
29
+ export interface SOXRAudioResamplerOptions {
30
+ /**
31
+ * SOXR quality preset. Higher quality means higher CPU cost. One of "VHQ"
32
+ * (default, very high quality), "HQ", "MQ", "LQ", or "QQ" (quick, lowest
33
+ * latency).
34
+ */
35
+ quality?: SoxrQuality;
36
+ }
37
+ /**
38
+ * Audio resampler implementation using the SoX resampler library.
39
+ *
40
+ * Configured for very high quality (VHQ) resampling by default, providing
41
+ * excellent audio quality at the cost of additional computational overhead.
42
+ */
43
+ export declare class SOXRAudioResampler extends BaseAudioResampler {
44
+ protected _quality: SoxrQuality;
45
+ constructor(options?: SOXRAudioResamplerOptions);
46
+ /**
47
+ * Resample audio data using SoX resampler library.
48
+ *
49
+ * @param audio Input audio data as raw bytes (16-bit signed integers).
50
+ * @param inRate Original sample rate in Hz.
51
+ * @param outRate Target sample rate in Hz.
52
+ * @returns Resampled audio data as raw bytes (16-bit signed integers).
53
+ */
54
+ resample(audio: Uint8Array, inRate: number, outRate: number): Promise<Uint8Array>;
55
+ }
56
+ /** View (or copy, if unaligned) 16-bit PCM bytes as samples. @internal */
57
+ export declare function bytesToInt16(audio: Uint8Array): Int16Array;
58
+ //# sourceMappingURL=soxr_resampler.d.ts.map
@@ -0,0 +1,79 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/resamplers/soxr_resampler.py
6
+ /**
7
+ * SoX-based audio resampler implementation.
8
+ *
9
+ * Provides an audio resampler that uses the SoX resampler library for very
10
+ * high-quality audio sample rate conversion.
11
+ *
12
+ * When to use the SOXRAudioResampler:
13
+ * 1. For batch processing of complete audio files
14
+ * 2. When you have all the audio data available at once
15
+ *
16
+ * PORTING NOTE: libsoxr is not used. `soxr.resample()` is replaced by the
17
+ * resampler engine from `engine.ts`: `@pipedog/resampler-wasm` (rubato
18
+ * windowed sinc in WebAssembly) by default, a pure-TypeScript windowed-sinc
19
+ * fallback if that cannot load, or whatever `setResamplerEngine()` installed.
20
+ * Output lengths follow soxr's; the samples differ slightly because the
21
+ * filters differ.
22
+ */
23
+ import { BaseAudioResampler } from "./base_audio_resampler.js";
24
+ import { getLoadedResamplerEngine, getResamplerEngine } from "./engine.js";
25
+ /**
26
+ * Stand-in for `soxr.resample()`: resample a whole mono signal.
27
+ *
28
+ * Synchronous, like soxr's: it uses the engine already loaded (or injected)
29
+ * and throws if there is none yet. `await getResamplerEngine()` first when
30
+ * calling it outside `SOXRAudioResampler.resample()`.
31
+ *
32
+ * @internal
33
+ */
34
+ export function soxrResample(audio, inRate, outRate, quality) {
35
+ const engine = getLoadedResamplerEngine();
36
+ if (!engine) {
37
+ throw new Error("no resampler engine loaded yet: `await getResamplerEngine()` (audio/resamplers/engine) first");
38
+ }
39
+ return engine.resample(audio, inRate, outRate, quality);
40
+ }
41
+ /**
42
+ * Audio resampler implementation using the SoX resampler library.
43
+ *
44
+ * Configured for very high quality (VHQ) resampling by default, providing
45
+ * excellent audio quality at the cost of additional computational overhead.
46
+ */
47
+ export class SOXRAudioResampler extends BaseAudioResampler {
48
+ _quality;
49
+ constructor(options = {}) {
50
+ super();
51
+ this._quality = options.quality ?? "VHQ";
52
+ }
53
+ /**
54
+ * Resample audio data using SoX resampler library.
55
+ *
56
+ * @param audio Input audio data as raw bytes (16-bit signed integers).
57
+ * @param inRate Original sample rate in Hz.
58
+ * @param outRate Target sample rate in Hz.
59
+ * @returns Resampled audio data as raw bytes (16-bit signed integers).
60
+ */
61
+ async resample(audio, inRate, outRate) {
62
+ if (inRate === outRate) {
63
+ return audio;
64
+ }
65
+ await getResamplerEngine();
66
+ const audioData = bytesToInt16(audio);
67
+ const resampledAudio = soxrResample(audioData, inRate, outRate, this._quality);
68
+ return new Uint8Array(resampledAudio.buffer, resampledAudio.byteOffset, resampledAudio.byteLength);
69
+ }
70
+ }
71
+ /** View (or copy, if unaligned) 16-bit PCM bytes as samples. @internal */
72
+ export function bytesToInt16(audio) {
73
+ const length = audio.length >> 1;
74
+ if (audio.byteOffset % 2 !== 0) {
75
+ return new Int16Array(audio.slice(0, length * 2).buffer);
76
+ }
77
+ return new Int16Array(audio.buffer, audio.byteOffset, length);
78
+ }
79
+ //# sourceMappingURL=soxr_resampler.js.map
@@ -0,0 +1,78 @@
1
+ import { BaseAudioResampler, type SoxrQuality } from "./base_audio_resampler.ts";
2
+ import { type ResamplerEngine, type ResamplerStream } from "./engine.ts";
3
+ /**
4
+ * Stand-in for `soxr.ResampleStream` (mono, int16): a stream of the resampler
5
+ * engine (the loaded/injected one unless `engine` is given).
6
+ *
7
+ * @internal
8
+ */
9
+ export declare class SoxrResampleStream {
10
+ protected _stream: ResamplerStream;
11
+ constructor(options: {
12
+ inRate: number;
13
+ outRate: number;
14
+ numChannels: number;
15
+ quality: SoxrQuality;
16
+ }, engine?: ResamplerEngine | null);
17
+ resampleChunk(chunk: Int16Array, last?: boolean): Int16Array;
18
+ clear(): void;
19
+ /** Free the engine's state (WASM memory). */
20
+ destroy(): void;
21
+ }
22
+ export interface SOXRStreamAudioResamplerOptions {
23
+ /**
24
+ * SOXR quality preset. Higher quality means higher CPU cost. One of "VHQ"
25
+ * (default, very high quality), "HQ", "MQ", "LQ", or "QQ" (quick, lowest
26
+ * latency).
27
+ */
28
+ quality?: SoxrQuality;
29
+ /**
30
+ * Seconds of inactivity after which the internal resampler state is
31
+ * cleared to avoid audio artefacts from stale history. Set to `null` to
32
+ * never clear (recommended for telephony providers that have irregular gaps
33
+ * between chunks). Defaults to 0.2.
34
+ */
35
+ clearAfterSecs?: number | null;
36
+ }
37
+ /**
38
+ * Audio resampler implementation using the SoX ResampleStream library.
39
+ *
40
+ * Configured for very high quality (VHQ) resampling by default, providing
41
+ * excellent audio quality at the cost of additional computational overhead.
42
+ * It keeps an internal history which avoids clicks at chunk boundaries.
43
+ *
44
+ * Notes:
45
+ * - Only supports mono audio (1 channel).
46
+ * - Input must be 16-bit signed PCM audio as raw bytes.
47
+ */
48
+ export declare class SOXRStreamAudioResampler extends BaseAudioResampler {
49
+ protected _quality: SoxrQuality;
50
+ protected _clearAfterSecs: number | null;
51
+ protected _inRate: number | null;
52
+ protected _outRate: number | null;
53
+ protected _lastResampleTime: number;
54
+ protected _soxrStream: SoxrResampleStream | null;
55
+ constructor(options?: SOXRStreamAudioResamplerOptions);
56
+ protected _initialize(inRate: number, outRate: number): void;
57
+ protected _maybeClearInternalState(): void;
58
+ protected _maybeInitializeSoxStream(inRate: number, outRate: number): SoxrResampleStream;
59
+ /**
60
+ * Resample audio data using soxr.ResampleStream resampler library.
61
+ *
62
+ * @param audio Input audio data as raw bytes (16-bit signed integers).
63
+ * @param inRate Original sample rate in Hz.
64
+ * @param outRate Target sample rate in Hz.
65
+ * @returns Resampled audio data as raw bytes (16-bit signed integers).
66
+ */
67
+ resample(audio: Uint8Array, inRate: number, outRate: number): Promise<Uint8Array>;
68
+ /**
69
+ * Emit the audio held in the filter and reset it for the next stream.
70
+ *
71
+ * @returns The remaining resampled audio as raw bytes, empty if no audio
72
+ * has been resampled yet.
73
+ */
74
+ flush(): Promise<Uint8Array>;
75
+ /** Discard the audio held in the filter and reset it for the next stream. */
76
+ reset(): Promise<void>;
77
+ }
78
+ //# sourceMappingURL=soxr_stream_resampler.d.ts.map
@@ -0,0 +1,159 @@
1
+ // Copyright (c) 2024-2026, Daily
2
+ // Copyright (c) 2026, pipedog contributors
3
+ // SPDX-License-Identifier: BSD-2-Clause
4
+ //
5
+ // Ported from pipecat: src/pipecat/audio/resamplers/soxr_stream_resampler.py
6
+ /**
7
+ * SoX-based audio resampler stream implementation.
8
+ *
9
+ * Provides an audio resampler that uses the SoX ResampleStream library for
10
+ * very high quality audio sample rate conversion.
11
+ *
12
+ * When to use the SOXRStreamAudioResampler:
13
+ * 1. For real-time processing scenarios
14
+ * 2. When dealing with very long audio signals
15
+ * 3. When processing audio in chunks or streams
16
+ * 4. When you need to reuse the same resampler configuration multiple times,
17
+ * as it saves initialization overhead
18
+ *
19
+ * PORTING NOTE: libsoxr is not used. `soxr.ResampleStream` is replaced by a
20
+ * stream from the resampler engine (`engine.ts`): `@pipedog/resampler-wasm`
21
+ * by default, a pure-TypeScript windowed-sinc fallback if that cannot load,
22
+ * or whatever `setResamplerEngine()` installed. `resample()` loads the engine
23
+ * on first use.
24
+ */
25
+ import { time } from "@pipedog/asyncio";
26
+ import { BaseAudioResampler } from "./base_audio_resampler.js";
27
+ import { getLoadedResamplerEngine, getResamplerEngine, } from "./engine.js";
28
+ import { bytesToInt16 } from "./soxr_resampler.js";
29
+ const EMPTY_AUDIO = new Int16Array(0);
30
+ /**
31
+ * Stand-in for `soxr.ResampleStream` (mono, int16): a stream of the resampler
32
+ * engine (the loaded/injected one unless `engine` is given).
33
+ *
34
+ * @internal
35
+ */
36
+ export class SoxrResampleStream {
37
+ _stream;
38
+ constructor(options, engine = getLoadedResamplerEngine()) {
39
+ if (!engine) {
40
+ throw new Error("no resampler engine loaded yet: `await getResamplerEngine()` (audio/resamplers/engine) first");
41
+ }
42
+ this._stream = engine.createStream(options);
43
+ }
44
+ resampleChunk(chunk, last = false) {
45
+ return this._stream.resampleChunk(chunk, last);
46
+ }
47
+ clear() {
48
+ this._stream.clear();
49
+ }
50
+ /** Free the engine's state (WASM memory). */
51
+ destroy() {
52
+ this._stream.destroy?.();
53
+ }
54
+ }
55
+ function int16ToBytes(samples) {
56
+ return new Uint8Array(samples.buffer, samples.byteOffset, samples.byteLength);
57
+ }
58
+ /**
59
+ * Audio resampler implementation using the SoX ResampleStream library.
60
+ *
61
+ * Configured for very high quality (VHQ) resampling by default, providing
62
+ * excellent audio quality at the cost of additional computational overhead.
63
+ * It keeps an internal history which avoids clicks at chunk boundaries.
64
+ *
65
+ * Notes:
66
+ * - Only supports mono audio (1 channel).
67
+ * - Input must be 16-bit signed PCM audio as raw bytes.
68
+ */
69
+ export class SOXRStreamAudioResampler extends BaseAudioResampler {
70
+ _quality;
71
+ _clearAfterSecs;
72
+ _inRate = null;
73
+ _outRate = null;
74
+ _lastResampleTime = 0;
75
+ _soxrStream = null;
76
+ constructor(options = {}) {
77
+ super();
78
+ this._quality = options.quality ?? "VHQ";
79
+ this._clearAfterSecs = options.clearAfterSecs === undefined ? 0.2 : options.clearAfterSecs;
80
+ }
81
+ _initialize(inRate, outRate) {
82
+ this._inRate = inRate;
83
+ this._outRate = outRate;
84
+ this._lastResampleTime = time();
85
+ this._soxrStream = new SoxrResampleStream({
86
+ inRate,
87
+ outRate,
88
+ numChannels: 1,
89
+ quality: this._quality,
90
+ });
91
+ }
92
+ _maybeClearInternalState() {
93
+ const currentTime = time();
94
+ if (this._clearAfterSecs !== null) {
95
+ if (currentTime - this._lastResampleTime > this._clearAfterSecs) {
96
+ if (this._soxrStream) {
97
+ this._soxrStream.clear();
98
+ }
99
+ }
100
+ }
101
+ this._lastResampleTime = currentTime;
102
+ }
103
+ _maybeInitializeSoxStream(inRate, outRate) {
104
+ if (this._soxrStream === null) {
105
+ this._initialize(inRate, outRate);
106
+ }
107
+ else {
108
+ this._maybeClearInternalState();
109
+ }
110
+ if (this._inRate !== inRate || this._outRate !== outRate) {
111
+ throw new Error(`SOXRStreamAudioResampler cannot be reused with different sample rates: ` +
112
+ `expected ${this._inRate}->${this._outRate}, got ${inRate}->${outRate}`);
113
+ }
114
+ return this._soxrStream;
115
+ }
116
+ /**
117
+ * Resample audio data using soxr.ResampleStream resampler library.
118
+ *
119
+ * @param audio Input audio data as raw bytes (16-bit signed integers).
120
+ * @param inRate Original sample rate in Hz.
121
+ * @param outRate Target sample rate in Hz.
122
+ * @returns Resampled audio data as raw bytes (16-bit signed integers).
123
+ */
124
+ async resample(audio, inRate, outRate) {
125
+ if (inRate === outRate) {
126
+ return audio;
127
+ }
128
+ if (this._soxrStream === null) {
129
+ await getResamplerEngine();
130
+ }
131
+ const stream = this._maybeInitializeSoxStream(inRate, outRate);
132
+ const audioData = bytesToInt16(audio);
133
+ const resampledAudio = stream.resampleChunk(audioData);
134
+ return int16ToBytes(resampledAudio);
135
+ }
136
+ /**
137
+ * Emit the audio held in the filter and reset it for the next stream.
138
+ *
139
+ * @returns The remaining resampled audio as raw bytes, empty if no audio
140
+ * has been resampled yet.
141
+ */
142
+ async flush() {
143
+ if (!this._soxrStream) {
144
+ return new Uint8Array(0);
145
+ }
146
+ const tail = this._soxrStream.resampleChunk(EMPTY_AUDIO, true);
147
+ this._soxrStream.clear();
148
+ this._lastResampleTime = time();
149
+ return int16ToBytes(tail);
150
+ }
151
+ /** Discard the audio held in the filter and reset it for the next stream. */
152
+ async reset() {
153
+ if (this._soxrStream) {
154
+ this._soxrStream.clear();
155
+ this._lastResampleTime = time();
156
+ }
157
+ }
158
+ }
159
+ //# sourceMappingURL=soxr_stream_resampler.js.map