@aeonentertainment/mixer 0.2.0 → 0.3.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.
package/README.md CHANGED
@@ -15,7 +15,7 @@ Each [release](https://github.com/aeonentertainment/aeon-mixer/releases) carries
15
15
  Depend on its URL, and the lockfile pins its hash:
16
16
 
17
17
  ```bash
18
- npm install https://github.com/aeonentertainment/aeon-mixer/releases/download/v0.2.0/aeonentertainment-mixer-0.2.0.tgz
18
+ npm install https://github.com/aeonentertainment/aeon-mixer/releases/download/v0.3.0/aeonentertainment-mixer-0.3.0.tgz
19
19
  ```
20
20
 
21
21
  ## Use
@@ -51,7 +51,8 @@ await engine.close();
51
51
  - **Slots** are the mics: 8 per engine by default, up to 16 with `openEngine({ slots })`. `rtp`
52
52
  takes Opus over UDP from a phone or mediasoup, `l16` takes raw PCM over loopback from a house
53
53
  mic, and `push` takes PCM the host hands to `mixer.push`. Each slot has gain, pan, mute, solo,
54
- reverb, a pitch reading and a melody guide.
54
+ reverb, a pitch reading, a melody guide and pitch correction toward it, whose delay `stats()`
55
+ reports.
55
56
  - **The backing** is any format Symphonia decodes, resampled to 48 kHz. The armed key and speed
56
57
  are rendered before `start` resolves. Live, it supports seek, pause, resume, a key change and
57
58
  stem gains, and `start`, `seek` and `resume` report the position the lyric clock follows.
package/dist/index.d.mts CHANGED
@@ -72,7 +72,7 @@ declare class Mixer$1 {
72
72
  * recording it for null.
73
73
  */
74
74
  recordSlot(index: number, path?: string | undefined | null): void;
75
- /** Every slot's ingest counters, as the audio thread last published them. */
75
+ /** Every slot's ingest counters and corrector delay, as the audio thread last published them. */
76
76
  stats(): Array<SlotStatsInfo>;
77
77
  /** The return stream's counters, or null for a mixer without one. */
78
78
  returnStats(): RtpReturnStats | null;
@@ -198,6 +198,8 @@ interface SlotStatsInfo {
198
198
  concealed: number;
199
199
  resyncs: number;
200
200
  jitterMs: number;
201
+ correctorDelayMs: number;
202
+ correctorMaxDelayMs: number;
201
203
  }
202
204
  interface StemGainsInput {
203
205
  instrumental: number;
@@ -290,6 +292,13 @@ interface SlotStats {
290
292
  concealed: number;
291
293
  resyncs: number;
292
294
  jitterMs: number;
295
+ /**
296
+ * How far the corrector holds this slot's voice now; 0 with correction off. It moves with the
297
+ * voice and one read is a sample of it, so show it and never add it to a budget or a clock.
298
+ */
299
+ correctorDelayMs: number;
300
+ /** The most that delay can reach; 0 with correction off. It holds still, so a budget adds this. */
301
+ correctorMaxDelayMs: number;
293
302
  }
294
303
  type EngineEvents = {
295
304
  fault: (error: Error) => void;
@@ -85,7 +85,7 @@ export declare class Mixer {
85
85
  * recording it for null.
86
86
  */
87
87
  recordSlot(index: number, path?: string | undefined | null): void
88
- /** Every slot's ingest counters, as the audio thread last published them. */
88
+ /** Every slot's ingest counters and corrector delay, as the audio thread last published them. */
89
89
  stats(): Array<SlotStatsInfo>
90
90
  /** The return stream's counters, or null for a mixer without one. */
91
91
  returnStats(): RtpReturnStats | null
@@ -208,6 +208,8 @@ export interface SlotStatsInfo {
208
208
  concealed: number
209
209
  resyncs: number
210
210
  jitterMs: number
211
+ correctorDelayMs: number
212
+ correctorMaxDelayMs: number
211
213
  }
212
214
 
213
215
  export interface StemGainsInput {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aeonentertainment/mixer",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Low-latency LAN audio mixer for Aeon Karaoke: phone and house mics, a backing track, one mix to the room.",
5
5
  "bugs": {
6
6
  "url": "https://github.com/aeonentertainment/aeon-mixer/issues"