@kuralle-syrinx/core 4.4.0 → 4.5.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 (217) hide show
  1. package/dist/audio/alaw.d.ts +3 -0
  2. package/dist/audio/alaw.d.ts.map +1 -0
  3. package/dist/audio/alaw.js +53 -0
  4. package/dist/audio/alaw.js.map +1 -0
  5. package/dist/audio/g722.d.ts +39 -0
  6. package/dist/audio/g722.d.ts.map +1 -0
  7. package/dist/audio/g722.js +286 -0
  8. package/dist/audio/g722.js.map +1 -0
  9. package/dist/audio/index.d.ts +7 -0
  10. package/dist/audio/index.d.ts.map +1 -0
  11. package/dist/audio/index.js +8 -0
  12. package/dist/audio/index.js.map +1 -0
  13. package/dist/audio/loudness.d.ts +13 -0
  14. package/dist/audio/loudness.d.ts.map +1 -0
  15. package/dist/audio/loudness.js +65 -0
  16. package/dist/audio/loudness.js.map +1 -0
  17. package/dist/audio/mulaw.d.ts +3 -0
  18. package/dist/audio/mulaw.d.ts.map +1 -0
  19. package/dist/audio/mulaw.js +39 -0
  20. package/dist/audio/mulaw.js.map +1 -0
  21. package/dist/audio/pcm.d.ts +5 -0
  22. package/dist/audio/pcm.d.ts.map +1 -0
  23. package/dist/audio/pcm.js +40 -0
  24. package/dist/audio/pcm.js.map +1 -0
  25. package/dist/audio/resample.d.ts +12 -0
  26. package/dist/audio/resample.d.ts.map +1 -0
  27. package/dist/audio/resample.js +157 -0
  28. package/dist/audio/resample.js.map +1 -0
  29. package/dist/audio-envelope.d.ts +23 -0
  30. package/dist/audio-envelope.d.ts.map +1 -0
  31. package/dist/audio-envelope.js +114 -0
  32. package/dist/audio-envelope.js.map +1 -0
  33. package/dist/confidence-to-wait.d.ts +12 -0
  34. package/dist/confidence-to-wait.d.ts.map +1 -0
  35. package/dist/confidence-to-wait.js +18 -0
  36. package/dist/confidence-to-wait.js.map +1 -0
  37. package/dist/conversation-event.d.ts +19 -0
  38. package/dist/conversation-event.d.ts.map +1 -0
  39. package/dist/conversation-event.js +44 -0
  40. package/dist/conversation-event.js.map +1 -0
  41. package/dist/error-handler.d.ts +35 -0
  42. package/dist/error-handler.d.ts.map +1 -0
  43. package/dist/error-handler.js +136 -0
  44. package/dist/error-handler.js.map +1 -0
  45. package/dist/idle-timeout.d.ts +69 -0
  46. package/dist/idle-timeout.d.ts.map +1 -0
  47. package/dist/idle-timeout.js +149 -0
  48. package/dist/idle-timeout.js.map +1 -0
  49. package/dist/incremental-unit.d.ts +17 -0
  50. package/dist/incremental-unit.d.ts.map +1 -0
  51. package/dist/incremental-unit.js +5 -0
  52. package/dist/incremental-unit.js.map +1 -0
  53. package/dist/index.d.ts +47 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +61 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/init-chain.d.ts +35 -0
  58. package/dist/init-chain.d.ts.map +1 -0
  59. package/dist/init-chain.js +102 -0
  60. package/dist/init-chain.js.map +1 -0
  61. package/dist/init-stage-order.d.ts +5 -0
  62. package/dist/init-stage-order.d.ts.map +1 -0
  63. package/dist/init-stage-order.js +74 -0
  64. package/dist/init-stage-order.js.map +1 -0
  65. package/dist/interaction-coordinator.d.ts +45 -0
  66. package/dist/interaction-coordinator.d.ts.map +1 -0
  67. package/dist/interaction-coordinator.js +197 -0
  68. package/dist/interaction-coordinator.js.map +1 -0
  69. package/dist/interaction-policy.d.ts +103 -0
  70. package/dist/interaction-policy.d.ts.map +1 -0
  71. package/dist/interaction-policy.js +6 -0
  72. package/dist/interaction-policy.js.map +1 -0
  73. package/dist/iu-ledger.d.ts +39 -0
  74. package/dist/iu-ledger.d.ts.map +1 -0
  75. package/dist/iu-ledger.js +90 -0
  76. package/dist/iu-ledger.js.map +1 -0
  77. package/dist/latency-filler-fixtures.d.ts +7 -0
  78. package/dist/latency-filler-fixtures.d.ts.map +1 -0
  79. package/dist/latency-filler-fixtures.js +10 -0
  80. package/dist/latency-filler-fixtures.js.map +1 -0
  81. package/dist/latency-filler.d.ts +29 -0
  82. package/dist/latency-filler.d.ts.map +1 -0
  83. package/dist/latency-filler.js +102 -0
  84. package/dist/latency-filler.js.map +1 -0
  85. package/dist/mode-switcher.d.ts +24 -0
  86. package/dist/mode-switcher.d.ts.map +1 -0
  87. package/dist/mode-switcher.js +83 -0
  88. package/dist/mode-switcher.js.map +1 -0
  89. package/dist/observability-observer.d.ts +36 -0
  90. package/dist/observability-observer.d.ts.map +1 -0
  91. package/dist/observability-observer.js +141 -0
  92. package/dist/observability-observer.js.map +1 -0
  93. package/dist/observability.d.ts +68 -0
  94. package/dist/observability.d.ts.map +1 -0
  95. package/dist/observability.js +70 -0
  96. package/dist/observability.js.map +1 -0
  97. package/dist/packet-factories.d.ts +58 -0
  98. package/dist/packet-factories.d.ts.map +1 -0
  99. package/dist/packet-factories.js +181 -0
  100. package/dist/packet-factories.js.map +1 -0
  101. package/dist/packets.d.ts +532 -0
  102. package/dist/packets.d.ts.map +1 -0
  103. package/dist/packets.js +51 -0
  104. package/dist/packets.js.map +1 -0
  105. package/dist/pipeline-bus.d.ts +92 -0
  106. package/dist/pipeline-bus.d.ts.map +1 -0
  107. package/dist/pipeline-bus.js +294 -0
  108. package/dist/pipeline-bus.js.map +1 -0
  109. package/dist/plugin-contract.d.ts +73 -0
  110. package/dist/plugin-contract.d.ts.map +1 -0
  111. package/dist/plugin-contract.js +30 -0
  112. package/dist/plugin-contract.js.map +1 -0
  113. package/dist/policies/defer.d.ts +11 -0
  114. package/dist/policies/defer.d.ts.map +1 -0
  115. package/dist/policies/defer.js +13 -0
  116. package/dist/policies/defer.js.map +1 -0
  117. package/dist/policies/rule-based.d.ts +35 -0
  118. package/dist/policies/rule-based.d.ts.map +1 -0
  119. package/dist/policies/rule-based.js +130 -0
  120. package/dist/policies/rule-based.js.map +1 -0
  121. package/dist/pricing.d.ts +34 -0
  122. package/dist/pricing.d.ts.map +1 -0
  123. package/dist/pricing.js +108 -0
  124. package/dist/pricing.js.map +1 -0
  125. package/dist/primary-speaker-fixtures.d.ts +12 -0
  126. package/dist/primary-speaker-fixtures.d.ts.map +1 -0
  127. package/dist/primary-speaker-fixtures.js +37 -0
  128. package/dist/primary-speaker-fixtures.js.map +1 -0
  129. package/dist/primary-speaker-gate.d.ts +42 -0
  130. package/dist/primary-speaker-gate.d.ts.map +1 -0
  131. package/dist/primary-speaker-gate.js +178 -0
  132. package/dist/primary-speaker-gate.js.map +1 -0
  133. package/dist/provider-fallback.d.ts +28 -0
  134. package/dist/provider-fallback.d.ts.map +1 -0
  135. package/dist/provider-fallback.js +72 -0
  136. package/dist/provider-fallback.js.map +1 -0
  137. package/dist/reasoner-hedge.d.ts +21 -0
  138. package/dist/reasoner-hedge.d.ts.map +1 -0
  139. package/dist/reasoner-hedge.js +170 -0
  140. package/dist/reasoner-hedge.js.map +1 -0
  141. package/dist/reasoner-route.d.ts +24 -0
  142. package/dist/reasoner-route.d.ts.map +1 -0
  143. package/dist/reasoner-route.js +87 -0
  144. package/dist/reasoner-route.js.map +1 -0
  145. package/dist/reasoner-session-store.d.ts +18 -0
  146. package/dist/reasoner-session-store.d.ts.map +1 -0
  147. package/dist/reasoner-session-store.js +21 -0
  148. package/dist/reasoner-session-store.js.map +1 -0
  149. package/dist/reasoner.d.ts +97 -0
  150. package/dist/reasoner.d.ts.map +1 -0
  151. package/dist/reasoner.js +9 -0
  152. package/dist/reasoner.js.map +1 -0
  153. package/dist/retry.d.ts +31 -0
  154. package/dist/retry.d.ts.map +1 -0
  155. package/dist/retry.js +83 -0
  156. package/dist/retry.js.map +1 -0
  157. package/dist/scheduler.d.ts +11 -0
  158. package/dist/scheduler.d.ts.map +1 -0
  159. package/dist/scheduler.js +20 -0
  160. package/dist/scheduler.js.map +1 -0
  161. package/dist/spend-cap.d.ts +27 -0
  162. package/dist/spend-cap.d.ts.map +1 -0
  163. package/dist/spend-cap.js +38 -0
  164. package/dist/spend-cap.js.map +1 -0
  165. package/dist/tts-playout-clock.d.ts +43 -0
  166. package/dist/tts-playout-clock.d.ts.map +1 -0
  167. package/dist/tts-playout-clock.js +125 -0
  168. package/dist/tts-playout-clock.js.map +1 -0
  169. package/dist/turn-arbiter.d.ts +41 -0
  170. package/dist/turn-arbiter.d.ts.map +1 -0
  171. package/dist/turn-arbiter.js +259 -0
  172. package/dist/turn-arbiter.js.map +1 -0
  173. package/dist/voice-agent-session-util.d.ts +60 -0
  174. package/dist/voice-agent-session-util.d.ts.map +1 -0
  175. package/dist/voice-agent-session-util.js +204 -0
  176. package/dist/voice-agent-session-util.js.map +1 -0
  177. package/dist/voice-agent-session.d.ts +435 -0
  178. package/dist/voice-agent-session.d.ts.map +1 -0
  179. package/dist/voice-agent-session.js +1597 -0
  180. package/dist/voice-agent-session.js.map +1 -0
  181. package/dist/voice-text.d.ts +46 -0
  182. package/dist/voice-text.d.ts.map +1 -0
  183. package/dist/voice-text.js +209 -0
  184. package/dist/voice-text.js.map +1 -0
  185. package/package.json +19 -6
  186. package/src/audio/alaw.test.ts +87 -0
  187. package/src/audio/audio.test.ts +285 -0
  188. package/src/audio/g722.test.ts +149 -0
  189. package/src/audio/loudness.test.ts +58 -0
  190. package/src/audio-envelope.test.ts +167 -0
  191. package/src/confidence-to-wait.test.ts +21 -0
  192. package/src/error-handler.test.ts +56 -0
  193. package/src/hedge-throwing-backend.test.ts +46 -0
  194. package/src/interaction-coordinator.test.ts +529 -0
  195. package/src/iu-ledger.test.ts +276 -0
  196. package/src/latency-filler.test.ts +62 -0
  197. package/src/observability-observer.test.ts +248 -0
  198. package/src/observability.test.ts +94 -0
  199. package/src/packet-factories.test.ts +126 -0
  200. package/src/pipeline-bus.g10.test.ts +145 -0
  201. package/src/pipeline-bus.test.ts +211 -0
  202. package/src/policies/defer.test.ts +86 -0
  203. package/src/policies/rule-based.test.ts +334 -0
  204. package/src/pricing.test.ts +226 -0
  205. package/src/primary-speaker-gate.test.ts +150 -0
  206. package/src/provider-fallback.test.ts +87 -0
  207. package/src/reasoner-hedge.test.ts +361 -0
  208. package/src/reasoner-route.test.ts +248 -0
  209. package/src/reasoner.test.ts +69 -0
  210. package/src/retry.test.ts +83 -0
  211. package/src/route-throwing-spec.test.ts +44 -0
  212. package/src/spend-cap.test.ts +114 -0
  213. package/src/tts-playout-clock.test.ts +125 -0
  214. package/src/turn-arbiter.characterization.test.ts +477 -0
  215. package/src/turn-arbiter.test.ts +762 -0
  216. package/src/voice-agent-session.test.ts +4165 -0
  217. package/src/voice-text.test.ts +156 -0
@@ -0,0 +1,3 @@
1
+ export declare function decodeALawToPcm16(input: Uint8Array): Int16Array;
2
+ export declare function encodePcm16ToALaw(input: Int16Array): Uint8Array;
3
+ //# sourceMappingURL=alaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alaw.d.ts","sourceRoot":"","sources":["../../src/audio/alaw.ts"],"names":[],"mappings":"AASA,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAiB/D;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAM/D"}
@@ -0,0 +1,53 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // ITU-T G.711 A-law (PCMA). Pure TypedArray — Workers-safe (no Buffer/node:).
4
+ // Unit-verified against known A-law encode/decode values + round-trip fidelity.
5
+ // Unverified against a live carrier trunk negotiation.
6
+ const ALAW_CLIP = 32635;
7
+ const ALAW_BIAS = 0x55;
8
+ export function decodeALawToPcm16(input) {
9
+ const output = new Int16Array(input.byteLength);
10
+ for (let i = 0; i < input.byteLength; i += 1) {
11
+ const alaw = input[i] ^ ALAW_BIAS;
12
+ // A-law sign bit is inverted vs μ-law: 0x80 means positive.
13
+ const positive = (alaw & 0x80) !== 0;
14
+ const exponent = (alaw >> 4) & 0x07;
15
+ const mantissa = alaw & 0x0f;
16
+ let sample;
17
+ if (exponent === 0) {
18
+ sample = (mantissa << 4) + 8;
19
+ }
20
+ else {
21
+ sample = ((mantissa << 4) + 0x108) << (exponent - 1);
22
+ }
23
+ output[i] = positive ? sample : -sample;
24
+ }
25
+ return output;
26
+ }
27
+ export function encodePcm16ToALaw(input) {
28
+ const output = new Uint8Array(input.length);
29
+ for (let i = 0; i < input.length; i += 1) {
30
+ output[i] = encodeSample(input[i]);
31
+ }
32
+ return output;
33
+ }
34
+ function encodeSample(sample) {
35
+ // A-law: sign bit 0x80 = positive (opposite of μ-law).
36
+ let sign = 0x80;
37
+ let magnitude = sample;
38
+ if (magnitude < 0) {
39
+ sign = 0;
40
+ magnitude = -magnitude;
41
+ }
42
+ if (magnitude > ALAW_CLIP)
43
+ magnitude = ALAW_CLIP;
44
+ let exponent = 7;
45
+ for (let mask = 0x4000; (magnitude & mask) === 0 && exponent > 0; mask >>= 1) {
46
+ exponent -= 1;
47
+ }
48
+ const mantissa = exponent === 0
49
+ ? (magnitude >> 4) & 0x0f
50
+ : (magnitude >> (exponent + 3)) & 0x0f;
51
+ return (sign | (exponent << 4) | mantissa) ^ ALAW_BIAS;
52
+ }
53
+ //# sourceMappingURL=alaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alaw.js","sourceRoot":"","sources":["../../src/audio/alaw.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,8EAA8E;AAC9E,gFAAgF;AAChF,uDAAuD;AAEvD,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,SAAS,GAAG,IAAI,CAAC;AAEvB,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,GAAG,SAAS,CAAC;QACnC,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;QAC7B,IAAI,MAAc,CAAC;QACnB,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC1C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,uDAAuD;IACvD,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,IAAI,SAAS,GAAG,MAAM,CAAC;IACvB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,GAAG,CAAC,CAAC;QACT,SAAS,GAAG,CAAC,SAAS,CAAC;IACzB,CAAC;IACD,IAAI,SAAS,GAAG,SAAS;QAAE,SAAS,GAAG,SAAS,CAAC;IAEjD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7E,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,QAAQ,GACZ,QAAQ,KAAK,CAAC;QACZ,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI;QACzB,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3C,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,SAAS,CAAC;AACzD,CAAC"}
@@ -0,0 +1,39 @@
1
+ /** 16 kHz wideband PCM sample rate for G.722. */
2
+ export declare const G722_SAMPLE_RATE_HZ = 16000;
3
+ /** 64 kbit/s = 1 byte per pair of 16 kHz samples. */
4
+ export declare const G722_BITRATE = 64000;
5
+ interface BandState {
6
+ nb: number;
7
+ det: number;
8
+ s: number;
9
+ sz: number;
10
+ r: number;
11
+ p: [number, number];
12
+ a: [number, number];
13
+ b: [number, number, number, number, number, number];
14
+ d: [number, number, number, number, number, number, number];
15
+ }
16
+ export interface G722EncoderState {
17
+ readonly _kind: "g722-encoder";
18
+ ptr: number;
19
+ x: Int16Array;
20
+ y: Int16Array;
21
+ band: [BandState, BandState];
22
+ /** leftover sample when input length is odd */
23
+ pending: number | null;
24
+ }
25
+ export interface G722DecoderState {
26
+ readonly _kind: "g722-decoder";
27
+ ptr: number;
28
+ x: Int16Array;
29
+ y: Int16Array;
30
+ band: [BandState, BandState];
31
+ }
32
+ export declare function createG722EncoderState(): G722EncoderState;
33
+ export declare function createG722DecoderState(): G722DecoderState;
34
+ /** Encode 16 kHz PCM16 → G.722 64 kbit/s bytes. Mutates `state`. Odd trailing sample is held for next call. */
35
+ export declare function encodeG722(state: G722EncoderState, pcm16: Int16Array): Uint8Array;
36
+ /** Decode G.722 64 kbit/s bytes → 16 kHz PCM16. Mutates `state`. */
37
+ export declare function decodeG722(state: G722DecoderState, g722: Uint8Array): Int16Array;
38
+ export {};
39
+ //# sourceMappingURL=g722.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"g722.d.ts","sourceRoot":"","sources":["../../src/audio/g722.ts"],"names":[],"mappings":"AAUA,iDAAiD;AACjD,eAAO,MAAM,mBAAmB,QAAS,CAAC;AAE1C,qDAAqD;AACrD,eAAO,MAAM,YAAY,QAAS,CAAC;AAmEnC,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACpD,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7D;AAqED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,UAAU,CAAC;IACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAC7B,+CAA+C;IAC/C,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,UAAU,CAAC;IACd,CAAC,EAAE,UAAU,CAAC;IACd,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;CAC9B;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CASzD;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAQzD;AAED,+GAA+G;AAC/G,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAuEjF;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAsDhF"}
@@ -0,0 +1,286 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // ITU-T G.722 64 kbit/s sub-band ADPCM (16 kHz PCM16 ↔ G.722).
4
+ // Pure TypedArray — Workers-safe (no Buffer / node: / process).
5
+ //
6
+ // HONESTY: spec-implemented (ITU-T G.722 algorithm tables + QMF + dual-band
7
+ // ADPCM), round-trip-tested on speech-like signals. NOT ITU-vector-certified
8
+ // (authoritative ITU G.722 test vectors were not embedded). Unverified against
9
+ // a live carrier trunk negotiation.
10
+ /** 16 kHz wideband PCM sample rate for G.722. */
11
+ export const G722_SAMPLE_RATE_HZ = 16_000;
12
+ /** 64 kbit/s = 1 byte per pair of 16 kHz samples. */
13
+ export const G722_BITRATE = 64_000;
14
+ // ── ITU-T G.722 tables ──────────────────────────────────────────────────────
15
+ const QMF_FWD = Object.freeze([
16
+ 3, -11, 12, 32, -210, 951, 3876, -805, 362, -156, 53, -11,
17
+ ]);
18
+ const QMF_REV = Object.freeze([
19
+ -11, 53, -156, 362, -805, 3876, 951, -210, 32, 12, -11, 3,
20
+ ]);
21
+ const QM2 = Object.freeze([-7408, -1616, 7408, 1616]);
22
+ const QM4 = Object.freeze([
23
+ 0, -20456, -12896, -8968, -6288, -4240, -2584, -1200, 20456, 12896, 8968, 6288, 4240, 2584, 1200, 0,
24
+ ]);
25
+ const QM6 = Object.freeze([
26
+ -136, -136, -136, -136, -24808, -21904, -19008, -16704, -14984, -13512, -12280, -11192, -10232, -9360, -8576, -7856,
27
+ -7192, -6576, -6000, -5456, -4944, -4464, -4008, -3576, -3168, -2776, -2400, -2032, -1688, -1360, -1040, -728,
28
+ 24808, 21904, 19008, 16704, 14984, 13512, 12280, 11192, 10232, 9360, 8576, 7856, 7192, 6576, 6000, 5456,
29
+ 4944, 4464, 4008, 3576, 3168, 2776, 2400, 2032, 1688, 1360, 1040, 728, 432, 136, -432, -136,
30
+ ]);
31
+ const Q6 = Object.freeze([
32
+ 0, 35, 72, 110, 150, 190, 233, 276, 323, 370, 422, 473, 530, 587, 650, 714, 786, 858, 940, 1023, 1121, 1219, 1339, 1458,
33
+ 1612, 1765, 1980, 2195, 2557, 2919, 0, 0,
34
+ ]);
35
+ const ILB = Object.freeze([
36
+ 2048, 2093, 2139, 2186, 2233, 2282, 2332, 2383, 2435, 2489, 2543, 2599, 2656, 2714, 2774, 2834, 2896, 2960, 3025, 3091,
37
+ 3158, 3228, 3298, 3371, 3444, 3520, 3597, 3676, 3756, 3838, 3922, 4008,
38
+ ]);
39
+ const ILN = Object.freeze([0, 63, 62, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 0]);
40
+ const ILP = Object.freeze([0, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 0]);
41
+ const IHN = Object.freeze([0, 1, 0]);
42
+ const IHP = Object.freeze([0, 3, 2]);
43
+ const WL = Object.freeze([-60, -30, 58, 172, 334, 538, 1198, 3042]);
44
+ const RL42 = Object.freeze([0, 7, 6, 5, 4, 3, 2, 1, 7, 6, 5, 4, 3, 2, 1, 0]);
45
+ const WH = Object.freeze([0, -214, 798]);
46
+ const RH2 = Object.freeze([2, 1, 2, 1]);
47
+ // ── helpers ─────────────────────────────────────────────────────────────────
48
+ function saturate16(amp) {
49
+ if (amp > 32767)
50
+ return 32767;
51
+ if (amp < -32768)
52
+ return -32768;
53
+ return amp | 0;
54
+ }
55
+ function saturate15(amp) {
56
+ if (amp > 16383)
57
+ return 16383;
58
+ if (amp < -16384)
59
+ return -16384;
60
+ return amp | 0;
61
+ }
62
+ function satAdd16(a, b) {
63
+ return saturate16(a + b);
64
+ }
65
+ function satSub16(a, b) {
66
+ return saturate16(a - b);
67
+ }
68
+ function circularDot(hist, coeffs, n, pos) {
69
+ let z = 0;
70
+ for (let i = 0; i < n - pos; i += 1)
71
+ z += hist[pos + i] * coeffs[i];
72
+ for (let i = 0; i < pos; i += 1)
73
+ z += hist[i] * coeffs[n - pos + i];
74
+ return z;
75
+ }
76
+ function createBand(det) {
77
+ return {
78
+ nb: 0,
79
+ det,
80
+ s: 0,
81
+ sz: 0,
82
+ r: 0,
83
+ p: [0, 0],
84
+ a: [0, 0],
85
+ b: [0, 0, 0, 0, 0, 0],
86
+ d: [0, 0, 0, 0, 0, 0, 0],
87
+ };
88
+ }
89
+ function block4(band, dx) {
90
+ const r = satAdd16(band.s, dx);
91
+ const p = satAdd16(band.sz, dx);
92
+ // UPPOL2
93
+ let wd1 = saturate16(band.a[0] << 2);
94
+ let wd32 = (p ^ band.p[0]) & 0x8000 ? wd1 : -wd1;
95
+ if (wd32 > 32767)
96
+ wd32 = 32767;
97
+ let wd3 = (((p ^ band.p[1]) & 0x8000 ? -128 : 128) +
98
+ (wd32 >> 7) +
99
+ ((band.a[1] * 32512) >> 15)) |
100
+ 0;
101
+ if (Math.abs(wd3) > 12288)
102
+ wd3 = wd3 < 0 ? -12288 : 12288;
103
+ const ap1 = wd3;
104
+ // UPPOL1
105
+ wd1 = (p ^ band.p[0]) & 0x8000 ? -192 : 192;
106
+ let wd2 = ((band.a[0] * 32640) >> 15) | 0;
107
+ let ap0 = satAdd16(wd1, wd2);
108
+ wd3 = satSub16(15360, ap1);
109
+ if (Math.abs(ap0) > wd3)
110
+ ap0 = ap0 < 0 ? -wd3 : wd3;
111
+ // FILTEP
112
+ wd1 = satAdd16(r, r);
113
+ wd1 = ((ap0 * wd1) >> 15) | 0;
114
+ wd2 = satAdd16(band.r, band.r);
115
+ wd2 = ((ap1 * wd2) >> 15) | 0;
116
+ const sp = satAdd16(wd1, wd2);
117
+ band.r = r;
118
+ band.a[1] = ap1;
119
+ band.a[0] = ap0;
120
+ band.p[1] = band.p[0];
121
+ band.p[0] = p;
122
+ // UPZERO / DELAYA / FILTEZ
123
+ wd1 = dx === 0 ? 0 : 128;
124
+ band.d[0] = dx;
125
+ let sz = 0;
126
+ for (let i = 5; i >= 0; i -= 1) {
127
+ wd2 = (band.d[i + 1] ^ dx) & 0x8000 ? -wd1 : wd1;
128
+ wd3 = ((band.b[i] * 32640) >> 15) | 0;
129
+ band.b[i] = satAdd16(wd2, wd3);
130
+ wd3 = satAdd16(band.d[i], band.d[i]);
131
+ sz += (band.b[i] * wd3) >> 15;
132
+ band.d[i + 1] = band.d[i];
133
+ }
134
+ band.sz = saturate16(sz);
135
+ band.s = satAdd16(sp, band.sz);
136
+ }
137
+ export function createG722EncoderState() {
138
+ return {
139
+ _kind: "g722-encoder",
140
+ ptr: 0,
141
+ x: new Int16Array(12),
142
+ y: new Int16Array(12),
143
+ band: [createBand(32), createBand(8)],
144
+ pending: null,
145
+ };
146
+ }
147
+ export function createG722DecoderState() {
148
+ return {
149
+ _kind: "g722-decoder",
150
+ ptr: 0,
151
+ x: new Int16Array(12),
152
+ y: new Int16Array(12),
153
+ band: [createBand(32), createBand(8)],
154
+ };
155
+ }
156
+ /** Encode 16 kHz PCM16 → G.722 64 kbit/s bytes. Mutates `state`. Odd trailing sample is held for next call. */
157
+ export function encodeG722(state, pcm16) {
158
+ let offset = 0;
159
+ let samples = pcm16;
160
+ if (state.pending !== null) {
161
+ const merged = new Int16Array(pcm16.length + 1);
162
+ merged[0] = state.pending;
163
+ merged.set(pcm16, 1);
164
+ samples = merged;
165
+ state.pending = null;
166
+ }
167
+ if (samples.length % 2 !== 0) {
168
+ state.pending = samples[samples.length - 1];
169
+ samples = samples.subarray(0, samples.length - 1);
170
+ }
171
+ const out = new Uint8Array(samples.length >> 1);
172
+ let outIdx = 0;
173
+ while (offset < samples.length) {
174
+ state.x[state.ptr] = samples[offset++];
175
+ state.y[state.ptr] = samples[offset++];
176
+ state.ptr += 1;
177
+ if (state.ptr >= 12)
178
+ state.ptr = 0;
179
+ const sumodd = circularDot(state.x, QMF_FWD, 12, state.ptr);
180
+ const sumeven = circularDot(state.y, QMF_REV, 12, state.ptr);
181
+ const xlow = ((sumeven + sumodd) >> 14) | 0;
182
+ const xhigh = ((sumeven - sumodd) >> 14) | 0;
183
+ // Low band
184
+ const el = satSub16(xlow, state.band[0].s);
185
+ let wd = el >= 0 ? el : ~el;
186
+ let i = 1;
187
+ for (; i < 30; i += 1) {
188
+ const wd1 = (Q6[i] * state.band[0].det) >> 12;
189
+ if (wd < wd1)
190
+ break;
191
+ }
192
+ const ilow = el < 0 ? ILN[i] : ILP[i];
193
+ const ril = ilow >> 2;
194
+ let dlow = ((state.band[0].det * QM4[ril]) >> 15) | 0;
195
+ const il4 = RL42[ril];
196
+ wd = ((state.band[0].nb * 127) >> 7) + WL[il4];
197
+ if (wd < 0)
198
+ wd = 0;
199
+ else if (wd > 18432)
200
+ wd = 18432;
201
+ state.band[0].nb = wd;
202
+ let wd1 = (state.band[0].nb >> 6) & 31;
203
+ let wd2 = 8 - (state.band[0].nb >> 11);
204
+ let wd3 = wd2 < 0 ? ILB[wd1] << -wd2 : ILB[wd1] >> wd2;
205
+ state.band[0].det = (wd3 << 2) | 0;
206
+ block4(state.band[0], dlow);
207
+ // High band
208
+ const eh = satSub16(xhigh, state.band[1].s);
209
+ wd = eh >= 0 ? eh : ~eh;
210
+ wd1 = (564 * state.band[1].det) >> 12;
211
+ const mih = wd >= wd1 ? 2 : 1;
212
+ const ihigh = eh < 0 ? IHN[mih] : IHP[mih];
213
+ const dhigh = ((state.band[1].det * QM2[ihigh]) >> 15) | 0;
214
+ const ih2 = RH2[ihigh];
215
+ wd = ((state.band[1].nb * 127) >> 7) + WH[ih2];
216
+ if (wd < 0)
217
+ wd = 0;
218
+ else if (wd > 22528)
219
+ wd = 22528;
220
+ state.band[1].nb = wd;
221
+ wd1 = (state.band[1].nb >> 6) & 31;
222
+ wd2 = 10 - (state.band[1].nb >> 11);
223
+ wd3 = wd2 < 0 ? ILB[wd1] << -wd2 : ILB[wd1] >> wd2;
224
+ state.band[1].det = (wd3 << 2) | 0;
225
+ block4(state.band[1], dhigh);
226
+ out[outIdx++] = ((ihigh << 6) | ilow) & 0xff;
227
+ }
228
+ return outIdx === out.length ? out : out.subarray(0, outIdx);
229
+ }
230
+ /** Decode G.722 64 kbit/s bytes → 16 kHz PCM16. Mutates `state`. */
231
+ export function decodeG722(state, g722) {
232
+ const out = new Int16Array(g722.byteLength * 2);
233
+ let outIdx = 0;
234
+ for (let j = 0; j < g722.byteLength; j += 1) {
235
+ const code = g722[j];
236
+ let wd1 = code & 0x3f;
237
+ const ihigh = (code >> 6) & 0x03;
238
+ let wd2 = QM6[wd1];
239
+ wd1 >>= 2;
240
+ // Low band INVQBL / RECONS / LIMIT
241
+ wd2 = ((state.band[0].det * wd2) >> 15) | 0;
242
+ const rlow = saturate15(state.band[0].s + wd2);
243
+ // Low band INVQAL + LOGSCL + SCALEL
244
+ wd2 = QM4[wd1];
245
+ const dlow = ((state.band[0].det * wd2) >> 15) | 0;
246
+ wd2 = RL42[wd1];
247
+ let nb = ((state.band[0].nb * 127) >> 7) + WL[wd2];
248
+ if (nb < 0)
249
+ nb = 0;
250
+ else if (nb > 18432)
251
+ nb = 18432;
252
+ state.band[0].nb = nb;
253
+ let s1 = (state.band[0].nb >> 6) & 31;
254
+ let s2 = 8 - (state.band[0].nb >> 11);
255
+ let s3 = s2 < 0 ? ILB[s1] << -s2 : ILB[s1] >> s2;
256
+ state.band[0].det = (s3 << 2) | 0;
257
+ block4(state.band[0], dlow);
258
+ // High band
259
+ wd2 = QM2[ihigh];
260
+ const dhigh = ((state.band[1].det * wd2) >> 15) | 0;
261
+ const rhigh = saturate15(dhigh + state.band[1].s);
262
+ wd2 = RH2[ihigh];
263
+ nb = ((state.band[1].nb * 127) >> 7) + WH[wd2];
264
+ if (nb < 0)
265
+ nb = 0;
266
+ else if (nb > 22528)
267
+ nb = 22528;
268
+ state.band[1].nb = nb;
269
+ s1 = (state.band[1].nb >> 6) & 31;
270
+ s2 = 10 - (state.band[1].nb >> 11);
271
+ s3 = s2 < 0 ? ILB[s1] << -s2 : ILB[s1] >> s2;
272
+ state.band[1].det = (s3 << 2) | 0;
273
+ block4(state.band[1], dhigh);
274
+ // QMF synthesis
275
+ state.x[state.ptr] = (rlow + rhigh) | 0;
276
+ state.y[state.ptr] = (rlow - rhigh) | 0;
277
+ state.ptr += 1;
278
+ if (state.ptr >= 12)
279
+ state.ptr = 0;
280
+ // QMF introduces ~22-sample group delay; polarity follows the ITU analysis/synthesis pair.
281
+ out[outIdx++] = (circularDot(state.y, QMF_REV, 12, state.ptr) >> 11) | 0;
282
+ out[outIdx++] = (circularDot(state.x, QMF_FWD, 12, state.ptr) >> 11) | 0;
283
+ }
284
+ return outIdx === out.length ? out : out.subarray(0, outIdx);
285
+ }
286
+ //# sourceMappingURL=g722.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"g722.js","sourceRoot":"","sources":["../../src/audio/g722.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export { pcm16BytesToSamples, pcm16SamplesToBytes, bigEndianPcm16BytesToSamples, pcm16SamplesToBigEndianBytes } from "./pcm.js";
2
+ export { decodeMuLawToPcm16, encodePcm16ToMuLaw } from "./mulaw.js";
3
+ export { decodeALawToPcm16, encodePcm16ToALaw } from "./alaw.js";
4
+ export { createG722EncoderState, createG722DecoderState, encodeG722, decodeG722, G722_SAMPLE_RATE_HZ, G722_BITRATE, type G722EncoderState, type G722DecoderState, } from "./g722.js";
5
+ export { resamplePcm16, resamplePcm16Streaming, StreamingPcm16Resampler } from "./resample.js";
6
+ export { createLoudnessState, normalizeLoudness, type LoudnessConfig, type LoudnessState } from "./loudness.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAChI,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GACtB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ // SPDX-License-Identifier: MIT
2
+ export { pcm16BytesToSamples, pcm16SamplesToBytes, bigEndianPcm16BytesToSamples, pcm16SamplesToBigEndianBytes } from "./pcm.js";
3
+ export { decodeMuLawToPcm16, encodePcm16ToMuLaw } from "./mulaw.js";
4
+ export { decodeALawToPcm16, encodePcm16ToALaw } from "./alaw.js";
5
+ export { createG722EncoderState, createG722DecoderState, encodeG722, decodeG722, G722_SAMPLE_RATE_HZ, G722_BITRATE, } from "./g722.js";
6
+ export { resamplePcm16, resamplePcm16Streaming, StreamingPcm16Resampler } from "./resample.js";
7
+ export { createLoudnessState, normalizeLoudness } from "./loudness.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/audio/index.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AAChI,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,UAAU,EACV,UAAU,EACV,mBAAmB,EACnB,YAAY,GAGb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAA2C,MAAM,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface LoudnessConfig {
2
+ readonly targetRms: number;
3
+ readonly maxGainStep?: number;
4
+ readonly rmsSmoothing?: number;
5
+ readonly ceiling?: number;
6
+ }
7
+ export interface LoudnessState {
8
+ gain: number;
9
+ runningRms: number;
10
+ }
11
+ export declare function createLoudnessState(): LoudnessState;
12
+ export declare function normalizeLoudness(pcm: Int16Array, state: LoudnessState, cfg: LoudnessConfig): Int16Array;
13
+ //# sourceMappingURL=loudness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loudness.d.ts","sourceRoot":"","sources":["../../src/audio/loudness.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,cAAc,GAClB,UAAU,CAwBZ"}
@@ -0,0 +1,65 @@
1
+ // SPDX-License-Identifier: MIT
2
+ const INT16_MAX = 32767;
3
+ const DEFAULT_MAX_GAIN_STEP = 0.5;
4
+ const DEFAULT_RMS_SMOOTHING = 0.25;
5
+ const DEFAULT_CEILING = 30000;
6
+ export function createLoudnessState() {
7
+ return { gain: 1, runningRms: 0 };
8
+ }
9
+ export function normalizeLoudness(pcm, state, cfg) {
10
+ const targetRms = positiveBounded(cfg.targetRms, "targetRms", INT16_MAX);
11
+ const maxGainStep = positiveFinite(cfg.maxGainStep ?? DEFAULT_MAX_GAIN_STEP, "maxGainStep");
12
+ const rmsSmoothing = bounded(cfg.rmsSmoothing ?? DEFAULT_RMS_SMOOTHING, "rmsSmoothing", 0, 1);
13
+ const ceiling = positiveBounded(cfg.ceiling ?? DEFAULT_CEILING, "ceiling", INT16_MAX);
14
+ if (pcm.length === 0)
15
+ return pcm;
16
+ const frameRms = rms(pcm);
17
+ if (frameRms > 0) {
18
+ state.runningRms =
19
+ state.runningRms > 0
20
+ ? state.runningRms + (frameRms - state.runningRms) * rmsSmoothing
21
+ : frameRms;
22
+ const desiredGain = targetRms / state.runningRms;
23
+ const gainDelta = desiredGain - state.gain;
24
+ state.gain += Math.max(-maxGainStep, Math.min(maxGainStep, gainDelta));
25
+ }
26
+ const output = new Int16Array(pcm.length);
27
+ for (let i = 0; i < pcm.length; i += 1) {
28
+ output[i] = Math.round(softLimit(pcm[i] * state.gain, ceiling));
29
+ }
30
+ return output;
31
+ }
32
+ function rms(pcm) {
33
+ let sumSquares = 0;
34
+ for (const sample of pcm)
35
+ sumSquares += sample * sample;
36
+ return Math.sqrt(sumSquares / pcm.length);
37
+ }
38
+ function softLimit(value, ceiling) {
39
+ const magnitude = Math.abs(value);
40
+ const knee = ceiling * 0.75;
41
+ if (magnitude <= knee)
42
+ return value;
43
+ const range = ceiling - knee;
44
+ const limited = knee + range * (1 - Math.exp(-(magnitude - knee) / range));
45
+ return Math.sign(value) * limited;
46
+ }
47
+ function positiveFinite(value, name) {
48
+ if (!Number.isFinite(value) || value <= 0) {
49
+ throw new RangeError(`LoudnessConfig.${name} must be a positive finite number`);
50
+ }
51
+ return value;
52
+ }
53
+ function positiveBounded(value, name, max) {
54
+ const parsed = positiveFinite(value, name);
55
+ if (parsed > max)
56
+ throw new RangeError(`LoudnessConfig.${name} must be at most ${String(max)}`);
57
+ return parsed;
58
+ }
59
+ function bounded(value, name, min, max) {
60
+ if (!Number.isFinite(value) || value <= min || value > max) {
61
+ throw new RangeError(`LoudnessConfig.${name} must be greater than ${String(min)} and at most ${String(max)}`);
62
+ }
63
+ return value;
64
+ }
65
+ //# sourceMappingURL=loudness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loudness.js","sourceRoot":"","sources":["../../src/audio/loudness.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,MAAM,SAAS,GAAG,KAAK,CAAC;AACxB,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAClC,MAAM,qBAAqB,GAAG,IAAI,CAAC;AACnC,MAAM,eAAe,GAAG,KAAK,CAAC;AAc9B,MAAM,UAAU,mBAAmB;IACjC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAe,EACf,KAAoB,EACpB,GAAmB;IAEnB,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,IAAI,qBAAqB,EAAE,aAAa,CAAC,CAAC;IAC5F,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,qBAAqB,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,IAAI,eAAe,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;IAEtF,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEjC,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,KAAK,CAAC,UAAU;YACd,KAAK,CAAC,UAAU,GAAG,CAAC;gBAClB,CAAC,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,YAAY;gBACjE,CAAC,CAAC,QAAQ,CAAC;QACf,MAAM,WAAW,GAAG,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;QACjD,MAAM,SAAS,GAAG,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3C,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,GAAG,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,GAAG,CAAC,GAAe;IAC1B,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,MAAM,IAAI,GAAG;QAAE,UAAU,IAAI,MAAM,GAAG,MAAM,CAAC;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,OAAe;IAC/C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,GAAG,IAAI,CAAC;IAC5B,IAAI,SAAS,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;AACpC,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,IAAY;IACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,UAAU,CAAC,kBAAkB,IAAI,mCAAmC,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW;IAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,UAAU,CAAC,kBAAkB,IAAI,oBAAoB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChG,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,OAAO,CAAC,KAAa,EAAE,IAAY,EAAE,GAAW,EAAE,GAAW;IACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QAC3D,MAAM,IAAI,UAAU,CAAC,kBAAkB,IAAI,yBAAyB,MAAM,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function decodeMuLawToPcm16(input: Uint8Array): Int16Array;
2
+ export declare function encodePcm16ToMuLaw(input: Int16Array): Uint8Array;
3
+ //# sourceMappingURL=mulaw.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mulaw.d.ts","sourceRoot":"","sources":["../../src/audio/mulaw.ts"],"names":[],"mappings":"AAKA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAYhE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAMhE"}
@@ -0,0 +1,39 @@
1
+ // SPDX-License-Identifier: MIT
2
+ const MULAW_BIAS = 0x84;
3
+ const MULAW_CLIP = 32635;
4
+ export function decodeMuLawToPcm16(input) {
5
+ const output = new Int16Array(input.byteLength);
6
+ for (let i = 0; i < input.byteLength; i += 1) {
7
+ const ulaw = (~input[i]) & 0xff;
8
+ const sign = ulaw & 0x80;
9
+ const exponent = (ulaw >> 4) & 0x07;
10
+ const mantissa = ulaw & 0x0f;
11
+ let sample = ((mantissa << 3) + MULAW_BIAS) << exponent;
12
+ sample -= MULAW_BIAS;
13
+ output[i] = sign ? -sample : sample;
14
+ }
15
+ return output;
16
+ }
17
+ export function encodePcm16ToMuLaw(input) {
18
+ const output = new Uint8Array(input.length);
19
+ for (let i = 0; i < input.length; i += 1) {
20
+ output[i] = encodeSample(input[i]);
21
+ }
22
+ return output;
23
+ }
24
+ function encodeSample(sample) {
25
+ let sign = 0;
26
+ let magnitude = sample;
27
+ if (magnitude < 0) {
28
+ sign = 0x80;
29
+ magnitude = -magnitude;
30
+ }
31
+ magnitude = Math.min(magnitude, MULAW_CLIP) + MULAW_BIAS;
32
+ let exponent = 7;
33
+ for (let mask = 0x4000; (magnitude & mask) === 0 && exponent > 0; mask >>= 1) {
34
+ exponent -= 1;
35
+ }
36
+ const mantissa = (magnitude >> (exponent + 3)) & 0x0f;
37
+ return (~(sign | (exponent << 4) | mantissa)) & 0xff;
38
+ }
39
+ //# sourceMappingURL=mulaw.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mulaw.js","sourceRoot":"","sources":["../../src/audio/mulaw.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,GAAG,IAAI,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACzB,MAAM,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC;QAC7B,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,QAAQ,CAAC;QACxD,MAAM,IAAI,UAAU,CAAC;QACrB,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,SAAS,GAAG,MAAM,CAAC;IACvB,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC;QACZ,SAAS,GAAG,CAAC,SAAS,CAAC;IACzB,CAAC;IACD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG,UAAU,CAAC;IACzD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,MAAM,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,QAAQ,GAAG,CAAC,EAAE,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7E,QAAQ,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG,CAAC,SAAS,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC;AACvD,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function pcm16BytesToSamples(audio: Uint8Array): Int16Array;
2
+ export declare function pcm16SamplesToBytes(samples: Int16Array): Uint8Array;
3
+ export declare function bigEndianPcm16BytesToSamples(audio: Uint8Array): Int16Array;
4
+ export declare function pcm16SamplesToBigEndianBytes(samples: Int16Array): Uint8Array;
5
+ //# sourceMappingURL=pcm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pcm.d.ts","sourceRoot":"","sources":["../../src/audio/pcm.ts"],"names":[],"mappings":"AAEA,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAUjE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAOnE;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAU1E;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAO5E"}