meeting-record 0.1.2 → 0.2.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/README.md +119 -66
- package/dist/index.d.ts +100 -59
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +191 -104
- package/dist/index.js.map +1 -1
- package/dist/mixed-audio.d.ts +5 -4
- package/dist/mixed-audio.d.ts.map +1 -1
- package/dist/mixed-audio.js.map +1 -1
- package/dist/mono-resampler.js +1 -1
- package/dist/mono-resampler.js.map +1 -1
- package/dist/pcm-mixer.d.ts.map +1 -1
- package/dist/pcm-mixer.js +9 -2
- package/dist/pcm-mixer.js.map +1 -1
- package/dist/typed-readable.d.ts +29 -0
- package/dist/typed-readable.d.ts.map +1 -0
- package/dist/typed-readable.js +2 -0
- package/dist/typed-readable.js.map +1 -0
- package/package.json +1 -1
- package/prebuilds/darwin-arm64/meeting-record.node +0 -0
- package/prebuilds/darwin-x64/meeting-record.node +0 -0
- package/prebuilds/win32-arm64/meeting-record.node +0 -0
- package/prebuilds/win32-x64/meeting-record.node +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# meeting-record for Node.js
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
System-audio and microphone capture with meeting detection for macOS and Windows.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,89 +8,142 @@
|
|
|
8
8
|
npm install meeting-record
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
- Requires Node.js 22.13+ (22.x) or 24+.
|
|
12
|
+
- See the [platform requirements and permissions](https://github.com/hoangvvo/meeting-record#requirements) for app configuration.
|
|
13
|
+
|
|
14
|
+
## Capture
|
|
12
15
|
|
|
13
16
|
```ts
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
await
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
//
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
//
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
console.log("meeting updated", meeting);
|
|
29
|
-
});
|
|
30
|
-
MeetingRecord.meetings.on("ended", (meeting) => {
|
|
31
|
-
console.log("meeting ended", meeting);
|
|
32
|
-
});
|
|
33
|
-
MeetingRecord.meetings.watch();
|
|
34
|
-
|
|
35
|
-
// Or scan for active meetings at any time.
|
|
36
|
-
const meeting = MeetingRecord.meetings.scan().find((item) => item.shouldRecord);
|
|
37
|
-
if (!meeting) throw new Error("no active meeting");
|
|
38
|
-
|
|
39
|
-
// Start recording the meeting process and its audio helpers.
|
|
40
|
-
// Use `{ type: "system" }` instead to record the whole system mix.
|
|
41
|
-
const recording = await MeetingRecord.capture.start(
|
|
42
|
-
{ type: "process", pid: meeting.pid },
|
|
43
|
-
{ microphone: "default" },
|
|
44
|
-
);
|
|
17
|
+
import { setTimeout as delay } from "node:timers/promises";
|
|
18
|
+
import { capture, permissions, Permission } from "meeting-record";
|
|
19
|
+
|
|
20
|
+
await permissions.request(Permission.SystemAudio);
|
|
21
|
+
const recording = await capture.start({ type: "system" });
|
|
22
|
+
|
|
23
|
+
// Stop after ten seconds; keep reading until the stream ends.
|
|
24
|
+
const stopped = delay(10_000).then(() => recording.stopRecording());
|
|
25
|
+
for await (const chunk of recording.systemAudio) {
|
|
26
|
+
// Raw float32 PCM, with the format and capture time of this packet.
|
|
27
|
+
console.log(chunk.pcm, chunk.hostTimeNs, chunk.sampleRate, chunk.channels);
|
|
28
|
+
}
|
|
29
|
+
await stopped;
|
|
30
|
+
```
|
|
45
31
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
recording.systemAudio.on("drop", (samples) => console.warn("dropped", samples));
|
|
57
|
-
recording.systemAudio.on("format", (format) =>
|
|
58
|
-
console.log("new format", format),
|
|
59
|
-
);
|
|
32
|
+
| Target | Value passed to `capture.start()` |
|
|
33
|
+
| ----------------------------- | --------------------------------- |
|
|
34
|
+
| System audio | `{ type: "system" }` |
|
|
35
|
+
| One app and its audio helpers | `{ type: "process", pid }` |
|
|
36
|
+
|
|
37
|
+
- **App picker:** `meetings.audioApps()` lists available apps. Use the selected entry's `pid`; no meeting scan is required.
|
|
38
|
+
- **Meeting capture:** a detected meeting's `pid` is also a process target.
|
|
39
|
+
- **Permissions:** `permissions.request()` returns a `PermissionStatus`; `permissions.status()` checks the current status without prompting.
|
|
40
|
+
- **Sessions:** one recording at a time per process.
|
|
60
41
|
|
|
61
|
-
|
|
62
|
-
recording.microphone?.on("data", (chunk) => {
|
|
63
|
-
console.log(chunk.length, chunk.hostTimeNs, chunk.sampleRate, chunk.channels);
|
|
64
|
-
});
|
|
42
|
+
### Add a microphone
|
|
65
43
|
|
|
66
|
-
|
|
67
|
-
|
|
44
|
+
Request microphone permission, then pass `microphone` in the capture options:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { MicrophoneSource } from "meeting-record";
|
|
68
48
|
|
|
69
|
-
|
|
70
|
-
|
|
49
|
+
await permissions.request(Permission.Microphone);
|
|
50
|
+
const recording = await capture.start(
|
|
51
|
+
{ type: "system" },
|
|
52
|
+
{
|
|
53
|
+
mono: false, // Stereo system audio; defaults to mono. The mic stays mono.
|
|
54
|
+
microphone: MicrophoneSource.Default,
|
|
55
|
+
},
|
|
56
|
+
);
|
|
71
57
|
```
|
|
72
58
|
|
|
73
|
-
|
|
59
|
+
- `MicrophoneSource.Default` follows the OS input device.
|
|
60
|
+
- `MicrophoneSource.Auto` prefers the captured app's mic on Windows, then the communications default. On macOS, it uses the default input.
|
|
61
|
+
- Without `microphone`, only system audio is captured.
|
|
62
|
+
|
|
63
|
+
## Audio output
|
|
64
|
+
|
|
65
|
+
| Output | Access | Data |
|
|
66
|
+
| ------------ | ----------------------- | ---------------------------------------------------------------------------- |
|
|
67
|
+
| System audio | `recording.systemAudio` | Object-mode stream of `AudioChunk` packets |
|
|
68
|
+
| Microphone | `recording.microphone` | Same packet type; present when requested |
|
|
69
|
+
| Mixed audio | `recording.mixedAudio` | Byte stream of mono signed 16-bit little-endian PCM; present when configured |
|
|
74
70
|
|
|
75
|
-
|
|
71
|
+
- **Raw samples:** `chunk.pcm` contains interleaved float32 PCM.
|
|
72
|
+
- **Packet metadata:** `hostTimeNs`, `frameCount`, `sampleRate`, `channels`, and `droppedSamples`.
|
|
73
|
+
- **Reading:** use `data` listeners or `for await...of` on each raw track. Use each packet's format; it can change during capture.
|
|
74
|
+
- **Slow readers:** raw tracks report discarded samples through `drop` events and `droppedSamples`.
|
|
75
|
+
- See [capture formats and channels](https://github.com/hoangvvo/meeting-record#capture) for sample rates and platform behavior.
|
|
76
76
|
|
|
77
|
-
|
|
77
|
+
### Mixed audio
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
After requesting the audio and microphone permissions, start with `mix` to add a combined stream:
|
|
80
80
|
|
|
81
81
|
```ts
|
|
82
|
-
const recording = await
|
|
82
|
+
const recording = await capture.start(
|
|
83
83
|
{ type: "system" },
|
|
84
|
-
{
|
|
84
|
+
{
|
|
85
|
+
microphone: MicrophoneSource.Default,
|
|
86
|
+
mix: { sampleRate: 24_000 }, // Combined mono s16le at 24 kHz.
|
|
87
|
+
},
|
|
85
88
|
);
|
|
86
|
-
|
|
87
|
-
recording.mixedAudio.on("
|
|
88
|
-
recording.mixedAudio.setMicrophoneMuted(true);
|
|
89
|
+
|
|
90
|
+
recording.mixedAudio.on("data", (pcm) => console.log(pcm.byteLength));
|
|
91
|
+
recording.mixedAudio.setMicrophoneMuted(true); // Affects the mix only.
|
|
89
92
|
```
|
|
90
93
|
|
|
91
|
-
|
|
94
|
+
- Mixed audio is a standard byte stream: it can also be piped to a writable.
|
|
95
|
+
- Raw tracks remain available alongside the mix.
|
|
96
|
+
|
|
97
|
+
## Controls and events
|
|
98
|
+
|
|
99
|
+
| Action | API |
|
|
100
|
+
| ------------------------- | -------------------------------------------------------------- |
|
|
101
|
+
| Pause / resume | `recording.pauseRecording()` / `recording.resumeRecording()` |
|
|
102
|
+
| Stop | `await recording.stopRecording()`; safe to call more than once |
|
|
103
|
+
| Check recording state | `recording.state` |
|
|
104
|
+
| Check source availability | `track.availability` |
|
|
105
|
+
| Cancel start or recording | Pass an `AbortSignal` as `CaptureOptions.signal` |
|
|
106
|
+
|
|
107
|
+
- **Pause:** affects the whole recording; paused time is omitted.
|
|
108
|
+
- **Stop:** keep reading each output until `end` to drain queued audio.
|
|
109
|
+
- **Source loss:** the session stays alive. Track availability is `live`, `degraded`, or `interrupted`.
|
|
110
|
+
- **App exit:** system audio stops when all captured apps exit; the microphone and session stay alive. Start a new session for a relaunched app.
|
|
111
|
+
|
|
112
|
+
Attach source-event listeners immediately after awaiting `capture.start()`:
|
|
113
|
+
|
|
114
|
+
```ts
|
|
115
|
+
recording.systemAudio.on("interrupted", (reason, message) => console.log(reason, message));
|
|
116
|
+
recording.systemAudio.on("degraded", (reason, message) => console.log(reason, message));
|
|
117
|
+
recording.systemAudio.on("resumed", () => console.log("System audio resumed"));
|
|
118
|
+
recording.microphone?.on("devicechange", (name) => console.log("Microphone:", name));
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Meetings
|
|
122
|
+
|
|
123
|
+
```ts
|
|
124
|
+
import { meetings } from "meeting-record";
|
|
125
|
+
|
|
126
|
+
const active = (await meetings.scan()).filter((meeting) => meeting.shouldRecord);
|
|
127
|
+
|
|
128
|
+
meetings.on("started", (meeting) => console.log("Started:", meeting));
|
|
129
|
+
meetings.on("updated", (meeting) => console.log("Updated:", meeting));
|
|
130
|
+
meetings.on("ended", (meeting) => console.log("Ended:", meeting));
|
|
131
|
+
meetings.watch();
|
|
132
|
+
|
|
133
|
+
// Later: meetings.unwatch();
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
- Use `shouldRecord` to decide whether a meeting is ready to record.
|
|
137
|
+
- Request `Permission.Accessibility` on macOS for titles and URLs; relaunch after granting it.
|
|
138
|
+
- See [supported services and detection behavior](https://github.com/hoangvvo/meeting-record#detection).
|
|
139
|
+
|
|
140
|
+
## Types and errors
|
|
92
141
|
|
|
93
|
-
|
|
142
|
+
- **Constants:** `Platform`, `Permission`, `PermissionStatus`, `MicrophoneSource`, `CaptureState`, `TrackAvailability`, and `TrackInterruptionReason` have matching union types.
|
|
143
|
+
- **Events:** names and callback arguments are checked by TypeScript, including chained `on`, `once`, and `off` calls.
|
|
144
|
+
- **Library failures:** capture, permissions, and enumeration use `MeetingRecordError` subclasses, with a numeric `code`.
|
|
145
|
+
- **Invalid arguments:** throw `TypeError`.
|
|
146
|
+
- **Cancellation:** aborting rejects pending work with the signal's reason and stops an active recording.
|
|
94
147
|
|
|
95
148
|
## License
|
|
96
149
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,30 +1,49 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* meeting-record — system-audio and microphone capture with meeting detection.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the native addon so callers never see helper-process pids, status codes,
|
|
5
|
-
* or the realtime callback. The addon itself is not re-exported.
|
|
6
|
-
*/
|
|
1
|
+
/** System-audio and microphone capture with meeting detection. */
|
|
7
2
|
import { EventEmitter } from "node:events";
|
|
8
|
-
import { Readable } from "node:stream";
|
|
9
3
|
import { type MixedAudio, type MixedAudioOptions } from "./mixed-audio.js";
|
|
10
|
-
|
|
11
|
-
export type
|
|
12
|
-
export
|
|
4
|
+
import type { EmitterEvents, ReadableEvents, TypedReadable } from "./typed-readable.js";
|
|
5
|
+
export type { MixedAudio, MixedAudioEvents, MixedAudioOptions } from "./mixed-audio.js";
|
|
6
|
+
export declare const Permission: {
|
|
7
|
+
readonly SystemAudio: "system-audio";
|
|
8
|
+
readonly Microphone: "microphone";
|
|
9
|
+
readonly Accessibility: "accessibility";
|
|
10
|
+
};
|
|
11
|
+
export type Permission = (typeof Permission)[keyof typeof Permission];
|
|
13
12
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
13
|
+
* Windows has no prompts: system audio and accessibility are always granted, and
|
|
14
|
+
* the microphone follows its privacy settings.
|
|
16
15
|
*/
|
|
17
|
-
export
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
export declare const PermissionStatus: {
|
|
17
|
+
readonly Granted: "granted";
|
|
18
|
+
readonly Denied: "denied";
|
|
19
|
+
readonly Unknown: "unknown";
|
|
20
|
+
};
|
|
21
|
+
export type PermissionStatus = (typeof PermissionStatus)[keyof typeof PermissionStatus];
|
|
22
|
+
/** Stable platform identifier. */
|
|
23
|
+
export declare const Platform: {
|
|
24
|
+
readonly Zoom: "zoom";
|
|
25
|
+
readonly Teams: "teams";
|
|
26
|
+
readonly Meet: "meet";
|
|
27
|
+
readonly Webex: "webex";
|
|
28
|
+
readonly Slack: "slack";
|
|
29
|
+
readonly Discord: "discord";
|
|
30
|
+
/** A browser tab on a recognised call URL. */
|
|
31
|
+
readonly Browser: "browser";
|
|
32
|
+
readonly Unknown: "unknown";
|
|
33
|
+
};
|
|
34
|
+
export type Platform = (typeof Platform)[keyof typeof Platform];
|
|
35
|
+
export type MeetingEvent = "started" | "updated" | "ended";
|
|
20
36
|
export interface Meeting {
|
|
21
37
|
readonly platform: Platform;
|
|
22
38
|
/** The visible app. Use it in `CaptureTarget` when starting capture. */
|
|
23
39
|
readonly pid: number;
|
|
24
40
|
readonly appName: string;
|
|
25
|
-
/** Requires the accessibility permission; empty string otherwise. */
|
|
41
|
+
/** Window or tab title. Requires the accessibility permission on macOS; empty string otherwise. */
|
|
26
42
|
readonly title: string;
|
|
27
|
-
/**
|
|
43
|
+
/**
|
|
44
|
+
* The active tab's address for browser meetings. Requires the accessibility permission on
|
|
45
|
+
* macOS; empty string otherwise, or when the call is in a background tab.
|
|
46
|
+
*/
|
|
28
47
|
readonly url: string;
|
|
29
48
|
readonly isUsingMic: boolean;
|
|
30
49
|
readonly isPlayingAudio: boolean;
|
|
@@ -44,14 +63,20 @@ export type CaptureTarget = {
|
|
|
44
63
|
type: "process";
|
|
45
64
|
pid: number;
|
|
46
65
|
} | {
|
|
47
|
-
/** All application output. */
|
|
66
|
+
/** All application output except the recorder's process tree. */
|
|
48
67
|
type: "system";
|
|
49
68
|
};
|
|
50
|
-
export
|
|
69
|
+
export declare const MicrophoneSource: {
|
|
70
|
+
/** Follow the OS default input device. */
|
|
71
|
+
readonly Default: "default";
|
|
72
|
+
/** Prefer the captured app's mic on Windows, then its communications default. Use the OS default on macOS. */
|
|
73
|
+
readonly Auto: "auto";
|
|
74
|
+
};
|
|
75
|
+
export type MicrophoneSource = (typeof MicrophoneSource)[keyof typeof MicrophoneSource];
|
|
51
76
|
export interface CaptureOptions {
|
|
52
|
-
/** Mono mixdown for system audio. Default true. */
|
|
77
|
+
/** Mono mixdown for system audio only; the microphone keeps its format. Default true. */
|
|
53
78
|
mono?: boolean;
|
|
54
|
-
/** Capture
|
|
79
|
+
/** Capture a microphone as a separate track. Default off. */
|
|
55
80
|
microphone?: MicrophoneSource;
|
|
56
81
|
/** Additional mono s16le output, aligned and resampled to the requested rate. */
|
|
57
82
|
mix?: MixedAudioOptions;
|
|
@@ -85,14 +110,16 @@ export declare const permissions: {
|
|
|
85
110
|
signal?: AbortSignal;
|
|
86
111
|
}): Promise<PermissionStatus>;
|
|
87
112
|
};
|
|
88
|
-
export interface MeetingEvents {
|
|
113
|
+
export interface MeetingEvents extends EmitterEvents {
|
|
89
114
|
started: (meeting: Meeting) => void;
|
|
90
115
|
updated: (meeting: Meeting) => void;
|
|
91
116
|
ended: (meeting: Meeting) => void;
|
|
92
117
|
}
|
|
93
|
-
declare class Meetings extends EventEmitter
|
|
118
|
+
declare class Meetings extends EventEmitter<{
|
|
119
|
+
[Event in keyof MeetingEvents]: Parameters<MeetingEvents[Event]>;
|
|
120
|
+
}> {
|
|
94
121
|
/** Point-in-time scan, highest confidence first. */
|
|
95
|
-
scan(): Meeting[]
|
|
122
|
+
scan(): Promise<Meeting[]>;
|
|
96
123
|
/** Begin emitting `started` / `updated` / `ended`. */
|
|
97
124
|
watch(): void;
|
|
98
125
|
unwatch(): void;
|
|
@@ -105,69 +132,83 @@ declare class Meetings extends EventEmitter {
|
|
|
105
132
|
*/
|
|
106
133
|
audioApps(): AudioProcess[];
|
|
107
134
|
}
|
|
108
|
-
export declare const meetings: Meetings
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
135
|
+
export declare const meetings: Meetings;
|
|
136
|
+
export declare const CaptureState: {
|
|
137
|
+
readonly Recording: "recording";
|
|
138
|
+
readonly Paused: "paused";
|
|
139
|
+
readonly Stopped: "stopped";
|
|
112
140
|
};
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
141
|
+
export type CaptureState = (typeof CaptureState)[keyof typeof CaptureState];
|
|
142
|
+
/** Reason for source loss. */
|
|
143
|
+
export declare const TrackInterruptionReason: {
|
|
144
|
+
readonly DeviceRemoved: "device-removed";
|
|
145
|
+
readonly DeviceChanged: "device-changed";
|
|
146
|
+
readonly FormatChanged: "format-changed";
|
|
147
|
+
readonly AppExited: "app-exited";
|
|
148
|
+
readonly ServiceReset: "service-reset";
|
|
149
|
+
readonly Unknown: "unknown";
|
|
150
|
+
};
|
|
151
|
+
export type TrackInterruptionReason = (typeof TrackInterruptionReason)[keyof typeof TrackInterruptionReason];
|
|
121
152
|
export interface AudioFormat {
|
|
122
153
|
readonly sampleRate: number;
|
|
123
154
|
readonly channels: number;
|
|
124
155
|
}
|
|
125
|
-
/**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
* system and microphone tracks, so callers can align or echo-cancel them without
|
|
130
|
-
* relying on callback arrival order.
|
|
131
|
-
*/
|
|
132
|
-
export interface AudioChunk extends Buffer {
|
|
156
|
+
/** PCM packet timed on a monotonic clock shared by both tracks. */
|
|
157
|
+
export interface AudioChunk {
|
|
158
|
+
/** Interleaved float32 PCM. Packet boundaries and metadata survive iteration. */
|
|
159
|
+
readonly pcm: Buffer;
|
|
133
160
|
readonly hostTimeNs: bigint;
|
|
134
161
|
readonly frameCount: number;
|
|
135
162
|
readonly sampleRate: number;
|
|
136
163
|
readonly channels: number;
|
|
137
164
|
readonly droppedSamples: number;
|
|
138
165
|
}
|
|
139
|
-
export
|
|
166
|
+
export declare const TrackAvailability: {
|
|
167
|
+
readonly Live: "live";
|
|
168
|
+
readonly Degraded: "degraded";
|
|
169
|
+
readonly Interrupted: "interrupted";
|
|
170
|
+
};
|
|
171
|
+
export type TrackAvailability = (typeof TrackAvailability)[keyof typeof TrackAvailability];
|
|
172
|
+
export interface AudioTrackEvents extends ReadableEvents<AudioChunk> {
|
|
173
|
+
drop: (droppedSamples: number) => void;
|
|
174
|
+
/** Emitted before the first chunk in a newly negotiated device format. */
|
|
175
|
+
format: (format: AudioFormat) => void;
|
|
176
|
+
/** No source is available. Lost devices are retried; exited apps require a new target. */
|
|
177
|
+
interrupted: (reason: TrackInterruptionReason, message: string) => void;
|
|
178
|
+
resumed: () => void;
|
|
179
|
+
/** Some sources are lost; remaining sources continue delivering audio. */
|
|
180
|
+
degraded: (reason: TrackInterruptionReason, message: string) => void;
|
|
181
|
+
/** The microphone moved to another device. */
|
|
182
|
+
devicechange: (deviceName: string) => void;
|
|
183
|
+
}
|
|
184
|
+
/** Interleaved float32 PCM. Slow consumers lose samples, reported by `drop`. */
|
|
185
|
+
export interface AudioTrack extends TypedReadable<AudioTrackEvents> {
|
|
186
|
+
readonly availability: TrackAvailability;
|
|
187
|
+
[Symbol.asyncIterator](): NodeJS.AsyncIterator<AudioChunk>;
|
|
140
188
|
/** Current negotiated format; a `format` event announces changes. */
|
|
141
189
|
readonly sampleRate: number;
|
|
142
190
|
readonly channels: number;
|
|
143
191
|
/** Interleaved samples discarded because the bounded queue could not accept them. */
|
|
144
192
|
readonly droppedSamples: number;
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
|
|
149
|
-
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
193
|
+
/** True when none of this track's sources are available. */
|
|
194
|
+
readonly interrupted: boolean;
|
|
195
|
+
/** The microphone in use; undefined for system audio. */
|
|
196
|
+
readonly deviceName?: string;
|
|
150
197
|
}
|
|
151
|
-
|
|
198
|
+
/** A lost source interrupts its track; the session records until stopped. */
|
|
199
|
+
export interface CaptureSession {
|
|
152
200
|
readonly systemAudio: AudioTrack;
|
|
153
201
|
readonly microphone?: AudioTrack;
|
|
154
202
|
readonly mixedAudio?: MixedAudio;
|
|
155
203
|
readonly state: CaptureState;
|
|
156
|
-
/** Native device health; independent of pause/resume state. */
|
|
157
|
-
readonly health: CaptureHealth;
|
|
158
|
-
/** Set when automatic recovery exhausts its retries. */
|
|
159
|
-
readonly failure?: CaptureError;
|
|
160
204
|
pauseRecording(): void;
|
|
161
205
|
resumeRecording(): void;
|
|
162
206
|
stopRecording(): Promise<void>;
|
|
163
|
-
on(event: "interrupted", listener: () => void): this;
|
|
164
|
-
on(event: "recovered", listener: () => void): this;
|
|
165
|
-
on(event: "failed", listener: (error: CaptureError) => void): this;
|
|
166
|
-
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
167
207
|
}
|
|
168
208
|
export interface MixedCaptureSession extends CaptureSession {
|
|
169
209
|
readonly mixedAudio: MixedAudio;
|
|
170
210
|
}
|
|
211
|
+
/** Attach source-event listeners immediately after awaiting start; startup notifications are delivered on the next turn. */
|
|
171
212
|
declare function startCapture(target: CaptureTarget, options: CaptureOptions & {
|
|
172
213
|
mix: MixedAudioOptions;
|
|
173
214
|
}): Promise<MixedCaptureSession>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,42 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* meeting-record — system-audio and microphone capture with meeting detection.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the native addon so callers never see helper-process pids, status codes,
|
|
5
|
-
* or the realtime callback. The addon itself is not re-exported.
|
|
6
|
-
*/
|
|
1
|
+
/** System-audio and microphone capture with meeting detection. */
|
|
7
2
|
import { EventEmitter } from "node:events";
|
|
8
3
|
import { Readable } from "node:stream";
|
|
9
4
|
import { setTimeout as delay } from "node:timers/promises";
|
|
10
5
|
import { createRequire } from "node:module";
|
|
11
6
|
import { fileURLToPath } from "node:url";
|
|
12
7
|
import { MixedAudioImpl } from "./mixed-audio.js";
|
|
8
|
+
export const Permission = {
|
|
9
|
+
SystemAudio: "system-audio",
|
|
10
|
+
Microphone: "microphone",
|
|
11
|
+
Accessibility: "accessibility",
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Windows has no prompts: system audio and accessibility are always granted, and
|
|
15
|
+
* the microphone follows its privacy settings.
|
|
16
|
+
*/
|
|
17
|
+
export const PermissionStatus = {
|
|
18
|
+
Granted: "granted",
|
|
19
|
+
Denied: "denied",
|
|
20
|
+
Unknown: "unknown",
|
|
21
|
+
};
|
|
22
|
+
/** Stable platform identifier. */
|
|
23
|
+
export const Platform = {
|
|
24
|
+
Zoom: "zoom",
|
|
25
|
+
Teams: "teams",
|
|
26
|
+
Meet: "meet",
|
|
27
|
+
Webex: "webex",
|
|
28
|
+
Slack: "slack",
|
|
29
|
+
Discord: "discord",
|
|
30
|
+
/** A browser tab on a recognised call URL. */
|
|
31
|
+
Browser: "browser",
|
|
32
|
+
Unknown: "unknown",
|
|
33
|
+
};
|
|
34
|
+
export const MicrophoneSource = {
|
|
35
|
+
/** Follow the OS default input device. */
|
|
36
|
+
Default: "default",
|
|
37
|
+
/** Prefer the captured app's mic on Windows, then its communications default. Use the OS default on macOS. */
|
|
38
|
+
Auto: "auto",
|
|
39
|
+
};
|
|
13
40
|
export class MeetingRecordError extends Error {
|
|
14
41
|
code;
|
|
15
42
|
constructor(message, code) {
|
|
@@ -69,15 +96,15 @@ function asLibraryError(error) {
|
|
|
69
96
|
}
|
|
70
97
|
export const permissions = {
|
|
71
98
|
status(permission) {
|
|
72
|
-
if (permission !==
|
|
73
|
-
permission !==
|
|
74
|
-
permission !==
|
|
99
|
+
if (permission !== Permission.SystemAudio &&
|
|
100
|
+
permission !== Permission.Microphone &&
|
|
101
|
+
permission !== Permission.Accessibility) {
|
|
75
102
|
throw new TypeError(`unknown permission: ${String(permission)}`);
|
|
76
103
|
}
|
|
77
104
|
const native = getNative();
|
|
78
|
-
if (permission ===
|
|
105
|
+
if (permission === Permission.Accessibility)
|
|
79
106
|
return native.accessibilityPermissionStatus();
|
|
80
|
-
if (permission ===
|
|
107
|
+
if (permission === Permission.Microphone)
|
|
81
108
|
return native.microphonePermissionStatus();
|
|
82
109
|
return native.audioPermissionStatus();
|
|
83
110
|
},
|
|
@@ -90,16 +117,16 @@ export const permissions = {
|
|
|
90
117
|
async request(permission, { timeoutMs = 120_000, signal } = {}) {
|
|
91
118
|
signal?.throwIfAborted();
|
|
92
119
|
const current = permissions.status(permission);
|
|
93
|
-
if (current ===
|
|
120
|
+
if (current === PermissionStatus.Granted)
|
|
94
121
|
return current;
|
|
95
122
|
const native = getNative();
|
|
96
|
-
if (permission ===
|
|
123
|
+
if (permission === Permission.Accessibility) {
|
|
97
124
|
const status = native.requestAccessibilityPermission();
|
|
98
125
|
if (status !== 0)
|
|
99
126
|
throw errorFromStatus("failed to request accessibility permission", status);
|
|
100
127
|
return permissions.status(permission);
|
|
101
128
|
}
|
|
102
|
-
const requestStatus = permission ===
|
|
129
|
+
const requestStatus = permission === Permission.Microphone
|
|
103
130
|
? native.requestMicrophonePermission()
|
|
104
131
|
: native.requestAudioPermission();
|
|
105
132
|
if (requestStatus !== 0) {
|
|
@@ -110,27 +137,29 @@ export const permissions = {
|
|
|
110
137
|
while (Date.now() < deadline) {
|
|
111
138
|
await delay(500, undefined, { signal });
|
|
112
139
|
const status = permissions.status(permission);
|
|
113
|
-
if (status ===
|
|
140
|
+
if (status === PermissionStatus.Granted || status === PermissionStatus.Denied)
|
|
114
141
|
return status;
|
|
115
142
|
}
|
|
116
143
|
return permissions.status(permission);
|
|
117
144
|
},
|
|
118
145
|
};
|
|
119
|
-
function toMeeting(raw) {
|
|
120
|
-
return raw;
|
|
121
|
-
}
|
|
122
146
|
class Meetings extends EventEmitter {
|
|
123
147
|
/** Point-in-time scan, highest confidence first. */
|
|
124
|
-
scan() {
|
|
125
|
-
|
|
148
|
+
async scan() {
|
|
149
|
+
try {
|
|
150
|
+
return await getNative().scan();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
throw asLibraryError(error);
|
|
154
|
+
}
|
|
126
155
|
}
|
|
127
156
|
/** Begin emitting `started` / `updated` / `ended`. */
|
|
128
157
|
watch() {
|
|
129
158
|
const native = getNative();
|
|
130
159
|
if (native.isWatching())
|
|
131
160
|
return;
|
|
132
|
-
const status = native.watchStart((event,
|
|
133
|
-
this.emit(event,
|
|
161
|
+
const status = native.watchStart((event, meeting) => {
|
|
162
|
+
this.emit(event, meeting);
|
|
134
163
|
});
|
|
135
164
|
if (status !== 0)
|
|
136
165
|
throw errorFromStatus("failed to start watching", status);
|
|
@@ -145,17 +174,46 @@ class Meetings extends EventEmitter {
|
|
|
145
174
|
}
|
|
146
175
|
/** Every process doing audio IO. */
|
|
147
176
|
audioProcesses() {
|
|
148
|
-
|
|
177
|
+
try {
|
|
178
|
+
return getNative().listAudioProcesses();
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
throw asLibraryError(error);
|
|
182
|
+
}
|
|
149
183
|
}
|
|
150
184
|
/**
|
|
151
185
|
* Applications doing audio IO, grouped by owning PID, including helpers.
|
|
152
186
|
* Pass `pid` as a process target; no meeting scan or Accessibility grant is needed.
|
|
153
187
|
*/
|
|
154
188
|
audioApps() {
|
|
155
|
-
|
|
189
|
+
try {
|
|
190
|
+
return getNative().listAudioApps();
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
throw asLibraryError(error);
|
|
194
|
+
}
|
|
156
195
|
}
|
|
157
196
|
}
|
|
158
197
|
export const meetings = new Meetings();
|
|
198
|
+
export const CaptureState = {
|
|
199
|
+
Recording: "recording",
|
|
200
|
+
Paused: "paused",
|
|
201
|
+
Stopped: "stopped",
|
|
202
|
+
};
|
|
203
|
+
/** Reason for source loss. */
|
|
204
|
+
export const TrackInterruptionReason = {
|
|
205
|
+
DeviceRemoved: "device-removed",
|
|
206
|
+
DeviceChanged: "device-changed",
|
|
207
|
+
FormatChanged: "format-changed",
|
|
208
|
+
AppExited: "app-exited",
|
|
209
|
+
ServiceReset: "service-reset",
|
|
210
|
+
Unknown: "unknown",
|
|
211
|
+
};
|
|
212
|
+
export const TrackAvailability = {
|
|
213
|
+
Live: "live",
|
|
214
|
+
Degraded: "degraded",
|
|
215
|
+
Interrupted: "interrupted",
|
|
216
|
+
};
|
|
159
217
|
class AudioTrackImpl extends Readable {
|
|
160
218
|
#sampleRate;
|
|
161
219
|
#channels;
|
|
@@ -165,11 +223,14 @@ class AudioTrackImpl extends Readable {
|
|
|
165
223
|
#mixReady = true;
|
|
166
224
|
#mixConsumer;
|
|
167
225
|
#finished = false;
|
|
168
|
-
|
|
169
|
-
|
|
226
|
+
#availability = TrackAvailability.Live;
|
|
227
|
+
#deviceName;
|
|
228
|
+
constructor(sampleRate, channels, microphone, deviceName) {
|
|
229
|
+
super({ objectMode: true, highWaterMark: 32 });
|
|
170
230
|
this.#sampleRate = sampleRate;
|
|
171
231
|
this.#channels = channels;
|
|
172
232
|
this.#microphone = microphone;
|
|
233
|
+
this.#deviceName = deviceName;
|
|
173
234
|
}
|
|
174
235
|
/** Required by Readable; data arrives from the native side, not on demand. */
|
|
175
236
|
_read() {
|
|
@@ -195,6 +256,18 @@ class AudioTrackImpl extends Readable {
|
|
|
195
256
|
get droppedSamples() {
|
|
196
257
|
return this.#droppedSamples;
|
|
197
258
|
}
|
|
259
|
+
get availability() {
|
|
260
|
+
return this.#availability;
|
|
261
|
+
}
|
|
262
|
+
[Symbol.asyncIterator]() {
|
|
263
|
+
return super[Symbol.asyncIterator]();
|
|
264
|
+
}
|
|
265
|
+
get interrupted() {
|
|
266
|
+
return this.#availability === TrackAvailability.Interrupted;
|
|
267
|
+
}
|
|
268
|
+
get deviceName() {
|
|
269
|
+
return this.#deviceName;
|
|
270
|
+
}
|
|
198
271
|
pushAudio(chunk, info) {
|
|
199
272
|
if (info.dropped > 0) {
|
|
200
273
|
this.#droppedSamples += info.dropped;
|
|
@@ -205,19 +278,40 @@ class AudioTrackImpl extends Readable {
|
|
|
205
278
|
this.#channels = info.channels;
|
|
206
279
|
this.emit("format", { sampleRate: info.sampleRate, channels: info.channels });
|
|
207
280
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
281
|
+
const packet = {
|
|
282
|
+
pcm: chunk,
|
|
283
|
+
hostTimeNs: info.hostTimeNs,
|
|
284
|
+
frameCount: info.frameCount,
|
|
285
|
+
sampleRate: info.sampleRate,
|
|
286
|
+
channels: info.channels,
|
|
287
|
+
droppedSamples: info.dropped,
|
|
288
|
+
};
|
|
289
|
+
this.#mixConsumer?.(packet);
|
|
290
|
+
if (!this.push(packet) && this.#consumerReady) {
|
|
217
291
|
this.#consumerReady = false;
|
|
218
292
|
getNative().captureSetConsumerReady(this.#microphone, false);
|
|
219
293
|
}
|
|
220
294
|
}
|
|
295
|
+
pushEvent(event) {
|
|
296
|
+
if (this.#finished)
|
|
297
|
+
return;
|
|
298
|
+
if (event.type === "interrupted") {
|
|
299
|
+
this.#availability = TrackAvailability.Interrupted;
|
|
300
|
+
this.emit("interrupted", event.reason, event.message);
|
|
301
|
+
}
|
|
302
|
+
else if (event.type === "resumed") {
|
|
303
|
+
this.#availability = TrackAvailability.Live;
|
|
304
|
+
this.emit("resumed");
|
|
305
|
+
}
|
|
306
|
+
else if (event.type === "degraded") {
|
|
307
|
+
this.#availability = TrackAvailability.Degraded;
|
|
308
|
+
this.emit("degraded", event.reason, event.message);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
this.#deviceName = event.deviceName;
|
|
312
|
+
this.emit("devicechange", event.deviceName);
|
|
313
|
+
}
|
|
314
|
+
}
|
|
221
315
|
finish() {
|
|
222
316
|
if (this.#finished)
|
|
223
317
|
return;
|
|
@@ -225,11 +319,9 @@ class AudioTrackImpl extends Readable {
|
|
|
225
319
|
this.push(null);
|
|
226
320
|
}
|
|
227
321
|
}
|
|
228
|
-
class CaptureSessionImpl
|
|
229
|
-
#state =
|
|
230
|
-
#
|
|
231
|
-
#failure;
|
|
232
|
-
#healthTimer;
|
|
322
|
+
class CaptureSessionImpl {
|
|
323
|
+
#state = CaptureState.Recording;
|
|
324
|
+
#stopping;
|
|
233
325
|
#systemAudio;
|
|
234
326
|
#microphone;
|
|
235
327
|
mixedAudio;
|
|
@@ -238,14 +330,11 @@ class CaptureSessionImpl extends EventEmitter {
|
|
|
238
330
|
void this.stopRecording();
|
|
239
331
|
};
|
|
240
332
|
constructor(systemAudio, microphone, mix, signal) {
|
|
241
|
-
super();
|
|
242
333
|
this.#systemAudio = systemAudio;
|
|
243
334
|
this.#microphone = microphone;
|
|
244
335
|
this.#signal = signal;
|
|
245
336
|
signal?.addEventListener("abort", this.#onAbort, { once: true });
|
|
246
337
|
this.mixedAudio = mix ? new MixedAudioImpl(mix.sampleRate, systemAudio, microphone) : undefined;
|
|
247
|
-
this.#healthTimer = setInterval(() => this.#pollHealth(), 250);
|
|
248
|
-
this.#healthTimer.unref();
|
|
249
338
|
}
|
|
250
339
|
get systemAudio() {
|
|
251
340
|
return this.#systemAudio;
|
|
@@ -256,68 +345,42 @@ class CaptureSessionImpl extends EventEmitter {
|
|
|
256
345
|
get state() {
|
|
257
346
|
return this.#state;
|
|
258
347
|
}
|
|
259
|
-
get health() {
|
|
260
|
-
return this.#health;
|
|
261
|
-
}
|
|
262
|
-
get failure() {
|
|
263
|
-
return this.#failure;
|
|
264
|
-
}
|
|
265
348
|
pauseRecording() {
|
|
266
|
-
if (this.#state ===
|
|
349
|
+
if (this.#state === CaptureState.Stopped || this.#stopping)
|
|
267
350
|
return;
|
|
268
|
-
if (this.#state !==
|
|
351
|
+
if (this.#state !== CaptureState.Paused) {
|
|
269
352
|
getNative().capturePause();
|
|
270
|
-
this.#state =
|
|
353
|
+
this.#state = CaptureState.Paused;
|
|
271
354
|
this.mixedAudio?.pauseCapture();
|
|
272
355
|
}
|
|
273
356
|
}
|
|
274
357
|
resumeRecording() {
|
|
275
|
-
if (this.#state ===
|
|
358
|
+
if (this.#state === CaptureState.Stopped || this.#stopping)
|
|
276
359
|
return;
|
|
277
|
-
if (this.#state !==
|
|
360
|
+
if (this.#state !== CaptureState.Recording) {
|
|
278
361
|
this.mixedAudio?.resumeCapture();
|
|
279
362
|
getNative().captureResume();
|
|
280
|
-
this.#state =
|
|
363
|
+
this.#state = CaptureState.Recording;
|
|
281
364
|
}
|
|
282
365
|
}
|
|
283
|
-
|
|
284
|
-
if (this.#
|
|
285
|
-
return;
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
this.#
|
|
289
|
-
this.#
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
this.#systemAudio.finish();
|
|
295
|
-
this.#microphone?.finish();
|
|
296
|
-
this.mixedAudio?.finishCapture();
|
|
297
|
-
}
|
|
298
|
-
#pollHealth() {
|
|
299
|
-
if (this.#state === "stopped")
|
|
300
|
-
return;
|
|
301
|
-
const native = getNative();
|
|
302
|
-
const health = native.captureHealthStatus();
|
|
303
|
-
if (health === this.#health)
|
|
304
|
-
return;
|
|
305
|
-
const previous = this.#health;
|
|
306
|
-
this.#health = health;
|
|
307
|
-
if (health === "recovering") {
|
|
308
|
-
this.emit("interrupted");
|
|
366
|
+
stopRecording() {
|
|
367
|
+
if (this.#stopping)
|
|
368
|
+
return this.#stopping;
|
|
369
|
+
if (this.#state === CaptureState.Stopped)
|
|
370
|
+
return Promise.resolve();
|
|
371
|
+
this.#stopping = this.#stop();
|
|
372
|
+
return this.#stopping;
|
|
373
|
+
}
|
|
374
|
+
async #stop() {
|
|
375
|
+
try {
|
|
376
|
+
await getNative().captureStop();
|
|
309
377
|
}
|
|
310
|
-
|
|
311
|
-
this.
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
this
|
|
316
|
-
clearInterval(this.#healthTimer);
|
|
317
|
-
native.captureStop();
|
|
318
|
-
this.#state = "stopped";
|
|
319
|
-
this.#finishTracks();
|
|
320
|
-
this.emit("failed", failure);
|
|
378
|
+
finally {
|
|
379
|
+
this.#state = CaptureState.Stopped;
|
|
380
|
+
this.#signal?.removeEventListener("abort", this.#onAbort);
|
|
381
|
+
this.#systemAudio.finish();
|
|
382
|
+
this.#microphone?.finish();
|
|
383
|
+
this.mixedAudio?.finishCapture();
|
|
321
384
|
}
|
|
322
385
|
}
|
|
323
386
|
}
|
|
@@ -326,8 +389,8 @@ async function startCapture(target, options = {}) {
|
|
|
326
389
|
options.signal?.throwIfAborted();
|
|
327
390
|
let nativeTarget;
|
|
328
391
|
if (target.type === "process") {
|
|
329
|
-
if (!Number.isInteger(target.pid) || target.pid <= 0) {
|
|
330
|
-
throw new TypeError("process pid must be
|
|
392
|
+
if (!Number.isInteger(target.pid) || target.pid <= 0 || target.pid > 0x7fffffff) {
|
|
393
|
+
throw new TypeError("process pid must be an integer from 1 through 2147483647");
|
|
331
394
|
}
|
|
332
395
|
nativeTarget = { pid: target.pid };
|
|
333
396
|
}
|
|
@@ -340,8 +403,10 @@ async function startCapture(target, options = {}) {
|
|
|
340
403
|
if (options.mono !== undefined && typeof options.mono !== "boolean") {
|
|
341
404
|
throw new TypeError("mono must be a boolean");
|
|
342
405
|
}
|
|
343
|
-
if (options.microphone !== undefined &&
|
|
344
|
-
|
|
406
|
+
if (options.microphone !== undefined &&
|
|
407
|
+
options.microphone !== MicrophoneSource.Default &&
|
|
408
|
+
options.microphone !== MicrophoneSource.Auto) {
|
|
409
|
+
throw new TypeError('microphone must be "default" or "auto"');
|
|
345
410
|
}
|
|
346
411
|
if (options.mix !== undefined &&
|
|
347
412
|
(!Number.isInteger(options.mix.sampleRate) || options.mix.sampleRate <= 0)) {
|
|
@@ -360,7 +425,7 @@ async function startCapture(target, options = {}) {
|
|
|
360
425
|
pending.push({ chunk, info });
|
|
361
426
|
return;
|
|
362
427
|
}
|
|
363
|
-
if (session.state !==
|
|
428
|
+
if (session.state !== CaptureState.Recording)
|
|
364
429
|
return;
|
|
365
430
|
session[track]?.pushAudio(chunk, info);
|
|
366
431
|
};
|
|
@@ -370,28 +435,50 @@ async function startCapture(target, options = {}) {
|
|
|
370
435
|
const onMicrophone = (chunk, info) => {
|
|
371
436
|
receive("microphone", pendingMicrophone, chunk, info);
|
|
372
437
|
};
|
|
438
|
+
const pendingEvents = [];
|
|
439
|
+
let eventsReady = false;
|
|
440
|
+
const onTrackEvent = (event) => {
|
|
441
|
+
if (!session || !eventsReady) {
|
|
442
|
+
pendingEvents.push(event);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
session[event.track]?.pushEvent(event);
|
|
446
|
+
};
|
|
373
447
|
try {
|
|
374
448
|
const formats = await native.captureStart({
|
|
375
449
|
...nativeTarget,
|
|
376
450
|
mono: options.mono ?? true,
|
|
377
|
-
microphone: options.microphone ===
|
|
378
|
-
|
|
451
|
+
microphone: options.microphone === MicrophoneSource.Auto
|
|
452
|
+
? 2
|
|
453
|
+
: options.microphone === MicrophoneSource.Default
|
|
454
|
+
? 1
|
|
455
|
+
: 0,
|
|
456
|
+
}, onSystemAudio, onMicrophone, onTrackEvent);
|
|
379
457
|
if (options.signal?.aborted) {
|
|
380
|
-
native.captureStop();
|
|
458
|
+
await native.captureStop();
|
|
381
459
|
options.signal.throwIfAborted();
|
|
382
460
|
}
|
|
383
461
|
const systemAudio = new AudioTrackImpl(formats.systemAudio.sampleRate, formats.systemAudio.channels, false);
|
|
384
462
|
const microphone = formats.microphone
|
|
385
|
-
? new AudioTrackImpl(formats.microphone.sampleRate, formats.microphone.channels, true)
|
|
463
|
+
? new AudioTrackImpl(formats.microphone.sampleRate, formats.microphone.channels, true, formats.microphone.deviceName || undefined)
|
|
386
464
|
: undefined;
|
|
387
|
-
|
|
465
|
+
const recording = new CaptureSessionImpl(systemAudio, microphone, options.mix, options.signal);
|
|
466
|
+
session = recording;
|
|
388
467
|
for (const { chunk, info } of pendingSystemAudio) {
|
|
389
468
|
systemAudio.pushAudio(chunk, info);
|
|
390
469
|
}
|
|
391
470
|
for (const { chunk, info } of pendingMicrophone) {
|
|
392
471
|
microphone?.pushAudio(chunk, info);
|
|
393
472
|
}
|
|
394
|
-
|
|
473
|
+
pendingSystemAudio.length = 0;
|
|
474
|
+
pendingMicrophone.length = 0;
|
|
475
|
+
setImmediate(() => {
|
|
476
|
+
for (const event of pendingEvents)
|
|
477
|
+
recording[event.track]?.pushEvent(event);
|
|
478
|
+
pendingEvents.length = 0;
|
|
479
|
+
eventsReady = true;
|
|
480
|
+
});
|
|
481
|
+
return recording;
|
|
395
482
|
}
|
|
396
483
|
catch (error) {
|
|
397
484
|
if (options.signal?.aborted)
|
|
@@ -405,7 +492,7 @@ async function startCapture(target, options = {}) {
|
|
|
405
492
|
export const capture = {
|
|
406
493
|
start: startCapture,
|
|
407
494
|
get running() {
|
|
408
|
-
return captureStarting || getNative().
|
|
495
|
+
return captureStarting || getNative().isRunning();
|
|
409
496
|
},
|
|
410
497
|
};
|
|
411
498
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mixed-audio.d.ts
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import { Readable } from "node:stream";
|
|
2
2
|
import type { AudioChunk } from "./index.js";
|
|
3
|
+
import type { ReadableEvents, TypedReadable } from "./typed-readable.js";
|
|
4
|
+
export interface MixedAudioEvents extends ReadableEvents<Buffer> {
|
|
5
|
+
level: (level: number) => void;
|
|
6
|
+
}
|
|
3
7
|
export interface MixedAudioOptions {
|
|
4
8
|
sampleRate: number;
|
|
5
9
|
}
|
|
6
10
|
/** Mono signed 16-bit little-endian PCM. Await `end` to consume the final tail. */
|
|
7
|
-
export interface MixedAudio extends
|
|
11
|
+
export interface MixedAudio extends TypedReadable<MixedAudioEvents> {
|
|
8
12
|
readonly sampleRate: number;
|
|
9
13
|
readonly channels: 1;
|
|
10
14
|
/** Affects the mixed output only; the raw microphone track stays available. */
|
|
11
15
|
setMicrophoneMuted(muted: boolean): void;
|
|
12
|
-
on(event: "level", listener: (level: number) => void): this;
|
|
13
|
-
on(event: "data", listener: (chunk: Buffer) => void): this;
|
|
14
|
-
on(event: string | symbol, listener: (...args: any[]) => void): this;
|
|
15
16
|
}
|
|
16
17
|
export interface MixSource {
|
|
17
18
|
setMixConsumer(consumer: ((chunk: AudioChunk) => void) | undefined): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixed-audio.d.ts","sourceRoot":"","sources":["../src/mixed-audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mixed-audio.d.ts","sourceRoot":"","sources":["../src/mixed-audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,MAAM,CAAC;IAC9D,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,mFAAmF;AACnF,MAAM,WAAW,UAAW,SAAQ,aAAa,CAAC,gBAAgB,CAAC;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrB,+EAA+E;IAC/E,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,SAAS;IACxB,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1E,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,MAAM,IAAI,OAAO,CAAC;CACnB;AAED,qBAAa,cAAe,SAAQ,QAAS,YAAW,UAAU;;IAChE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,KAAK;gBAaV,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,SAAS;IAcrE,KAAK,IAAI,IAAI;IAQb,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;IAWtF,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAIxC,YAAY,IAAI,IAAI;IAQpB,aAAa,IAAI,IAAI;IAOrB,aAAa,IAAI,IAAI;CAmEtB"}
|
package/dist/mixed-audio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixed-audio.js","sourceRoot":"","sources":["../src/mixed-audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"mixed-audio.js","sourceRoot":"","sources":["../src/mixed-audio.ts"],"names":[],"mappings":"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"}
|
package/dist/mono-resampler.js
CHANGED
|
@@ -90,7 +90,7 @@ export class MonoResampler {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
function downmix(chunk) {
|
|
93
|
-
const samples = new Float32Array(chunk.buffer, chunk.byteOffset, chunk.byteLength / Float32Array.BYTES_PER_ELEMENT);
|
|
93
|
+
const samples = new Float32Array(chunk.pcm.buffer, chunk.pcm.byteOffset, chunk.pcm.byteLength / Float32Array.BYTES_PER_ELEMENT);
|
|
94
94
|
const { channels } = chunk;
|
|
95
95
|
if (channels === 1) {
|
|
96
96
|
return samples;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mono-resampler.js","sourceRoot":"","sources":["../src/mono-resampler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mono-resampler.js","sourceRoot":"","sources":["../src/mono-resampler.ts"],"names":[],"mappings":"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"}
|
package/dist/pcm-mixer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcm-mixer.d.ts","sourceRoot":"","sources":["../src/pcm-mixer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,iFAAiF;AACjF,qBAAa,QAAQ;;gBAYP,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE;IAgB1D,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"pcm-mixer.d.ts","sourceRoot":"","sources":["../src/pcm-mixer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,iFAAiF;AACjF,qBAAa,QAAQ;;gBAYP,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE;IAgB1D,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAwC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAI9C,uEAAuE;IACvE,aAAa,IAAI,IAAI;IAOrB,4EAA4E;IAC5E,OAAO,IAAI,IAAI;IASf,IAAI,IAAI,MAAM,GAAG,IAAI;CAoCtB;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAO5C"}
|
package/dist/pcm-mixer.js
CHANGED
|
@@ -26,10 +26,17 @@ export class PcmMixer {
|
|
|
26
26
|
}
|
|
27
27
|
write(source, chunk) {
|
|
28
28
|
const input = this.#input(source);
|
|
29
|
-
const samples = input.resampler.resample(chunk);
|
|
30
29
|
this.#origin ??= chunk.hostTimeNs;
|
|
31
|
-
|
|
30
|
+
let position = this.#originFrame +
|
|
32
31
|
Math.round((Number(chunk.hostTimeNs - this.#origin) * this.#sampleRate) / 1e9);
|
|
32
|
+
// Skip gaps over a second when every source was absent.
|
|
33
|
+
if (position > this.#end + this.#sampleRate) {
|
|
34
|
+
this.finishSegment();
|
|
35
|
+
this.restart();
|
|
36
|
+
this.#origin = chunk.hostTimeNs;
|
|
37
|
+
position = this.#originFrame;
|
|
38
|
+
}
|
|
39
|
+
const samples = input.resampler.resample(chunk);
|
|
33
40
|
// Absorb up to 20 ms of callback-clock jitter at packet joins.
|
|
34
41
|
if (input.cursor === null || Math.abs(position - input.cursor) > this.#sampleRate / 50) {
|
|
35
42
|
input.cursor = position;
|
package/dist/pcm-mixer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pcm-mixer.js","sourceRoot":"","sources":["../src/pcm-mixer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAQpD,iFAAiF;AACjF,MAAM,OAAO,QAAQ;IACV,WAAW,CAAS;IACpB,YAAY,CAAS;IACrB,OAAO,CAA0B;IACjC,KAAK,CAAS;IACd,OAAO,GAAG,IAAI,GAAG,EAAwB,CAAC;IACnD,OAAO,GAAkB,IAAI,CAAC;IAC9B,YAAY,GAAG,CAAC,CAAC;IACjB,QAAQ,GAAG,CAAC,CAAC;IACb,IAAI,GAAG,CAAC,CAAC;IACT,UAAU,GAAG,CAAC,CAAC;IAEf,YAAY,UAAkB,EAAE,OAA0B;QACxD,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YACtB,MAAM;YACN;gBACE,SAAS,EAAE,IAAI,aAAa,CAAC,UAAU,CAAC;gBACxC,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,KAAK;aACb;SACF,CAAC,CACH,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAc,EAAE,KAAiB;QACrC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,
|
|
1
|
+
{"version":3,"file":"pcm-mixer.js","sourceRoot":"","sources":["../src/pcm-mixer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Readable } from "node:stream";
|
|
2
|
+
export interface EmitterEvents {
|
|
3
|
+
error: (error: Error) => void;
|
|
4
|
+
newListener: (event: string | symbol, listener: (...args: any[]) => void) => void;
|
|
5
|
+
removeListener: (event: string | symbol, listener: (...args: any[]) => void) => void;
|
|
6
|
+
}
|
|
7
|
+
export interface ReadableEvents<Chunk> extends EmitterEvents {
|
|
8
|
+
close: () => void;
|
|
9
|
+
data: (chunk: Chunk) => void;
|
|
10
|
+
end: () => void;
|
|
11
|
+
pause: () => void;
|
|
12
|
+
readable: () => void;
|
|
13
|
+
resume: () => void;
|
|
14
|
+
}
|
|
15
|
+
type Listener<Events, Event> = Event extends keyof Events ? Events[Event] : never;
|
|
16
|
+
/** Replace Readable's permissive listener overloads, including its aliases. */
|
|
17
|
+
export interface TypedReadable<Events extends {
|
|
18
|
+
[Event in keyof Events]: (...args: any[]) => void;
|
|
19
|
+
}> extends Readable {
|
|
20
|
+
on<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
21
|
+
once<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
22
|
+
off<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
23
|
+
addListener<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
24
|
+
removeListener<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
25
|
+
prependListener<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
26
|
+
prependOnceListener<Event extends string | symbol>(event: Event | keyof Events, listener: Listener<Events, Event>): this;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=typed-readable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-readable.d.ts","sourceRoot":"","sources":["../src/typed-readable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;IAClF,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAC;CACtF;AAED,MAAM,WAAW,cAAc,CAAC,KAAK,CAAE,SAAQ,aAAa;IAC1D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,IAAI,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,KAAK,QAAQ,CAAC,MAAM,EAAE,KAAK,IAAI,KAAK,SAAS,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAElF,+EAA+E;AAC/E,MAAM,WAAW,aAAa,CAC5B,MAAM,SAAS;KAAG,KAAK,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI;CAAE,CACpE,SAAQ,QAAQ;IAChB,EAAE,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC9B,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;IACR,IAAI,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAChC,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;IACR,GAAG,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC/B,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;IACR,WAAW,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EACvC,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;IACR,cAAc,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC1C,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;IACR,eAAe,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC3C,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;IACR,mBAAmB,CAAC,KAAK,SAAS,MAAM,GAAG,MAAM,EAC/C,KAAK,EAAE,KAAK,GAAG,MAAM,MAAM,EAC3B,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAChC,IAAI,CAAC;CACT"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-readable.js","sourceRoot":"","sources":["../src/typed-readable.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|