@livekit/rtc-node 0.10.0 → 0.10.2
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_resampler.d.ts +1 -1
- package/dist/audio_resampler.d.ts.map +1 -1
- package/dist/audio_resampler.js +8 -8
- package/dist/audio_resampler.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/audio_resampler.ts +10 -10
- package/src/index.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio_resampler.d.ts","sourceRoot":"","sources":["../src/audio_resampler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"audio_resampler.d.ts","sourceRoot":"","sources":["../src/audio_resampler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAe9C;;;GAGG;AACH,oBAAY,qBAAqB;IAC/B,KAAK,IAAsC;IAC3C,GAAG,IAAoC;IACvC,MAAM,IAAuC;IAC7C,IAAI,IAAqC;IACzC,SAAS,IAAyC;CACnD;AAED;;;;GAIG;AACH,qBAAa,cAAc;;IAMzB;;;;;;;;OAQG;gBAED,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,QAAQ,SAAI,EACZ,OAAO,wBAA+B;IA8BxC;;;;;;;;;;OAUG;IACH,IAAI,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,EAAE;IAiCpC;;;;;;OAMG;IACH,KAAK,IAAI,UAAU,EAAE;CA8BtB"}
|
package/dist/audio_resampler.js
CHANGED
|
@@ -13,9 +13,9 @@ var _AudioResampler_inputRate, _AudioResampler_outputRate, _AudioResampler_chann
|
|
|
13
13
|
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
14
14
|
//
|
|
15
15
|
// SPDX-License-Identifier: Apache-2.0
|
|
16
|
-
import { AudioFrame } from './audio_frame';
|
|
17
|
-
import { FfiClient, FfiHandle } from './ffi_client';
|
|
18
|
-
import { FlushSoxResamplerRequest, NewSoxResamplerRequest, PushSoxResamplerRequest, SoxResamplerDataType, } from './proto/audio_frame_pb';
|
|
16
|
+
import { AudioFrame } from './audio_frame.js';
|
|
17
|
+
import { FfiClient, FfiHandle } from './ffi_client.js';
|
|
18
|
+
import { FlushSoxResamplerRequest, NewSoxResamplerRequest, PushSoxResamplerRequest, SoxResamplerDataType, } from './proto/audio_frame_pb.js';
|
|
19
19
|
/**
|
|
20
20
|
* Resampler quality. Higher quality settings result in better audio quality but require more
|
|
21
21
|
* processing power.
|
|
@@ -86,7 +86,7 @@ export class AudioResampler {
|
|
|
86
86
|
const req = new PushSoxResamplerRequest({
|
|
87
87
|
resamplerHandle: __classPrivateFieldGet(this, _AudioResampler_ffiHandle, "f").handle,
|
|
88
88
|
dataPtr: data.protoInfo().dataPtr,
|
|
89
|
-
size: data.data.
|
|
89
|
+
size: data.data.byteLength,
|
|
90
90
|
});
|
|
91
91
|
const res = FfiClient.instance.request({
|
|
92
92
|
message: {
|
|
@@ -97,12 +97,12 @@ export class AudioResampler {
|
|
|
97
97
|
if (res.error) {
|
|
98
98
|
throw new Error(res.error);
|
|
99
99
|
}
|
|
100
|
-
if (res.outputPtr) {
|
|
100
|
+
if (!res.outputPtr) {
|
|
101
101
|
return [];
|
|
102
102
|
}
|
|
103
103
|
const outputData = FfiClient.instance.copyBuffer(res.outputPtr, res.size);
|
|
104
104
|
return [
|
|
105
|
-
new AudioFrame(new Int16Array(outputData.
|
|
105
|
+
new AudioFrame(new Int16Array(outputData.buffer), __classPrivateFieldGet(this, _AudioResampler_outputRate, "f"), __classPrivateFieldGet(this, _AudioResampler_channels, "f"), Math.trunc(outputData.length / __classPrivateFieldGet(this, _AudioResampler_channels, "f") / 2)),
|
|
106
106
|
];
|
|
107
107
|
}
|
|
108
108
|
/**
|
|
@@ -125,12 +125,12 @@ export class AudioResampler {
|
|
|
125
125
|
if (res.error) {
|
|
126
126
|
throw new Error(res.error);
|
|
127
127
|
}
|
|
128
|
-
if (res.outputPtr) {
|
|
128
|
+
if (!res.outputPtr) {
|
|
129
129
|
return [];
|
|
130
130
|
}
|
|
131
131
|
const outputData = FfiClient.instance.copyBuffer(res.outputPtr, res.size);
|
|
132
132
|
return [
|
|
133
|
-
new AudioFrame(new Int16Array(outputData.
|
|
133
|
+
new AudioFrame(new Int16Array(outputData.buffer), __classPrivateFieldGet(this, _AudioResampler_outputRate, "f"), __classPrivateFieldGet(this, _AudioResampler_channels, "f"), Math.trunc(outputData.length / __classPrivateFieldGet(this, _AudioResampler_channels, "f") / 2)),
|
|
134
134
|
];
|
|
135
135
|
}
|
|
136
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio_resampler.js","sourceRoot":"","sources":["../src/audio_resampler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"audio_resampler.js","sourceRoot":"","sources":["../src/audio_resampler.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,9 @@ export { Room, RoomEvent, ConnectError, RoomOptions, RtcConfiguration } from './
|
|
|
2
2
|
export { Participant, RemoteParticipant, LocalParticipant } from './participant.js';
|
|
3
3
|
export { Track, LocalTrack, RemoteTrack, VideoTrack, LocalAudioTrack, LocalVideoTrack, RemoteAudioTrack, RemoteVideoTrack, AudioTrack, } from './track.js';
|
|
4
4
|
export { VideoFrame } from './video_frame.js';
|
|
5
|
-
export { AudioFrame } from './audio_frame.js';
|
|
5
|
+
export { AudioFrame, combineAudioFrames } from './audio_frame.js';
|
|
6
6
|
export { AudioStream } from './audio_stream.js';
|
|
7
|
+
export { AudioResampler, AudioResamplerQuality } from './audio_resampler.js';
|
|
7
8
|
export { VideoStream, VideoFrameEvent } from './video_stream.js';
|
|
8
9
|
export { AudioSource } from './audio_source.js';
|
|
9
10
|
export { VideoSource } from './video_source.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,KAAK,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,KAAK,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,9 @@ export { Room, RoomEvent, ConnectError } from './room.js';
|
|
|
5
5
|
export { Participant, RemoteParticipant, LocalParticipant } from './participant.js';
|
|
6
6
|
export { Track, LocalAudioTrack, LocalVideoTrack, RemoteAudioTrack, RemoteVideoTrack, } from './track.js';
|
|
7
7
|
export { VideoFrame } from './video_frame.js';
|
|
8
|
-
export { AudioFrame } from './audio_frame.js';
|
|
8
|
+
export { AudioFrame, combineAudioFrames } from './audio_frame.js';
|
|
9
9
|
export { AudioStream } from './audio_stream.js';
|
|
10
|
+
export { AudioResampler, AudioResamplerQuality } from './audio_resampler.js';
|
|
10
11
|
export { VideoStream } from './video_stream.js';
|
|
11
12
|
export { AudioSource } from './audio_source.js';
|
|
12
13
|
export { VideoSource } from './video_source.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AAEtC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAiC,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,KAAK,EAIL,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,EAAE;AACF,sCAAsC;AAEtC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAiC,MAAM,WAAW,CAAC;AACzF,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EACL,KAAK,EAIL,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAmB,MAAM,mBAAmB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAmC,WAAW,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACpG,OAAO,EACL,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "LiveKit RTC Node",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"author": "LiveKit",
|
|
6
|
-
"version": "0.10.
|
|
6
|
+
"version": "0.10.2",
|
|
7
7
|
"main": "dist/index.js",
|
|
8
8
|
"types": "dist/index.d.ts",
|
|
9
9
|
"type": "module",
|
|
@@ -43,11 +43,11 @@
|
|
|
43
43
|
"prettier": "^3.0.3"
|
|
44
44
|
},
|
|
45
45
|
"optionalDependencies": {
|
|
46
|
-
"@livekit/rtc-node-darwin-arm64": "0.10.
|
|
47
|
-
"@livekit/rtc-node-darwin-x64": "0.10.
|
|
48
|
-
"@livekit/rtc-node-linux-
|
|
49
|
-
"@livekit/rtc-node-
|
|
50
|
-
"@livekit/rtc-node-
|
|
46
|
+
"@livekit/rtc-node-darwin-arm64": "0.10.2",
|
|
47
|
+
"@livekit/rtc-node-darwin-x64": "0.10.2",
|
|
48
|
+
"@livekit/rtc-node-linux-x64-gnu": "0.10.2",
|
|
49
|
+
"@livekit/rtc-node-win32-x64-msvc": "0.10.2",
|
|
50
|
+
"@livekit/rtc-node-linux-arm64-gnu": "0.10.2"
|
|
51
51
|
},
|
|
52
52
|
"engines": {
|
|
53
53
|
"node": ">= 18"
|
package/src/audio_resampler.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
// SPDX-FileCopyrightText: 2024 LiveKit, Inc.
|
|
2
2
|
//
|
|
3
3
|
// SPDX-License-Identifier: Apache-2.0
|
|
4
|
-
import { AudioFrame } from './audio_frame';
|
|
5
|
-
import { FfiClient, FfiHandle } from './ffi_client';
|
|
4
|
+
import { AudioFrame } from './audio_frame.js';
|
|
5
|
+
import { FfiClient, FfiHandle } from './ffi_client.js';
|
|
6
6
|
import type {
|
|
7
7
|
FlushSoxResamplerResponse,
|
|
8
8
|
NewSoxResamplerResponse,
|
|
9
9
|
PushSoxResamplerResponse,
|
|
10
|
-
} from './proto/audio_frame_pb';
|
|
10
|
+
} from './proto/audio_frame_pb.js';
|
|
11
11
|
import {
|
|
12
12
|
FlushSoxResamplerRequest,
|
|
13
13
|
NewSoxResamplerRequest,
|
|
14
14
|
PushSoxResamplerRequest,
|
|
15
15
|
SoxQualityRecipe,
|
|
16
16
|
SoxResamplerDataType,
|
|
17
|
-
} from './proto/audio_frame_pb';
|
|
17
|
+
} from './proto/audio_frame_pb.js';
|
|
18
18
|
|
|
19
19
|
/**
|
|
20
20
|
* Resampler quality. Higher quality settings result in better audio quality but require more
|
|
@@ -62,7 +62,7 @@ export class AudioResampler {
|
|
|
62
62
|
inputRate,
|
|
63
63
|
outputRate,
|
|
64
64
|
numChannels: channels,
|
|
65
|
-
qualityRecipe: quality as
|
|
65
|
+
qualityRecipe: quality as number as SoxQualityRecipe,
|
|
66
66
|
inputDataType: SoxResamplerDataType.SOXR_DATATYPE_INT16I,
|
|
67
67
|
outputDataType: SoxResamplerDataType.SOXR_DATATYPE_INT16I,
|
|
68
68
|
flags: 0,
|
|
@@ -97,7 +97,7 @@ export class AudioResampler {
|
|
|
97
97
|
const req = new PushSoxResamplerRequest({
|
|
98
98
|
resamplerHandle: this.#ffiHandle.handle,
|
|
99
99
|
dataPtr: data.protoInfo().dataPtr,
|
|
100
|
-
size: data.data.
|
|
100
|
+
size: data.data.byteLength,
|
|
101
101
|
});
|
|
102
102
|
|
|
103
103
|
const res = FfiClient.instance.request<PushSoxResamplerResponse>({
|
|
@@ -111,14 +111,14 @@ export class AudioResampler {
|
|
|
111
111
|
throw new Error(res.error);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
-
if (res.outputPtr) {
|
|
114
|
+
if (!res.outputPtr) {
|
|
115
115
|
return [];
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
const outputData = FfiClient.instance.copyBuffer(res.outputPtr, res.size);
|
|
119
119
|
return [
|
|
120
120
|
new AudioFrame(
|
|
121
|
-
new Int16Array(outputData.
|
|
121
|
+
new Int16Array(outputData.buffer),
|
|
122
122
|
this.#outputRate,
|
|
123
123
|
this.#channels,
|
|
124
124
|
Math.trunc(outputData.length / this.#channels / 2),
|
|
@@ -149,14 +149,14 @@ export class AudioResampler {
|
|
|
149
149
|
throw new Error(res.error);
|
|
150
150
|
}
|
|
151
151
|
|
|
152
|
-
if (res.outputPtr) {
|
|
152
|
+
if (!res.outputPtr) {
|
|
153
153
|
return [];
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
const outputData = FfiClient.instance.copyBuffer(res.outputPtr, res.size);
|
|
157
157
|
return [
|
|
158
158
|
new AudioFrame(
|
|
159
|
-
new Int16Array(outputData.
|
|
159
|
+
new Int16Array(outputData.buffer),
|
|
160
160
|
this.#outputRate,
|
|
161
161
|
this.#channels,
|
|
162
162
|
Math.trunc(outputData.length / this.#channels / 2),
|
package/src/index.ts
CHANGED
|
@@ -16,8 +16,9 @@ export {
|
|
|
16
16
|
AudioTrack,
|
|
17
17
|
} from './track.js';
|
|
18
18
|
export { VideoFrame } from './video_frame.js';
|
|
19
|
-
export { AudioFrame } from './audio_frame.js';
|
|
19
|
+
export { AudioFrame, combineAudioFrames } from './audio_frame.js';
|
|
20
20
|
export { AudioStream } from './audio_stream.js';
|
|
21
|
+
export { AudioResampler, AudioResamplerQuality } from './audio_resampler.js';
|
|
21
22
|
export { VideoStream, VideoFrameEvent } from './video_stream.js';
|
|
22
23
|
export { AudioSource } from './audio_source.js';
|
|
23
24
|
export { VideoSource } from './video_source.js';
|