@memberjunction/ai-realtime-client 6.1.4 → 6.2.0-edge.1
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.
- package/dist/audio/micCapture.d.ts +2 -0
- package/dist/audio/micCapture.d.ts.map +1 -1
- package/dist/audio/micCapture.js +7 -3
- package/dist/audio/micCapture.js.map +1 -1
- package/dist/audio/pcmPlayback.js +2 -2
- package/dist/audio/pcmUtils.d.ts +8 -0
- package/dist/audio/pcmUtils.d.ts.map +1 -1
- package/dist/audio/pcmUtils.js +21 -5
- package/dist/audio/pcmUtils.js.map +1 -1
- package/dist/drivers/assemblyAIRealtimeClient.js +4 -4
- package/dist/drivers/elevenLabsRealtimeClient.d.ts +1 -1
- package/dist/drivers/elevenLabsRealtimeClient.js +6 -6
- package/dist/drivers/geminiRealtimeClient.js +6 -6
- package/dist/generic/openAIProtocolClient.js +4 -4
- package/dist/media/frameCapture.d.ts +11 -5
- package/dist/media/frameCapture.d.ts.map +1 -1
- package/dist/media/frameCapture.js +20 -8
- package/dist/media/frameCapture.js.map +1 -1
- package/package.json +3 -3
|
@@ -22,5 +22,7 @@ export interface IPcmMicCapture {
|
|
|
22
22
|
* ElevenLabs default).
|
|
23
23
|
* @param onPcmChunk Invoked with each captured block as base64-encoded PCM16.
|
|
24
24
|
*/
|
|
25
|
+
export declare function CreatePcmMicCapture(micStream: MediaStream, sampleRate: number, onPcmChunk: (base64Pcm16: string) => void): Promise<IPcmMicCapture>;
|
|
26
|
+
/** @deprecated Use {@link CreatePcmMicCapture}. */
|
|
25
27
|
export declare function createPcmMicCapture(micStream: MediaStream, sampleRate: number, onPcmChunk: (base64Pcm16: string) => void): Promise<IPcmMicCapture>;
|
|
26
28
|
//# sourceMappingURL=micCapture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"micCapture.d.ts","sourceRoot":"","sources":["../../src/audio/micCapture.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,wEAAwE;IACxE,IAAI,IAAI,IAAI,CAAC;CAChB;AAkCD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
|
|
1
|
+
{"version":3,"file":"micCapture.d.ts","sourceRoot":"","sources":["../../src/audio/micCapture.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,wEAAwE;IACxE,IAAI,IAAI,IAAI,CAAC;CAChB;AAkCD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED,mDAAmD;AACnD,wBAAsB,mBAAmB,CACrC,SAAS,EAAE,WAAW,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,GAC1C,OAAO,CAAC,cAAc,CAAC,CAEzB"}
|
package/dist/audio/micCapture.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EncodeFloat32ToPcm16Base64 } from './pcmUtils.js';
|
|
2
2
|
/** Registration name for the inline mic-capture worklet processor. */
|
|
3
3
|
const CAPTURE_WORKLET_NAME = 'mj-realtime-pcm16-capture';
|
|
4
4
|
/**
|
|
@@ -44,13 +44,13 @@ async function loadCaptureWorklet(context) {
|
|
|
44
44
|
* ElevenLabs default).
|
|
45
45
|
* @param onPcmChunk Invoked with each captured block as base64-encoded PCM16.
|
|
46
46
|
*/
|
|
47
|
-
export async function
|
|
47
|
+
export async function CreatePcmMicCapture(micStream, sampleRate, onPcmChunk) {
|
|
48
48
|
const context = new AudioContext({ sampleRate });
|
|
49
49
|
await loadCaptureWorklet(context);
|
|
50
50
|
const source = context.createMediaStreamSource(micStream);
|
|
51
51
|
const worklet = new AudioWorkletNode(context, CAPTURE_WORKLET_NAME);
|
|
52
52
|
worklet.port.onmessage = (event) => {
|
|
53
|
-
onPcmChunk(
|
|
53
|
+
onPcmChunk(EncodeFloat32ToPcm16Base64(event.data));
|
|
54
54
|
};
|
|
55
55
|
source.connect(worklet);
|
|
56
56
|
const muteTail = context.createGain();
|
|
@@ -66,4 +66,8 @@ export async function createPcmMicCapture(micStream, sampleRate, onPcmChunk) {
|
|
|
66
66
|
},
|
|
67
67
|
};
|
|
68
68
|
}
|
|
69
|
+
/** @deprecated Use {@link CreatePcmMicCapture}. */
|
|
70
|
+
export async function createPcmMicCapture(micStream, sampleRate, onPcmChunk) {
|
|
71
|
+
return CreatePcmMicCapture(micStream, sampleRate, onPcmChunk);
|
|
72
|
+
}
|
|
69
73
|
//# sourceMappingURL=micCapture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"micCapture.js","sourceRoot":"","sources":["../../src/audio/micCapture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAYxD,sEAAsE;AACtE,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG;;;;;;;;;;qBAUV,oBAAoB;CACxC,CAAC;AAEF,wFAAwF;AACxF,KAAK,UAAU,kBAAkB,CAAC,OAAqB;IACnD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;IAC5G,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACP,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,SAAsB,EACtB,UAAkB,EAClB,UAAyC;IAEzC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAiC,EAAE,EAAE;QAC3D,UAAU,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,OAAO;QACH,IAAI,EAAE,GAAG,EAAE;YACP,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"micCapture.js","sourceRoot":"","sources":["../../src/audio/micCapture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAYxD,sEAAsE;AACtE,MAAM,oBAAoB,GAAG,2BAA2B,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,sBAAsB,GAAG;;;;;;;;;;qBAUV,oBAAoB;CACxC,CAAC;AAEF,wFAAwF;AACxF,KAAK,UAAU,kBAAkB,CAAC,OAAqB;IACnD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,CAAC,sBAAsB,CAAC,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC;IAC5G,IAAI,CAAC;QACD,MAAM,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACP,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,SAAsB,EACtB,UAAkB,EAClB,UAAyC;IAEzC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;IACpE,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,KAAiC,EAAE,EAAE;QAC3D,UAAU,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACxB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvD,OAAO;QACH,IAAI,EAAE,GAAG,EAAE;YACP,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YAC9B,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,QAAQ,CAAC,UAAU,EAAE,CAAC;YACtB,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;KACJ,CAAC;AACN,CAAC;AAED,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,SAAsB,EACtB,UAAkB,EAClB,UAAyC;IAEzC,OAAO,mBAAmB,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAClE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Pcm16ToFloat32 } from './pcmUtils.js';
|
|
2
2
|
import { RealtimeAudioMeter } from './audioMeter.js';
|
|
3
3
|
/**
|
|
4
4
|
* Web Audio playout scheduler for raw PCM16 model audio at a driver-supplied sample rate.
|
|
@@ -33,7 +33,7 @@ export class RealtimePcmPlayback {
|
|
|
33
33
|
}
|
|
34
34
|
/** @inheritdoc */
|
|
35
35
|
Enqueue(pcm16) {
|
|
36
|
-
const samples =
|
|
36
|
+
const samples = Pcm16ToFloat32(pcm16);
|
|
37
37
|
if (samples.length === 0) {
|
|
38
38
|
return;
|
|
39
39
|
}
|
package/dist/audio/pcmUtils.d.ts
CHANGED
|
@@ -7,11 +7,19 @@
|
|
|
7
7
|
* unchanged in unit tests.
|
|
8
8
|
*/
|
|
9
9
|
/** Decodes a base64 string into a freshly-allocated `ArrayBuffer`. */
|
|
10
|
+
export declare function Base64ToArrayBuffer(base64: string): ArrayBuffer;
|
|
11
|
+
/** @deprecated Use {@link Base64ToArrayBuffer}. */
|
|
10
12
|
export declare function base64ToArrayBuffer(base64: string): ArrayBuffer;
|
|
11
13
|
/** Encodes raw bytes to base64 in chunks (avoids call-stack limits on large frames). */
|
|
14
|
+
export declare function BytesToBase64(bytes: Uint8Array): string;
|
|
15
|
+
/** @deprecated Use {@link BytesToBase64}. */
|
|
12
16
|
export declare function bytesToBase64(bytes: Uint8Array): string;
|
|
13
17
|
/** Converts a Float32 [-1, 1] sample block to PCM16 little-endian bytes, base64-encoded. */
|
|
18
|
+
export declare function EncodeFloat32ToPcm16Base64(samples: Float32Array): string;
|
|
19
|
+
/** @deprecated Use {@link EncodeFloat32ToPcm16Base64}. */
|
|
14
20
|
export declare function encodeFloat32ToPcm16Base64(samples: Float32Array): string;
|
|
15
21
|
/** Converts raw PCM16 little-endian bytes to Float32 samples (truncates a trailing odd byte). */
|
|
22
|
+
export declare function Pcm16ToFloat32(pcm: ArrayBuffer): Float32Array<ArrayBuffer>;
|
|
23
|
+
/** @deprecated Use {@link Pcm16ToFloat32}. */
|
|
16
24
|
export declare function pcm16ToFloat32(pcm: ArrayBuffer): Float32Array<ArrayBuffer>;
|
|
17
25
|
//# sourceMappingURL=pcmUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcmUtils.d.ts","sourceRoot":"","sources":["../../src/audio/pcmUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAO/D;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAOvD;AAED,4FAA4F;AAC5F,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAOxE;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,CAQ1E"}
|
|
1
|
+
{"version":3,"file":"pcmUtils.d.ts","sourceRoot":"","sources":["../../src/audio/pcmUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,sEAAsE;AACtE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAO/D;AAED,mDAAmD;AACnD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAE/D;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAOvD;AAED,6CAA6C;AAC7C,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAEvD;AAED,4FAA4F;AAC5F,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAOxE;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAExE;AAED,iGAAiG;AACjG,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,CAQ1E;AAED,8CAA8C;AAC9C,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,CAE1E"}
|
package/dist/audio/pcmUtils.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* unchanged in unit tests.
|
|
8
8
|
*/
|
|
9
9
|
/** Decodes a base64 string into a freshly-allocated `ArrayBuffer`. */
|
|
10
|
-
export function
|
|
10
|
+
export function Base64ToArrayBuffer(base64) {
|
|
11
11
|
const binary = atob(base64);
|
|
12
12
|
const out = new Uint8Array(binary.length);
|
|
13
13
|
for (let i = 0; i < binary.length; i++) {
|
|
@@ -15,8 +15,12 @@ export function base64ToArrayBuffer(base64) {
|
|
|
15
15
|
}
|
|
16
16
|
return out.buffer;
|
|
17
17
|
}
|
|
18
|
+
/** @deprecated Use {@link Base64ToArrayBuffer}. */
|
|
19
|
+
export function base64ToArrayBuffer(base64) {
|
|
20
|
+
return Base64ToArrayBuffer(base64);
|
|
21
|
+
}
|
|
18
22
|
/** Encodes raw bytes to base64 in chunks (avoids call-stack limits on large frames). */
|
|
19
|
-
export function
|
|
23
|
+
export function BytesToBase64(bytes) {
|
|
20
24
|
let binary = '';
|
|
21
25
|
const chunkSize = 0x8000;
|
|
22
26
|
for (let i = 0; i < bytes.length; i += chunkSize) {
|
|
@@ -24,17 +28,25 @@ export function bytesToBase64(bytes) {
|
|
|
24
28
|
}
|
|
25
29
|
return btoa(binary);
|
|
26
30
|
}
|
|
31
|
+
/** @deprecated Use {@link BytesToBase64}. */
|
|
32
|
+
export function bytesToBase64(bytes) {
|
|
33
|
+
return BytesToBase64(bytes);
|
|
34
|
+
}
|
|
27
35
|
/** Converts a Float32 [-1, 1] sample block to PCM16 little-endian bytes, base64-encoded. */
|
|
28
|
-
export function
|
|
36
|
+
export function EncodeFloat32ToPcm16Base64(samples) {
|
|
29
37
|
const pcm = new Int16Array(samples.length);
|
|
30
38
|
for (let i = 0; i < samples.length; i++) {
|
|
31
39
|
const s = Math.max(-1, Math.min(1, samples[i]));
|
|
32
40
|
pcm[i] = s < 0 ? s * 0x8000 : s * 0x7fff;
|
|
33
41
|
}
|
|
34
|
-
return
|
|
42
|
+
return BytesToBase64(new Uint8Array(pcm.buffer));
|
|
43
|
+
}
|
|
44
|
+
/** @deprecated Use {@link EncodeFloat32ToPcm16Base64}. */
|
|
45
|
+
export function encodeFloat32ToPcm16Base64(samples) {
|
|
46
|
+
return EncodeFloat32ToPcm16Base64(samples);
|
|
35
47
|
}
|
|
36
48
|
/** Converts raw PCM16 little-endian bytes to Float32 samples (truncates a trailing odd byte). */
|
|
37
|
-
export function
|
|
49
|
+
export function Pcm16ToFloat32(pcm) {
|
|
38
50
|
const even = pcm.byteLength - (pcm.byteLength % 2);
|
|
39
51
|
const ints = new Int16Array(pcm.slice(0, even));
|
|
40
52
|
const out = new Float32Array(ints.length);
|
|
@@ -43,4 +55,8 @@ export function pcm16ToFloat32(pcm) {
|
|
|
43
55
|
}
|
|
44
56
|
return out;
|
|
45
57
|
}
|
|
58
|
+
/** @deprecated Use {@link Pcm16ToFloat32}. */
|
|
59
|
+
export function pcm16ToFloat32(pcm) {
|
|
60
|
+
return Pcm16ToFloat32(pcm);
|
|
61
|
+
}
|
|
46
62
|
//# sourceMappingURL=pcmUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcmUtils.js","sourceRoot":"","sources":["../../src/audio/pcmUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,sEAAsE;AACtE,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC;AACtB,CAAC;AAED,wFAAwF;AACxF,MAAM,UAAU,aAAa,CAAC,KAAiB;IAC3C,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,0BAA0B,CAAC,OAAqB;IAC5D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC7C,CAAC;IACD,OAAO,aAAa,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,cAAc,CAAC,GAAgB;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IACnD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
|
|
1
|
+
{"version":3,"file":"pcmUtils.js","sourceRoot":"","sources":["../../src/audio/pcmUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,10 +6,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
6
6
|
};
|
|
7
7
|
import { RegisterClass } from '@memberjunction/global';
|
|
8
8
|
import { BaseRealtimeClient } from '../generic/baseRealtimeClient.js';
|
|
9
|
-
import {
|
|
9
|
+
import { Base64ToArrayBuffer } from '../audio/pcmUtils.js';
|
|
10
10
|
import { RealtimePcmPlayback } from '../audio/pcmPlayback.js';
|
|
11
11
|
import { RealtimeAudioMeter } from '../audio/audioMeter.js';
|
|
12
|
-
import {
|
|
12
|
+
import { CreatePcmMicCapture } from '../audio/micCapture.js';
|
|
13
13
|
// ── Audio constants (AssemblyAI Voice Agent wire format) ───────────────────────
|
|
14
14
|
/** The single Voice Agent websocket endpoint (auth rides as a `?token=` query parameter). */
|
|
15
15
|
export const ASSEMBLYAI_AGENT_WS_URL = 'wss://agents.assemblyai.com/v1/ws';
|
|
@@ -374,7 +374,7 @@ let AssemblyAIRealtimeClient = class AssemblyAIRealtimeClient extends BaseRealti
|
|
|
374
374
|
* this with a no-op fake (and may capture `onPcmChunk` to simulate mic frames).
|
|
375
375
|
*/
|
|
376
376
|
async createMicCapture(micStream, sampleRate, onPcmChunk) {
|
|
377
|
-
return
|
|
377
|
+
return CreatePcmMicCapture(micStream, sampleRate, onPcmChunk);
|
|
378
378
|
}
|
|
379
379
|
/**
|
|
380
380
|
* Creation seam for the playout engine at the provider's fixed 24 kHz rate. Production
|
|
@@ -533,7 +533,7 @@ let AssemblyAIRealtimeClient = class AssemblyAIRealtimeClient extends BaseRealti
|
|
|
533
533
|
return;
|
|
534
534
|
}
|
|
535
535
|
this.markGenerationStarted();
|
|
536
|
-
this.playback?.Enqueue(
|
|
536
|
+
this.playback?.Enqueue(Base64ToArrayBuffer(audioBase64));
|
|
537
537
|
}
|
|
538
538
|
/** User transcript: streaming deltas (`IsFinal: false`) finalized by `transcript.user`. */
|
|
539
539
|
handleUserTranscript(text, isFinal) {
|
|
@@ -336,7 +336,7 @@ export declare class ElevenLabsRealtimeClient extends BaseRealtimeClient {
|
|
|
336
336
|
*/
|
|
337
337
|
private sendToolResultFrame;
|
|
338
338
|
/** How long to wait for real model output after a tool result before nudging. */
|
|
339
|
-
private static readonly
|
|
339
|
+
private static readonly toolResultNudgeMs;
|
|
340
340
|
/** Arms the absorbed-tool-result nudge (see {@link toolResultNudgeTimer}). */
|
|
341
341
|
private armToolResultNudge;
|
|
342
342
|
/** Cancels the nudge — real model output arrived (or the session is resetting). */
|
|
@@ -7,10 +7,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var ElevenLabsRealtimeClient_1;
|
|
8
8
|
import { RegisterClass } from '@memberjunction/global';
|
|
9
9
|
import { BaseRealtimeClient } from '../generic/baseRealtimeClient.js';
|
|
10
|
-
import {
|
|
10
|
+
import { Base64ToArrayBuffer } from '../audio/pcmUtils.js';
|
|
11
11
|
import { RealtimePcmPlayback } from '../audio/pcmPlayback.js';
|
|
12
12
|
import { RealtimeAudioMeter } from '../audio/audioMeter.js';
|
|
13
|
-
import {
|
|
13
|
+
import { CreatePcmMicCapture } from '../audio/micCapture.js';
|
|
14
14
|
// ── Audio constants (ElevenLabs Agents wire formats) ───────────────────────────
|
|
15
15
|
/**
|
|
16
16
|
* Fallback PCM16 sample rate used when the `conversation_initiation_metadata` carries no
|
|
@@ -344,7 +344,7 @@ let ElevenLabsRealtimeClient = class ElevenLabsRealtimeClient extends BaseRealti
|
|
|
344
344
|
* no-op fake (and may capture `onPcmChunk` to simulate mic frames).
|
|
345
345
|
*/
|
|
346
346
|
async createMicCapture(micStream, sampleRate, onPcmChunk) {
|
|
347
|
-
return
|
|
347
|
+
return CreatePcmMicCapture(micStream, sampleRate, onPcmChunk);
|
|
348
348
|
}
|
|
349
349
|
/**
|
|
350
350
|
* Creation seam for the playout engine at the NEGOTIATED output rate. Production returns
|
|
@@ -465,7 +465,7 @@ let ElevenLabsRealtimeClient = class ElevenLabsRealtimeClient extends BaseRealti
|
|
|
465
465
|
return;
|
|
466
466
|
}
|
|
467
467
|
this.markGenerationStarted();
|
|
468
|
-
this.playback?.Enqueue(
|
|
468
|
+
this.playback?.Enqueue(Base64ToArrayBuffer(audioBase64));
|
|
469
469
|
}
|
|
470
470
|
/** User transcript: whole-utterance FINAL (this provider emits no interim deltas). */
|
|
471
471
|
handleUserTranscript(text) {
|
|
@@ -619,7 +619,7 @@ let ElevenLabsRealtimeClient = class ElevenLabsRealtimeClient extends BaseRealti
|
|
|
619
619
|
this.armToolResultNudge();
|
|
620
620
|
}
|
|
621
621
|
/** How long to wait for real model output after a tool result before nudging. */
|
|
622
|
-
static { this.
|
|
622
|
+
static { this.toolResultNudgeMs = 1600; }
|
|
623
623
|
/** Arms the absorbed-tool-result nudge (see {@link toolResultNudgeTimer}). */
|
|
624
624
|
armToolResultNudge() {
|
|
625
625
|
this.cancelToolResultNudge();
|
|
@@ -631,7 +631,7 @@ let ElevenLabsRealtimeClient = class ElevenLabsRealtimeClient extends BaseRealti
|
|
|
631
631
|
this.responseActive = false;
|
|
632
632
|
this.sendUserMessage('The delegated work you were waiting on has just finished and its result has been ' +
|
|
633
633
|
'delivered to you. Tell the user the outcome now, in your own first-person voice.', 'normal', false);
|
|
634
|
-
}, ElevenLabsRealtimeClient_1.
|
|
634
|
+
}, ElevenLabsRealtimeClient_1.toolResultNudgeMs);
|
|
635
635
|
}
|
|
636
636
|
/** Cancels the nudge — real model output arrived (or the session is resetting). */
|
|
637
637
|
cancelToolResultNudge() {
|
|
@@ -9,11 +9,11 @@ import { RegisterClass } from '@memberjunction/global';
|
|
|
9
9
|
import { RealtimeDiagLog, RealtimeToolBatchBarrier, ExtractToolSchedulingHint, } from '@memberjunction/ai';
|
|
10
10
|
import { GoogleGenAI, FunctionResponseScheduling, } from '@google/genai';
|
|
11
11
|
import { BaseRealtimeClient } from '../generic/baseRealtimeClient.js';
|
|
12
|
-
import {
|
|
12
|
+
import { Base64ToArrayBuffer } from '../audio/pcmUtils.js';
|
|
13
13
|
import { RealtimePcmPlayback } from '../audio/pcmPlayback.js';
|
|
14
14
|
import { RealtimeAudioMeter } from '../audio/audioMeter.js';
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
15
|
+
import { CreatePcmMicCapture } from '../audio/micCapture.js';
|
|
16
|
+
import { CreateStreamFrameCapture } from '../media/frameCapture.js';
|
|
17
17
|
// ── Audio constants (Gemini Live wire formats) ─────────────────────────────────
|
|
18
18
|
/** Gemini Live expects client audio as 16-bit signed PCM, 16 kHz, mono. */
|
|
19
19
|
const GEMINI_INPUT_SAMPLE_RATE = 16000;
|
|
@@ -249,7 +249,7 @@ let GeminiRealtimeClient = class GeminiRealtimeClient extends BaseRealtimeClient
|
|
|
249
249
|
this.micCapture = await this.createMicCapture(micStream, (base64Pcm16) => this.sendMicChunk(base64Pcm16));
|
|
250
250
|
// Start camera capture if inbound video is established and cameraStream provided
|
|
251
251
|
if (this.cameraStream && this.IsTrackEstablished('video', 'inbound')) {
|
|
252
|
-
this.cameraCapture =
|
|
252
|
+
this.cameraCapture = CreateStreamFrameCapture(this.cameraStream, {
|
|
253
253
|
Rate: 1,
|
|
254
254
|
OnFrame: (frame) => this.SendVideoFrame(frame.data, frame.mimeType),
|
|
255
255
|
});
|
|
@@ -500,7 +500,7 @@ let GeminiRealtimeClient = class GeminiRealtimeClient extends BaseRealtimeClient
|
|
|
500
500
|
* frames).
|
|
501
501
|
*/
|
|
502
502
|
async createMicCapture(micStream, onPcmChunk) {
|
|
503
|
-
return
|
|
503
|
+
return CreatePcmMicCapture(micStream, GEMINI_INPUT_SAMPLE_RATE, onPcmChunk);
|
|
504
504
|
}
|
|
505
505
|
/** Creation seam for the playout engine. Production returns {@link GeminiPcmPlayback}. */
|
|
506
506
|
createPlayback() {
|
|
@@ -805,7 +805,7 @@ let GeminiRealtimeClient = class GeminiRealtimeClient extends BaseRealtimeClient
|
|
|
805
805
|
const data = part.inlineData?.data;
|
|
806
806
|
if (data) {
|
|
807
807
|
this.markGenerationStarted();
|
|
808
|
-
this.playback?.Enqueue(
|
|
808
|
+
this.playback?.Enqueue(Base64ToArrayBuffer(data));
|
|
809
809
|
}
|
|
810
810
|
}
|
|
811
811
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ResolveResponseDoneUsage } from '@memberjunction/ai';
|
|
2
2
|
import { BaseRealtimeClient } from './baseRealtimeClient.js';
|
|
3
|
-
import {
|
|
3
|
+
import { Base64ToArrayBuffer } from '../audio/pcmUtils.js';
|
|
4
4
|
import { RealtimePcmPlayback } from '../audio/pcmPlayback.js';
|
|
5
5
|
import { RealtimeAudioMeter } from '../audio/audioMeter.js';
|
|
6
|
-
import {
|
|
6
|
+
import { CreatePcmMicCapture } from '../audio/micCapture.js';
|
|
7
7
|
// ── Layer 1: the protocol brain ─────────────────────────────────────────────────
|
|
8
8
|
/**
|
|
9
9
|
* The shared **OpenAI-protocol brain** for realtime CLIENT drivers — the transport-agnostic
|
|
@@ -775,7 +775,7 @@ export class OpenAIProtocolWebSocketRealtimeClient extends OpenAIProtocolRealtim
|
|
|
775
775
|
}
|
|
776
776
|
/** @inheritdoc — enqueues one base64 PCM16 chunk into the local playout engine. */
|
|
777
777
|
handleAudioDeltaFrame(deltaBase64) {
|
|
778
|
-
this.playback?.Enqueue(
|
|
778
|
+
this.playback?.Enqueue(Base64ToArrayBuffer(deltaBase64));
|
|
779
779
|
}
|
|
780
780
|
/**
|
|
781
781
|
* @inheritdoc
|
|
@@ -864,7 +864,7 @@ export class OpenAIProtocolWebSocketRealtimeClient extends OpenAIProtocolRealtim
|
|
|
864
864
|
* (and may capture `onPcmChunk` to simulate mic frames).
|
|
865
865
|
*/
|
|
866
866
|
async createMicCapture(micStream, sampleRate, onPcmChunk) {
|
|
867
|
-
return
|
|
867
|
+
return CreatePcmMicCapture(micStream, sampleRate, onPcmChunk);
|
|
868
868
|
}
|
|
869
869
|
/** Creation seam for the playout engine. Production returns the shared {@link RealtimePcmPlayback}. */
|
|
870
870
|
createPlayback(sampleRate) {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @fileoverview FRAME CAPTURE for realtime video tracks — camera and screen capture pipelines.
|
|
3
3
|
*
|
|
4
4
|
* Patterned beside `micCapture.ts`:
|
|
5
|
-
* - `
|
|
6
|
-
* - `
|
|
7
|
-
* - `
|
|
5
|
+
* - `CreateCameraCapture`: prompts via `getUserMedia` (consent-gated via {@link RealtimeTrackDescriptor.RequiresConsent}).
|
|
6
|
+
* - `CreateScreenCapture`: prompts via `getDisplayMedia` (consent-gated via {@link RealtimeTrackDescriptor.RequiresConsent}).
|
|
7
|
+
* - `CreateStreamFrameCapture`: extracts periodic JPEG frames from an already-acquired `MediaStream`.
|
|
8
8
|
*
|
|
9
9
|
* Cadence is throttled to at most 1 frame per second (1 fps ceiling per Live API capabilities guide).
|
|
10
10
|
*
|
|
@@ -53,7 +53,7 @@ export interface FrameCaptureOptions {
|
|
|
53
53
|
* @param stream The media stream containing one or more video tracks.
|
|
54
54
|
* @param options Frame capture options (cadence, format, frame callback).
|
|
55
55
|
*/
|
|
56
|
-
export declare function
|
|
56
|
+
export declare function CreateStreamFrameCapture(stream: MediaStream, options: FrameCaptureOptions): IFrameCapture;
|
|
57
57
|
/**
|
|
58
58
|
* Requests user camera video capture via `navigator.mediaDevices.getUserMedia`.
|
|
59
59
|
* Gated on {@link FrameCaptureOptions.ConsentGranted} when consent is required.
|
|
@@ -61,7 +61,7 @@ export declare function createStreamFrameCapture(stream: MediaStream, options: F
|
|
|
61
61
|
* @param options Frame capture options.
|
|
62
62
|
* @param constraints Video track constraints.
|
|
63
63
|
*/
|
|
64
|
-
export declare function
|
|
64
|
+
export declare function CreateCameraCapture(options: FrameCaptureOptions, constraints?: MediaTrackConstraints): Promise<IFrameCapture>;
|
|
65
65
|
/**
|
|
66
66
|
* Requests screen share video capture via `navigator.mediaDevices.getDisplayMedia`.
|
|
67
67
|
* Gated on {@link FrameCaptureOptions.ConsentGranted} when consent is required.
|
|
@@ -69,5 +69,11 @@ export declare function createCameraCapture(options: FrameCaptureOptions, constr
|
|
|
69
69
|
* @param options Frame capture options.
|
|
70
70
|
* @param displayMediaOptions Display media options.
|
|
71
71
|
*/
|
|
72
|
+
export declare function CreateScreenCapture(options: FrameCaptureOptions, displayMediaOptions?: DisplayMediaStreamOptions): Promise<IFrameCapture>;
|
|
73
|
+
/** @deprecated Use {@link CreateStreamFrameCapture}. */
|
|
74
|
+
export declare function createStreamFrameCapture(stream: MediaStream, options: FrameCaptureOptions): IFrameCapture;
|
|
75
|
+
/** @deprecated Use {@link CreateCameraCapture}. */
|
|
76
|
+
export declare function createCameraCapture(options: FrameCaptureOptions, constraints?: MediaTrackConstraints): Promise<IFrameCapture>;
|
|
77
|
+
/** @deprecated Use {@link CreateScreenCapture}. */
|
|
72
78
|
export declare function createScreenCapture(options: FrameCaptureOptions, displayMediaOptions?: DisplayMediaStreamOptions): Promise<IFrameCapture>;
|
|
73
79
|
//# sourceMappingURL=frameCapture.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameCapture.d.ts","sourceRoot":"","sources":["../../src/media/frameCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,yFAAyF;IACzF,IAAI,IAAI,IAAI,CAAC;IACb,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACtC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,GAC7B,aAAa,CAyEf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,GACpC,OAAO,CAAC,aAAa,CAAC,CAqBxB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,mBAAmB,CAAC,EAAE,yBAAyB,GAChD,OAAO,CAAC,aAAa,CAAC,CAqBxB"}
|
|
1
|
+
{"version":3,"file":"frameCapture.d.ts","sourceRoot":"","sources":["../../src/media/frameCapture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAElE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,yFAAyF;IACzF,IAAI,IAAI,IAAI,CAAC;IACb,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,uBAAuB,CAAC;IACrC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,QAAQ,CAAC,EAAE,YAAY,GAAG,WAAW,CAAC;IACtC,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAChE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,GAC7B,aAAa,CAyEf;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,GACpC,OAAO,CAAC,aAAa,CAAC,CAqBxB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,mBAAmB,CAAC,EAAE,yBAAyB,GAChD,OAAO,CAAC,aAAa,CAAC,CAqBxB;AAED,wDAAwD;AACxD,wBAAgB,wBAAwB,CACpC,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,mBAAmB,GAC7B,aAAa,CAEf;AAED,mDAAmD;AACnD,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,CAAC,EAAE,qBAAqB,GACpC,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,mDAAmD;AACnD,wBAAsB,mBAAmB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,mBAAmB,CAAC,EAAE,yBAAyB,GAChD,OAAO,CAAC,aAAa,CAAC,CAExB"}
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @fileoverview FRAME CAPTURE for realtime video tracks — camera and screen capture pipelines.
|
|
3
3
|
*
|
|
4
4
|
* Patterned beside `micCapture.ts`:
|
|
5
|
-
* - `
|
|
6
|
-
* - `
|
|
7
|
-
* - `
|
|
5
|
+
* - `CreateCameraCapture`: prompts via `getUserMedia` (consent-gated via {@link RealtimeTrackDescriptor.RequiresConsent}).
|
|
6
|
+
* - `CreateScreenCapture`: prompts via `getDisplayMedia` (consent-gated via {@link RealtimeTrackDescriptor.RequiresConsent}).
|
|
7
|
+
* - `CreateStreamFrameCapture`: extracts periodic JPEG frames from an already-acquired `MediaStream`.
|
|
8
8
|
*
|
|
9
9
|
* Cadence is throttled to at most 1 frame per second (1 fps ceiling per Live API capabilities guide).
|
|
10
10
|
*
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* @param stream The media stream containing one or more video tracks.
|
|
18
18
|
* @param options Frame capture options (cadence, format, frame callback).
|
|
19
19
|
*/
|
|
20
|
-
export function
|
|
20
|
+
export function CreateStreamFrameCapture(stream, options) {
|
|
21
21
|
const rawRate = options.Rate ?? options.Descriptor?.Rate ?? 1;
|
|
22
22
|
// Cadence ceiling: max 1 fps per Gemini Live API specs; minimum 0.1 fps
|
|
23
23
|
const rate = Math.min(Math.max(rawRate, 0.1), 1);
|
|
@@ -93,7 +93,7 @@ export function createStreamFrameCapture(stream, options) {
|
|
|
93
93
|
* @param options Frame capture options.
|
|
94
94
|
* @param constraints Video track constraints.
|
|
95
95
|
*/
|
|
96
|
-
export async function
|
|
96
|
+
export async function CreateCameraCapture(options, constraints) {
|
|
97
97
|
const requiresConsent = options.Descriptor?.RequiresConsent ?? true;
|
|
98
98
|
if (requiresConsent && !options.ConsentGranted) {
|
|
99
99
|
throw new Error('Explicit consent is required to establish camera video capture.');
|
|
@@ -104,7 +104,7 @@ export async function createCameraCapture(options, constraints) {
|
|
|
104
104
|
const stream = await navigator.mediaDevices.getUserMedia({
|
|
105
105
|
video: constraints ?? { width: { ideal: 1280 }, height: { ideal: 720 }, frameRate: { max: 1 } },
|
|
106
106
|
});
|
|
107
|
-
const capture =
|
|
107
|
+
const capture = CreateStreamFrameCapture(stream, options);
|
|
108
108
|
return {
|
|
109
109
|
Stop: () => {
|
|
110
110
|
capture.Stop();
|
|
@@ -122,7 +122,7 @@ export async function createCameraCapture(options, constraints) {
|
|
|
122
122
|
* @param options Frame capture options.
|
|
123
123
|
* @param displayMediaOptions Display media options.
|
|
124
124
|
*/
|
|
125
|
-
export async function
|
|
125
|
+
export async function CreateScreenCapture(options, displayMediaOptions) {
|
|
126
126
|
const requiresConsent = options.Descriptor?.RequiresConsent ?? true;
|
|
127
127
|
if (requiresConsent && !options.ConsentGranted) {
|
|
128
128
|
throw new Error('Explicit consent is required to establish screen video capture.');
|
|
@@ -131,7 +131,7 @@ export async function createScreenCapture(options, displayMediaOptions) {
|
|
|
131
131
|
throw new Error('Screen capture is unavailable: navigator.mediaDevices.getDisplayMedia not supported in this environment.');
|
|
132
132
|
}
|
|
133
133
|
const stream = await navigator.mediaDevices.getDisplayMedia(displayMediaOptions ?? { video: { frameRate: { max: 1 } } });
|
|
134
|
-
const capture =
|
|
134
|
+
const capture = CreateStreamFrameCapture(stream, options);
|
|
135
135
|
return {
|
|
136
136
|
Stop: () => {
|
|
137
137
|
capture.Stop();
|
|
@@ -142,4 +142,16 @@ export async function createScreenCapture(options, displayMediaOptions) {
|
|
|
142
142
|
},
|
|
143
143
|
};
|
|
144
144
|
}
|
|
145
|
+
/** @deprecated Use {@link CreateStreamFrameCapture}. */
|
|
146
|
+
export function createStreamFrameCapture(stream, options) {
|
|
147
|
+
return CreateStreamFrameCapture(stream, options);
|
|
148
|
+
}
|
|
149
|
+
/** @deprecated Use {@link CreateCameraCapture}. */
|
|
150
|
+
export async function createCameraCapture(options, constraints) {
|
|
151
|
+
return CreateCameraCapture(options, constraints);
|
|
152
|
+
}
|
|
153
|
+
/** @deprecated Use {@link CreateScreenCapture}. */
|
|
154
|
+
export async function createScreenCapture(options, displayMediaOptions) {
|
|
155
|
+
return CreateScreenCapture(options, displayMediaOptions);
|
|
156
|
+
}
|
|
145
157
|
//# sourceMappingURL=frameCapture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frameCapture.js","sourceRoot":"","sources":["../../src/media/frameCapture.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"frameCapture.js","sourceRoot":"","sources":["../../src/media/frameCapture.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ai-realtime-client",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "6.1
|
|
4
|
+
"version": "6.2.0-edge.1",
|
|
5
5
|
"description": "MemberJunction: Framework-agnostic browser client abstraction for provider-direct realtime (voice) sessions - BaseRealtimeClient + provider drivers",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"author": "MemberJunction.com",
|
|
12
12
|
"license": "BUSL-1.1",
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@memberjunction/global": "6.1
|
|
15
|
-
"@memberjunction/ai": "6.1
|
|
14
|
+
"@memberjunction/global": "6.2.0-edge.1",
|
|
15
|
+
"@memberjunction/ai": "6.2.0-edge.1",
|
|
16
16
|
"@google/genai": "^2.8.0"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|