speechrecorderng 3.10.13 → 3.11.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 +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -30,7 +30,7 @@ export declare abstract class BasicAudioCanvasLayerComponent extends CanvasLayer
|
|
|
30
30
|
viewPortXPixelToFramePosition(xViewPortPixelPos: number): number | null;
|
|
31
31
|
layoutBounds(bounds: Rectangle, virtualDimension: Dimension, redraw: boolean): void;
|
|
32
32
|
static ɵfac: i0.ɵɵFactoryDeclaration<BasicAudioCanvasLayerComponent, never>;
|
|
33
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BasicAudioCanvasLayerComponent, never, never, {}, {}, never, never,
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BasicAudioCanvasLayerComponent, never, never, {}, {}, never, never, true, never>;
|
|
34
34
|
}
|
|
35
35
|
export declare abstract class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
|
|
36
36
|
protected static readonly ENABLE_STREAMING_NUMBER_OF_SAMPLES_THRESHOLD: number;
|
|
@@ -64,5 +64,5 @@ export declare abstract class AudioCanvasLayerComponent extends BasicAudioCanvas
|
|
|
64
64
|
drawBg(): void;
|
|
65
65
|
drawCursorLayer(): void;
|
|
66
66
|
static ɵfac: i0.ɵɵFactoryDeclaration<AudioCanvasLayerComponent, never>;
|
|
67
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<AudioCanvasLayerComponent, never, never, { "pointerPosition": { "alias": "pointerPosition"; "required": false; }; "selecting": { "alias": "selecting"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; }, { "pointerPositionEventEmitter": "pointerPositionEventEmitter"; "selectingEventEmitter": "selectingEventEmitter"; "selectedEventEmitter": "selectedEventEmitter"; }, never, never,
|
|
67
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AudioCanvasLayerComponent, never, never, { "pointerPosition": { "alias": "pointerPosition"; "required": false; }; "selecting": { "alias": "selecting"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; }, { "pointerPositionEventEmitter": "pointerPositionEventEmitter"; "selectingEventEmitter": "selectingEventEmitter"; "selectedEventEmitter": "selectedEventEmitter"; }, never, never, true, never>;
|
|
68
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const VERSION = "3.
|
|
1
|
+
export declare const VERSION = "3.11.1";
|
|
@@ -9,5 +9,5 @@ export declare abstract class CanvasLayerComponent {
|
|
|
9
9
|
toXVirtualPixelPosition(viewPortX: number): number;
|
|
10
10
|
toViewPortPosition(virtualPos: Position): Position;
|
|
11
11
|
static ɵfac: i0.ɵɵFactoryDeclaration<CanvasLayerComponent, never>;
|
|
12
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<CanvasLayerComponent, never, never, {}, {}, never, never,
|
|
12
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CanvasLayerComponent, never, never, {}, {}, never, never, true, never>;
|
|
13
13
|
}
|
|
@@ -5,5 +5,5 @@ export declare class ResponsiveComponent {
|
|
|
5
5
|
screenXs: boolean;
|
|
6
6
|
constructor(breakpointObserver: BreakpointObserver);
|
|
7
7
|
static ɵfac: i0.ɵɵFactoryDeclaration<ResponsiveComponent, never>;
|
|
8
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<ResponsiveComponent, never, never, {}, {}, never, never,
|
|
8
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<ResponsiveComponent, never, never, {}, {}, never, never, true, never>;
|
|
9
9
|
}
|
package/package.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "speechrecorderng",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.11.1",
|
|
4
4
|
"peerDependencies": {
|
|
5
|
-
"@angular/animations": "~
|
|
6
|
-
"@angular/cdk": "~
|
|
7
|
-
"@angular/common": "~
|
|
8
|
-
"@angular/compiler": "~
|
|
9
|
-
"@angular/core": "~
|
|
10
|
-
"@angular/forms": "~
|
|
11
|
-
"@angular/material": "~
|
|
12
|
-
"@angular/platform-browser": "~
|
|
13
|
-
"@angular/platform-browser-dynamic": "~
|
|
14
|
-
"@angular/router": "~
|
|
15
|
-
"@angular/service-worker": "~
|
|
5
|
+
"@angular/animations": "~19.0.4",
|
|
6
|
+
"@angular/cdk": "~19.0.3",
|
|
7
|
+
"@angular/common": "~19.0.4",
|
|
8
|
+
"@angular/compiler": "~19.0.4",
|
|
9
|
+
"@angular/core": "~19.0.4",
|
|
10
|
+
"@angular/forms": "~19.0.4",
|
|
11
|
+
"@angular/material": "~19.0.3",
|
|
12
|
+
"@angular/platform-browser": "~19.0.4",
|
|
13
|
+
"@angular/platform-browser-dynamic": "~19.0.4",
|
|
14
|
+
"@angular/router": "~19.0.4",
|
|
15
|
+
"@angular/service-worker": "~19.0.4",
|
|
16
16
|
"rxjs": "~7.8.1",
|
|
17
|
-
"zone.js": "~0.
|
|
17
|
+
"zone.js": "~0.15.0"
|
|
18
18
|
},
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"tslib": "~2.3.1"
|
|
@@ -27,8 +27,6 @@
|
|
|
27
27
|
},
|
|
28
28
|
".": {
|
|
29
29
|
"types": "./index.d.ts",
|
|
30
|
-
"esm2022": "./esm2022/speechrecorderng.mjs",
|
|
31
|
-
"esm": "./esm2022/speechrecorderng.mjs",
|
|
32
30
|
"default": "./fesm2022/speechrecorderng.mjs"
|
|
33
31
|
}
|
|
34
32
|
},
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
export class ActionEvent {
|
|
2
|
-
get value() {
|
|
3
|
-
return this._value;
|
|
4
|
-
}
|
|
5
|
-
constructor(_value = null) {
|
|
6
|
-
this._value = _value;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export class Action {
|
|
10
|
-
get value() {
|
|
11
|
-
return this._value;
|
|
12
|
-
}
|
|
13
|
-
constructor(name, value = null) {
|
|
14
|
-
this._disabled = true;
|
|
15
|
-
this._onAction = null;
|
|
16
|
-
this._name = name;
|
|
17
|
-
this._value = value;
|
|
18
|
-
this.listeners = new Array();
|
|
19
|
-
this.controls = [];
|
|
20
|
-
}
|
|
21
|
-
get name() {
|
|
22
|
-
return this._name;
|
|
23
|
-
}
|
|
24
|
-
get onAction() {
|
|
25
|
-
return this._onAction;
|
|
26
|
-
}
|
|
27
|
-
set onAction(value) {
|
|
28
|
-
this._onAction = value;
|
|
29
|
-
}
|
|
30
|
-
createActionEvent(value = null) {
|
|
31
|
-
// default:
|
|
32
|
-
return new ActionEvent(value);
|
|
33
|
-
}
|
|
34
|
-
perform(value = null) {
|
|
35
|
-
this._value = value;
|
|
36
|
-
if (!this.disabled && this._onAction) {
|
|
37
|
-
let ae = this.createActionEvent(value);
|
|
38
|
-
this._onAction(ae);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
set disabled(disabled) {
|
|
42
|
-
//console.debug("Action: "+this._name+" disabled: "+disabled)
|
|
43
|
-
this._disabled = disabled;
|
|
44
|
-
for (let c of this.controls) {
|
|
45
|
-
c.disabled = this._disabled;
|
|
46
|
-
}
|
|
47
|
-
//let disStr=this.disabled?"disabled":"enabled";
|
|
48
|
-
//console.log(this._name+": "+disStr);
|
|
49
|
-
}
|
|
50
|
-
get disabled() {
|
|
51
|
-
return this._disabled;
|
|
52
|
-
}
|
|
53
|
-
addControl(ctrl, actionEventName) {
|
|
54
|
-
if (ctrl) {
|
|
55
|
-
if (this.controls.indexOf(ctrl) < 0) {
|
|
56
|
-
ctrl.disabled = this.disabled;
|
|
57
|
-
this.controls.push(ctrl);
|
|
58
|
-
if (actionEventName) {
|
|
59
|
-
ctrl.addEventListener(actionEventName, () => {
|
|
60
|
-
this.perform();
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
removeControl(ctrl) {
|
|
67
|
-
const i = this.controls.indexOf(ctrl);
|
|
68
|
-
if (i >= 0) {
|
|
69
|
-
this.controls = this.controls.splice(i, 1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2FjdGlvbi9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFdBQVc7SUFDcEIsSUFBSSxLQUFLO1FBQ0wsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxZQUFvQixTQUFjLElBQUk7UUFBbEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtJQUV0QyxDQUFDO0NBQ0o7QUFNRCxNQUFNLE9BQU8sTUFBTTtJQUNmLElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBU0QsWUFBWSxJQUFXLEVBQUMsUUFBYSxJQUFJO1FBTHpDLGNBQVMsR0FBQyxJQUFJLENBQUM7UUFDUCxjQUFTLEdBQTZCLElBQUksQ0FBQztRQUsvQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUEwQixDQUFDO1FBQ3JELElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUdELElBQUksUUFBUTtRQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsS0FBaUM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVVLGlCQUFpQixDQUFDLFFBQWMsSUFBSTtRQUMzQyxXQUFXO1FBQ1gsT0FBTyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWMsSUFBSTtRQUN0QixJQUFJLENBQUMsTUFBTSxHQUFDLEtBQUssQ0FBQTtRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxRQUFnQjtRQUMxQiw2REFBNkQ7UUFDNUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsS0FBSyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUIsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxnREFBZ0Q7UUFDaEQsc0NBQXNDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLGVBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFLENBQUM7WUFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN6QixJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQXFCO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0MsQ0FBQztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTpUfG51bGw9bnVsbCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FdmVudExpc3RlbmVyPFQ+e1xyXG4gICAgICAgIChhZTpBY3Rpb25FdmVudDxUPik6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uPFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTpzdHJpbmc7XHJcbiAgICAgICAgcHJpdmF0ZSBfdmFsdWU6VHxudWxsO1xyXG4gICAgICAgIF9kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgIHByaXZhdGUgX29uQWN0aW9uOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbD1udWxsO1xyXG4gICAgICAgIGxpc3RlbmVyczpBcnJheTxBY3Rpb25FdmVudExpc3RlbmVyPFQ+PjtcclxuICAgICAgICBwcml2YXRlIGNvbnRyb2xzOkhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IobmFtZTpzdHJpbmcsdmFsdWU6VHxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IEFycmF5PEFjdGlvbkV2ZW50TGlzdGVuZXI8VD4+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbHMgPSBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBuYW1lKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgZ2V0IG9uQWN0aW9uKCk6QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uQWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0IG9uQWN0aW9uKHZhbHVlOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkFjdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJvdGVjdGVkICBjcmVhdGVBY3Rpb25FdmVudCh2YWx1ZTogVHxudWxsPW51bGwpOkFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICAgICAgLy8gZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FdmVudCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwZXJmb3JtKHZhbHVlOiBUfG51bGw9bnVsbCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9vbkFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFlPXRoaXMuY3JlYXRlQWN0aW9uRXZlbnQodmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkFjdGlvbihhZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZDpib29sZWFuKSB7XHJcbiAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQWN0aW9uOiBcIit0aGlzLl9uYW1lK1wiIGRpc2FibGVkOiBcIitkaXNhYmxlZClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyBvZiB0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICAgICBjLmRpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sZXQgZGlzU3RyPXRoaXMuZGlzYWJsZWQ/XCJkaXNhYmxlZFwiOlwiZW5hYmxlZFwiO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuX25hbWUrXCI6IFwiK2Rpc1N0cik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgZGlzYWJsZWQoKTpib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkQ29udHJvbChjdHJsOiBIVE1MSW5wdXRFbGVtZW50LCBhY3Rpb25FdmVudE5hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGN0cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xzLmluZGV4T2YoY3RybCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9scy5wdXNoKGN0cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FdmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3RybC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbkV2ZW50TmFtZSwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZXJmb3JtKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVtb3ZlQ29udHJvbChjdHJsOkhUTUxJbnB1dEVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgaSA9IHRoaXMuY29udHJvbHMuaW5kZXhPZihjdHJsKTtcclxuICAgICAgICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9scyA9IHRoaXMuY29udHJvbHMuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuIl19
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
import { BasicAudioSource } from "./audio_data_holder";
|
|
2
|
-
import { Observable } from "rxjs";
|
|
3
|
-
import { ArrayAudioBufferRandomAccessStream } from "./array_audio_buffer_random_access_stream";
|
|
4
|
-
import { ArrayAudioBufferInputStream } from "./array_audio_buffer_input_stream";
|
|
5
|
-
export class ArrayAudioBuffer extends BasicAudioSource {
|
|
6
|
-
constructor(_channelCount, _sampleRate, _data) {
|
|
7
|
-
super();
|
|
8
|
-
this._channelCount = _channelCount;
|
|
9
|
-
this._sampleRate = _sampleRate;
|
|
10
|
-
this._data = _data;
|
|
11
|
-
this._chunkCount = 0;
|
|
12
|
-
this._frameLen = 0;
|
|
13
|
-
this._duration = 0;
|
|
14
|
-
this._sealed = false;
|
|
15
|
-
this.updateFrameLen();
|
|
16
|
-
this.ready();
|
|
17
|
-
}
|
|
18
|
-
updateFrameLen() {
|
|
19
|
-
this._frameLen = 0;
|
|
20
|
-
this._chunkCount = 0;
|
|
21
|
-
if (this._data.length > 0) {
|
|
22
|
-
let ch0Data = this.data[0];
|
|
23
|
-
for (let ch0Chk of ch0Data) {
|
|
24
|
-
this._chunkCount++;
|
|
25
|
-
this._frameLen += ch0Chk.length;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
this._duration = this._frameLen / this._sampleRate;
|
|
29
|
-
}
|
|
30
|
-
seal() {
|
|
31
|
-
this._sealed = true;
|
|
32
|
-
}
|
|
33
|
-
sealed() {
|
|
34
|
-
return this._sealed;
|
|
35
|
-
}
|
|
36
|
-
static fromAudioBuffer(audioBuffer, chunkFrameSize = 8192) {
|
|
37
|
-
let aab;
|
|
38
|
-
let chs = audioBuffer.numberOfChannels;
|
|
39
|
-
let frameLength = audioBuffer.length;
|
|
40
|
-
//let chunksSize=Math.ceil(frameLength/chunkFrameSize);
|
|
41
|
-
let framePos = 0;
|
|
42
|
-
let data = new Array(chs);
|
|
43
|
-
for (let ch = 0; ch < chs; ch++) {
|
|
44
|
-
data[ch] = new Array();
|
|
45
|
-
}
|
|
46
|
-
let toCopy = frameLength - framePos;
|
|
47
|
-
while (toCopy > 0) {
|
|
48
|
-
let toCopyChunk = chunkFrameSize;
|
|
49
|
-
if (toCopyChunk > toCopy) {
|
|
50
|
-
// last chunk, the rest
|
|
51
|
-
toCopyChunk = toCopy;
|
|
52
|
-
}
|
|
53
|
-
for (let ch = 0; ch < chs; ch++) {
|
|
54
|
-
data[ch].push(audioBuffer.getChannelData(ch).slice(framePos, framePos + toCopyChunk));
|
|
55
|
-
}
|
|
56
|
-
framePos += toCopyChunk;
|
|
57
|
-
toCopy -= toCopyChunk;
|
|
58
|
-
}
|
|
59
|
-
aab = new ArrayAudioBuffer(chs, audioBuffer.sampleRate, data);
|
|
60
|
-
return aab;
|
|
61
|
-
}
|
|
62
|
-
appendAudioBuffer(audioBuffer) {
|
|
63
|
-
let chs = audioBuffer.numberOfChannels;
|
|
64
|
-
if (this._channelCount !== chs) {
|
|
65
|
-
throw new Error('Cannot append audio buffer with ' + chs + ' channels to this array audio buffer with ' + this._channelCount + ' channels. Number of channels must match.');
|
|
66
|
-
}
|
|
67
|
-
let sr = audioBuffer.sampleRate;
|
|
68
|
-
if (sr !== this._sampleRate) {
|
|
69
|
-
throw new Error('Cannot append audio buffer with samplerate ' + sr + ' to this array audio buffer with samplerate ' + this._sampleRate + '. Samplerates must match.');
|
|
70
|
-
}
|
|
71
|
-
for (let ch = 0; ch < chs; ch++) {
|
|
72
|
-
let chAbSlice = audioBuffer.getChannelData(ch).slice();
|
|
73
|
-
//console.debug("Append audio buffer ch: "+ch+": "+chAbSlice.length);
|
|
74
|
-
this._data[ch].push(chAbSlice);
|
|
75
|
-
}
|
|
76
|
-
this.updateFrameLen();
|
|
77
|
-
}
|
|
78
|
-
get channelCount() {
|
|
79
|
-
return this._channelCount;
|
|
80
|
-
}
|
|
81
|
-
frames(framePos, frameLen, bufs) {
|
|
82
|
-
let ccFramePos = 0;
|
|
83
|
-
let trgFramePos = framePos;
|
|
84
|
-
let ch0Data = this.data[0];
|
|
85
|
-
let cPos = 0;
|
|
86
|
-
let filled = 0;
|
|
87
|
-
let ci = 0;
|
|
88
|
-
while (filled < frameLen && ci < this._chunkCount) {
|
|
89
|
-
// Current chunk
|
|
90
|
-
let cc0 = ch0Data[ci];
|
|
91
|
-
let ccLen = cc0.length;
|
|
92
|
-
let ccFrameEndPos = ccFramePos + ccLen;
|
|
93
|
-
if (trgFramePos >= ccFramePos && trgFramePos < ccFrameEndPos) {
|
|
94
|
-
let toCp = frameLen - filled;
|
|
95
|
-
cPos = trgFramePos - ccFramePos;
|
|
96
|
-
if (cPos + toCp > ccLen) {
|
|
97
|
-
toCp = ccLen - cPos;
|
|
98
|
-
}
|
|
99
|
-
for (let ch = 0; ch < bufs.length; ch++) {
|
|
100
|
-
let cc = this.data[ch][ci];
|
|
101
|
-
for (let i = 0; i < toCp; i++) {
|
|
102
|
-
bufs[ch][filled + i] = cc[cPos + i];
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
filled += toCp;
|
|
106
|
-
trgFramePos += toCp;
|
|
107
|
-
cPos += toCp;
|
|
108
|
-
ccFramePos += toCp;
|
|
109
|
-
if (cPos >= ccLen) {
|
|
110
|
-
ccFramePos = ccFrameEndPos;
|
|
111
|
-
cPos = 0;
|
|
112
|
-
ci++;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
else {
|
|
116
|
-
// next chunk
|
|
117
|
-
ccFramePos = ccFrameEndPos;
|
|
118
|
-
cPos = 0;
|
|
119
|
-
ci++;
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
return filled;
|
|
123
|
-
}
|
|
124
|
-
get sampleRate() {
|
|
125
|
-
return this._sampleRate;
|
|
126
|
-
}
|
|
127
|
-
get frameLen() {
|
|
128
|
-
return this._frameLen;
|
|
129
|
-
}
|
|
130
|
-
get chunkCount() {
|
|
131
|
-
return this._chunkCount;
|
|
132
|
-
}
|
|
133
|
-
get data() {
|
|
134
|
-
return this._data;
|
|
135
|
-
}
|
|
136
|
-
asyncAudioInputStream() {
|
|
137
|
-
return null;
|
|
138
|
-
}
|
|
139
|
-
audioInputStream() {
|
|
140
|
-
return new ArrayAudioBufferInputStream(this);
|
|
141
|
-
}
|
|
142
|
-
get duration() {
|
|
143
|
-
return this._duration;
|
|
144
|
-
}
|
|
145
|
-
get numberOfChannels() {
|
|
146
|
-
return this._channelCount;
|
|
147
|
-
}
|
|
148
|
-
releaseAudioData() {
|
|
149
|
-
return new Observable(subscriber => {
|
|
150
|
-
// No persistent respectively async deletable storage, they should be finally removed by the GC
|
|
151
|
-
//this._audioBuffer=null;
|
|
152
|
-
//this._arrayBuffer=null;
|
|
153
|
-
subscriber.next();
|
|
154
|
-
subscriber.complete();
|
|
155
|
-
});
|
|
156
|
-
}
|
|
157
|
-
sampleCounts() {
|
|
158
|
-
return this._channelCount * this._frameLen;
|
|
159
|
-
}
|
|
160
|
-
randomAccessAudioStream() {
|
|
161
|
-
return new ArrayAudioBufferRandomAccessStream(this);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUc5RSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBT3BELFlBQW9CLGFBQXFCLEVBQVUsV0FBbUIsRUFBVSxLQUFpQztRQUMvRyxLQUFLLEVBQUUsQ0FBQztRQURVLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUE0QjtRQUx6RyxnQkFBVyxHQUFDLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFDbkIsY0FBUyxHQUFRLENBQUMsQ0FBQztRQUNuQixZQUFPLEdBQUMsS0FBSyxDQUFDO1FBSXBCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQztRQUNuQixJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0Is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LFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLDJCQUEyQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1YsT0FBTyxJQUFJLFVBQVUsQ0FBTyxVQUFVLENBQUMsRUFBRTtZQUN6QywrRkFBK0Y7WUFDL0YseUJBQXlCO1lBQ3pCLHlCQUF5QjtZQUN6QixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTFCLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELFlBQVk7UUFDVixPQUFPLElBQUksQ0FBQyxhQUFhLEdBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsdUJBQXVCO1FBQ3RCLE9BQU8sSUFBSSxrQ0FBa0MsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jhc2ljQXVkaW9Tb3VyY2UsIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge0FzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0sIEZsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyUmFuZG9tQWNjZXNzU3RyZWFtfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJfcmFuZG9tX2FjY2Vzc19zdHJlYW1cIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW19IGZyb20gXCIuL2FycmF5X2F1ZGlvX2J1ZmZlcl9pbnB1dF9zdHJlYW1cIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlciBleHRlbmRzIEJhc2ljQXVkaW9Tb3VyY2V7XHJcblxyXG4gIHByaXZhdGUgX2NodW5rQ291bnQ9MDtcclxuICBwcml2YXRlIF9mcmFtZUxlbjpudW1iZXI9MDtcclxuICBwcml2YXRlIF9kdXJhdGlvbjpudW1iZXI9MDtcclxuICBwcml2YXRlIF9zZWFsZWQ9ZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5uZWxDb3VudDogbnVtYmVyLCBwcml2YXRlIF9zYW1wbGVSYXRlOiBudW1iZXIsIHByaXZhdGUgX2RhdGE6IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy51cGRhdGVGcmFtZUxlbigpO1xyXG4gICAgdGhpcy5yZWFkeSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVGcmFtZUxlbigpe1xyXG4gICAgdGhpcy5fZnJhbWVMZW49MDtcclxuICAgIHRoaXMuX2NodW5rQ291bnQ9MDtcclxuICAgIGlmKHRoaXMuX2RhdGEubGVuZ3RoPjApIHtcclxuICAgICAgbGV0IGNoMERhdGEgPSB0aGlzLmRhdGFbMF07XHJcbiAgICAgIGZvciAobGV0IGNoMENoayBvZiBjaDBEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fY2h1bmtDb3VudCsrO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lTGVuICs9IGNoMENoay5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX2R1cmF0aW9uPXRoaXMuX2ZyYW1lTGVuL3RoaXMuX3NhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICBzZWFsKCl7XHJcbiAgICB0aGlzLl9zZWFsZWQ9dHJ1ZTtcclxuICB9XHJcblxyXG4gIHNlYWxlZCgpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5fc2VhbGVkO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21BdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcixjaHVua0ZyYW1lU2l6ZT04MTkyKTpBcnJheUF1ZGlvQnVmZmVye1xyXG4gICAgbGV0IGFhYjpBcnJheUF1ZGlvQnVmZmVyO1xyXG4gICAgbGV0IGNocz1hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgbGV0IGZyYW1lTGVuZ3RoPWF1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIC8vbGV0IGNodW5rc1NpemU9TWF0aC5jZWlsKGZyYW1lTGVuZ3RoL2NodW5rRnJhbWVTaXplKTtcclxuICAgIGxldCBmcmFtZVBvcz0wO1xyXG4gICAgbGV0IGRhdGE9bmV3IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+KGNocyk7XHJcbiAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgZGF0YVtjaF09bmV3IEFycmF5PEZsb2F0MzJBcnJheT4oKTtcclxuICAgIH1cclxuICAgIGxldCB0b0NvcHk9ZnJhbWVMZW5ndGgtZnJhbWVQb3M7XHJcbiAgICAgIHdoaWxlKHRvQ29weT4wKXtcclxuXHJcbiAgICAgICAgbGV0IHRvQ29weUNodW5rPWNodW5rRnJhbWVTaXplO1xyXG4gICAgICAgIGlmKHRvQ29weUNodW5rPnRvQ29weSl7XHJcbiAgICAgICAgICAvLyBsYXN0IGNodW5rLCB0aGUgcmVzdFxyXG4gICAgICAgICAgdG9Db3B5Q2h1bms9dG9Db3B5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgICAgIGRhdGFbY2hdLnB1c2goYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpLnNsaWNlKGZyYW1lUG9zLCBmcmFtZVBvcyArIHRvQ29weUNodW5rKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZyYW1lUG9zKz10b0NvcHlDaHVuaztcclxuICAgICAgICB0b0NvcHktPXRvQ29weUNodW5rO1xyXG4gICAgICB9XHJcbiAgICBhYWI9bmV3IEFycmF5QXVkaW9CdWZmZXIoY2hzLGF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUsZGF0YSk7XHJcbiAgICByZXR1cm4gYWFiO1xyXG4gIH1cclxuXHJcbiAgYXBwZW5kQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpe1xyXG4gICAgbGV0IGNocz1hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgaWYodGhpcy5fY2hhbm5lbENvdW50IT09IGNocyl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFwcGVuZCBhdWRpbyBidWZmZXIgd2l0aCAnK2NocysnIGNoYW5uZWxzIHRvIHRoaXMgYXJyYXkgYXVkaW8gYnVmZmVyIHdpdGggJyt0aGlzLl9jaGFubmVsQ291bnQrJyBjaGFubmVscy4gTnVtYmVyIG9mIGNoYW5uZWxzIG11c3QgbWF0Y2guJyk7XHJcbiAgICB9XHJcbiAgICBsZXQgc3I9YXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIGlmKHNyIT09dGhpcy5fc2FtcGxlUmF0ZSl7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFwcGVuZCBhdWRpbyBidWZmZXIgd2l0aCBzYW1wbGVyYXRlICcrc3IrJyB0byB0aGlzIGFycmF5IGF1ZGlvIGJ1ZmZlciB3aXRoIHNhbXBsZXJhdGUgJyt0aGlzLl9zYW1wbGVSYXRlKycuIFNhbXBsZXJhdGVzIG11c3QgbWF0Y2guJyk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yKGxldCBjaD0wO2NoPGNocztjaCsrKSB7XHJcbiAgICAgIGxldCBjaEFiU2xpY2U9YXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpLnNsaWNlKCk7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkFwcGVuZCBhdWRpbyBidWZmZXIgY2g6IFwiK2NoK1wiOiBcIitjaEFiU2xpY2UubGVuZ3RoKTtcclxuICAgICAgdGhpcy5fZGF0YVtjaF0ucHVzaChjaEFiU2xpY2UpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGVGcmFtZUxlbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIGdldCBjaGFubmVsQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBmcmFtZXMoZnJhbWVQb3M6bnVtYmVyLGZyYW1lTGVuOm51bWJlcixidWZzOkZsb2F0MzJBcnJheVtdKTpudW1iZXJ7XHJcblxyXG4gICAgbGV0IGNjRnJhbWVQb3M9MDtcclxuICAgIGxldCB0cmdGcmFtZVBvcz1mcmFtZVBvcztcclxuICAgIGxldCBjaDBEYXRhID0gdGhpcy5kYXRhWzBdO1xyXG4gICAgbGV0IGNQb3M9MDtcclxuICAgIGxldCBmaWxsZWQ9MDtcclxuICAgIGxldCBjaT0wO1xyXG5cclxuICAgIHdoaWxlKGZpbGxlZDxmcmFtZUxlbiAmJiBjaTx0aGlzLl9jaHVua0NvdW50KXtcclxuICAgICAgLy8gQ3VycmVudCBjaHVua1xyXG4gICAgICBsZXQgY2MwPWNoMERhdGFbY2ldO1xyXG4gICAgICBsZXQgY2NMZW49Y2MwLmxlbmd0aDtcclxuICAgICAgbGV0IGNjRnJhbWVFbmRQb3M9Y2NGcmFtZVBvcytjY0xlbjtcclxuXHJcbiAgICAgIGlmKHRyZ0ZyYW1lUG9zPj1jY0ZyYW1lUG9zICYmIHRyZ0ZyYW1lUG9zPGNjRnJhbWVFbmRQb3Mpe1xyXG4gICAgICAgIGxldCB0b0NwPWZyYW1lTGVuLWZpbGxlZDtcclxuICAgICAgICBjUG9zPXRyZ0ZyYW1lUG9zLWNjRnJhbWVQb3M7XHJcbiAgICAgICAgaWYoY1Bvcyt0b0NwPmNjTGVuKXtcclxuICAgICAgICAgIHRvQ3A9Y2NMZW4tY1BvcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gICAgICAgICAgbGV0IGNjPXRoaXMuZGF0YVtjaF1bY2ldO1xyXG5cclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8dG9DcDtpKyspe1xyXG4gICAgICAgICAgICBidWZzW2NoXVtmaWxsZWQraV09Y2NbY1BvcytpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZmlsbGVkKz10b0NwO1xyXG4gICAgICAgIHRyZ0ZyYW1lUG9zKz10b0NwO1xyXG4gICAgICAgIGNQb3MrPXRvQ3A7XHJcbiAgICAgICAgY2NGcmFtZVBvcys9dG9DcDtcclxuICAgICAgICBpZihjUG9zPj1jY0xlbil7XHJcbiAgICAgICAgICBjY0ZyYW1lUG9zPWNjRnJhbWVFbmRQb3M7XHJcbiAgICAgICAgICBjUG9zPTA7XHJcbiAgICAgICAgICBjaSsrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIC8vIG5leHQgY2h1bmtcclxuICAgICAgICBjY0ZyYW1lUG9zPWNjRnJhbWVFbmRQb3M7XHJcbiAgICAgICAgY1Bvcz0wO1xyXG4gICAgICAgIGNpKys7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmaWxsZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIGdldCBjaHVua0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2h1bmtDb3VudDtcclxuICB9XHJcblxyXG4gIGdldCBkYXRhKCk6IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgYXVkaW9JbnB1dFN0cmVhbSgpOiBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGwge1xyXG4gICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcyk7XHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcclxuICB9XHJcblxyXG4gIGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvdW50O1xyXG4gIH1cclxuXHJcbiAgcmVsZWFzZUF1ZGlvRGF0YSgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgLy8gTm8gcGVyc2lzdGVudCByZXNwZWN0aXZlbHkgYXN5bmMgZGVsZXRhYmxlIHN0b3JhZ2UsIHRoZXkgc2hvdWxkIGJlIGZpbmFsbHkgcmVtb3ZlZCBieSB0aGUgR0NcclxuICAgICAgICAvL3RoaXMuX2F1ZGlvQnVmZmVyPW51bGw7XHJcbiAgICAgICAgLy90aGlzLl9hcnJheUJ1ZmZlcj1udWxsO1xyXG4gICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuXHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBzYW1wbGVDb3VudHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQqdGhpcy5fZnJhbWVMZW47XHJcbiAgfVxyXG5cclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSB7XHJcbiAgIHJldHVybiBuZXcgQXJyYXlBdWRpb0J1ZmZlclJhbmRvbUFjY2Vzc1N0cmVhbSh0aGlzKTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
export class ArrayAudioBufferInputStream {
|
|
2
|
-
constructor(arrayAudioBuffer) {
|
|
3
|
-
this.arrayAudioBuffer = arrayAudioBuffer;
|
|
4
|
-
this._framePos = 0;
|
|
5
|
-
this.chunkFramePos = 0;
|
|
6
|
-
this.chunkIdx = 0;
|
|
7
|
-
this.eod = false;
|
|
8
|
-
//console.debug("Array audio input stream array audio buffer frames: "+arrayAudioBuffer.frameLen);
|
|
9
|
-
}
|
|
10
|
-
close() {
|
|
11
|
-
}
|
|
12
|
-
skipFrames(n) {
|
|
13
|
-
let toSkip = n;
|
|
14
|
-
if (this.chunkIdx >= this.arrayAudioBuffer.chunkCount) {
|
|
15
|
-
this.eod = true;
|
|
16
|
-
if (toSkip > 0) {
|
|
17
|
-
throw Error('Skip out of bounds: Cannot skip ' + toSkip + ' frames.');
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
let chunkBuf0 = this.arrayAudioBuffer.data[0][this.chunkIdx];
|
|
22
|
-
let chunkBufsLen = chunkBuf0.length;
|
|
23
|
-
let currBufSkippable = chunkBufsLen - this.chunkFramePos;
|
|
24
|
-
if (n >= currBufSkippable) {
|
|
25
|
-
this._framePos += currBufSkippable;
|
|
26
|
-
toSkip -= currBufSkippable;
|
|
27
|
-
this.chunkIdx++;
|
|
28
|
-
this.chunkFramePos = 0;
|
|
29
|
-
if (this.chunkIdx < this.arrayAudioBuffer.chunkCount) {
|
|
30
|
-
this.skipFrames(toSkip);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
if (toSkip > 0) {
|
|
34
|
-
throw Error('Skip out of bounds: Cannot skip ' + toSkip + ' frames.');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
toSkip -= n;
|
|
40
|
-
this.chunkFramePos += n;
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
read(buffers) {
|
|
45
|
-
let read = 0;
|
|
46
|
-
let toRead = buffers[0].length;
|
|
47
|
-
while (read < toRead && !this.eod) {
|
|
48
|
-
//console.debug("Chunk "+this.chunkIdx+" of "+this.arrayAudioBuffer.chunkCount+" chunks.")
|
|
49
|
-
if (this.chunkIdx >= this.arrayAudioBuffer.chunkCount) {
|
|
50
|
-
this.eod = true;
|
|
51
|
-
//console.debug("Array audio input stream end of data read frames: "+this.framePos);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
let chunkBuf0 = this.arrayAudioBuffer.data[0][this.chunkIdx];
|
|
55
|
-
let chunkBufsLen = chunkBuf0.length;
|
|
56
|
-
const chunkBufAvail = chunkBufsLen - this.chunkFramePos;
|
|
57
|
-
let r = chunkBufAvail;
|
|
58
|
-
if (r > toRead - read) {
|
|
59
|
-
r = toRead - read;
|
|
60
|
-
}
|
|
61
|
-
for (let ch = 0; ch < buffers.length; ch++) {
|
|
62
|
-
let chChunkBuf = this.arrayAudioBuffer.data[ch][this.chunkIdx];
|
|
63
|
-
for (let bi = 0; bi < r; bi++) {
|
|
64
|
-
buffers[ch][read + bi] = chChunkBuf[this.chunkFramePos + bi];
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
read += r;
|
|
68
|
-
this.chunkFramePos += r;
|
|
69
|
-
if (this.chunkFramePos >= chunkBufsLen) {
|
|
70
|
-
this.chunkIdx++;
|
|
71
|
-
this.chunkFramePos = 0;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
this._framePos += read;
|
|
76
|
-
//console.debug("Read: "+read+", frame pos: "+this.framePos)
|
|
77
|
-
if (this._framePos > this.arrayAudioBuffer.frameLen) {
|
|
78
|
-
console.error("Array audio input stream frame pos: " + this._framePos + " greater then frame length: " + this.arrayAudioBuffer.frameLen);
|
|
79
|
-
}
|
|
80
|
-
return read;
|
|
81
|
-
}
|
|
82
|
-
get framePos() {
|
|
83
|
-
return this._framePos;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hcnJheV9hdWRpb19idWZmZXJfaW5wdXRfc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsWUFBb0IsZ0JBQWlDO1FBQWpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFKN0MsY0FBUyxHQUFDLENBQUMsQ0FBQztRQUNaLGtCQUFhLEdBQUMsQ0FBQyxDQUFDO1FBQ2hCLGFBQVEsR0FBQyxDQUFDLENBQUM7UUFDWCxRQUFHLEdBQUMsS0FBSyxDQUFDO1FBRWhCLGtHQUFrRztJQUNwRyxDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUTtRQUNqQixJQUFJLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDYixJQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLE1BQU0sS0FBSyxDQUFDLGtDQUFrQyxHQUFHLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQTtZQUN2RSxDQUFDO1FBQ0gsQ0FBQzthQUFLLENBQUM7WUFDTCxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3RCxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3BDLElBQUksZ0JBQWdCLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDekQsSUFBSSxDQUFD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O1FBQzlELElBQUcsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFDLENBQUM7WUFDaEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLDhCQUE4QixHQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNySSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBSUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuZXhwb3J0IGNsYXNzIEFycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbSBpbXBsZW1lbnRzIEZsb2F0MzJBcnJheUlucHV0U3RyZWFte1xyXG5cclxuICBwcml2YXRlIF9mcmFtZVBvcz0wO1xyXG4gIHByaXZhdGUgY2h1bmtGcmFtZVBvcz0wO1xyXG4gIHByaXZhdGUgY2h1bmtJZHg9MDtcclxuICBwcml2YXRlIGVvZD1mYWxzZTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFycmF5QXVkaW9CdWZmZXI6QXJyYXlBdWRpb0J1ZmZlcikge1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiQXJyYXkgYXVkaW8gaW5wdXQgc3RyZWFtIGFycmF5IGF1ZGlvIGJ1ZmZlciBmcmFtZXM6IFwiK2FycmF5QXVkaW9CdWZmZXIuZnJhbWVMZW4pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBza2lwRnJhbWVzKG46bnVtYmVyKXtcclxuICAgIGxldCB0b1NraXA9bjtcclxuICAgIGlmKHRoaXMuY2h1bmtJZHg+PXRoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50KSB7XHJcbiAgICAgIHRoaXMuZW9kID0gdHJ1ZTtcclxuICAgICAgaWYgKHRvU2tpcCA+IDApIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignU2tpcCBvdXQgb2YgYm91bmRzOiBDYW5ub3Qgc2tpcCAnICsgdG9Ta2lwICsgJyBmcmFtZXMuJylcclxuICAgICAgfVxyXG4gICAgfWVsc2Uge1xyXG4gICAgICBsZXQgY2h1bmtCdWYwID0gdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmRhdGFbMF1bdGhpcy5jaHVua0lkeF07XHJcbiAgICAgIGxldCBjaHVua0J1ZnNMZW4gPSBjaHVua0J1ZjAubGVuZ3RoO1xyXG4gICAgICBsZXQgY3VyckJ1ZlNraXBwYWJsZSA9IGNodW5rQnVmc0xlbiAtIHRoaXMuY2h1bmtGcmFtZVBvcztcclxuICAgICAgaWYgKG4gPj0gY3VyckJ1ZlNraXBwYWJsZSkge1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lUG9zICs9IGN1cnJCdWZTa2lwcGFibGU7XHJcbiAgICAgICAgdG9Ta2lwIC09IGN1cnJCdWZTa2lwcGFibGU7XHJcbiAgICAgICAgdGhpcy5jaHVua0lkeCsrXHJcbiAgICAgICAgdGhpcy5jaHVua0ZyYW1lUG9zID0gMDtcclxuICAgICAgICBpZiAodGhpcy5jaHVua0lkeCA8IHRoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLnNraXBGcmFtZXModG9Ta2lwKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRvU2tpcCA+IDApIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ1NraXAgb3V0IG9mIGJvdW5kczogQ2Fubm90IHNraXAgJyArIHRvU2tpcCArICcgZnJhbWVzLicpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRvU2tpcCAtPSBuO1xyXG4gICAgICAgIHRoaXMuY2h1bmtGcmFtZVBvcyArPSBuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuXHJcbiAgICBsZXQgdG9SZWFkPWJ1ZmZlcnNbMF0ubGVuZ3RoO1xyXG5cclxuICAgICAgd2hpbGUocmVhZDx0b1JlYWQgJiYgIXRoaXMuZW9kKXtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJDaHVuayBcIit0aGlzLmNodW5rSWR4K1wiIG9mIFwiK3RoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50K1wiIGNodW5rcy5cIilcclxuICAgICAgICBpZih0aGlzLmNodW5rSWR4Pj10aGlzLmFycmF5QXVkaW9CdWZmZXIuY2h1bmtDb3VudCkge1xyXG4gICAgICAgICAgdGhpcy5lb2QgPSB0cnVlO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXJyYXkgYXVkaW8gaW5wdXQgc3RyZWFtIGVuZCBvZiBkYXRhIHJlYWQgZnJhbWVzOiBcIit0aGlzLmZyYW1lUG9zKTtcclxuICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICBsZXQgY2h1bmtCdWYwID0gdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmRhdGFbMF1bdGhpcy5jaHVua0lkeF07XHJcbiAgICAgICAgICBsZXQgY2h1bmtCdWZzTGVuID0gY2h1bmtCdWYwLmxlbmd0aDtcclxuICAgICAgICAgIGNvbnN0IGNodW5rQnVmQXZhaWwgPSBjaHVua0J1ZnNMZW4gLSB0aGlzLmNodW5rRnJhbWVQb3M7XHJcbiAgICAgICAgICBsZXQgciA9IGNodW5rQnVmQXZhaWw7XHJcbiAgICAgICAgICBpZiAociA+IHRvUmVhZCAtIHJlYWQpIHtcclxuICAgICAgICAgICAgciA9IHRvUmVhZCAtIHJlYWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBmb3IgKGxldCBjaCA9IDA7IGNoIDwgYnVmZmVycy5sZW5ndGg7IGNoKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoQ2h1bmtCdWY9dGhpcy5hcnJheUF1ZGlvQnVmZmVyLmRhdGFbY2hdW3RoaXMuY2h1bmtJZHhdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBiaSA9IDA7IGJpIDwgcjsgYmkrKykge1xyXG4gICAgICAgICAgICAgIGJ1ZmZlcnNbY2hdW3JlYWQgKyBiaV0gPSBjaENodW5rQnVmW3RoaXMuY2h1bmtGcmFtZVBvcyArIGJpXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVhZCArPSByO1xyXG5cclxuICAgICAgICAgIHRoaXMuY2h1bmtGcmFtZVBvcyArPSByO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY2h1bmtGcmFtZVBvcyA+PSBjaHVua0J1ZnNMZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5jaHVua0lkeCsrO1xyXG4gICAgICAgICAgICB0aGlzLmNodW5rRnJhbWVQb3MgPSAwO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgdGhpcy5fZnJhbWVQb3MrPXJlYWQ7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJlYWQ6IFwiK3JlYWQrXCIsIGZyYW1lIHBvczogXCIrdGhpcy5mcmFtZVBvcylcclxuICAgIGlmKHRoaXMuX2ZyYW1lUG9zPnRoaXMuYXJyYXlBdWRpb0J1ZmZlci5mcmFtZUxlbil7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJBcnJheSBhdWRpbyBpbnB1dCBzdHJlYW0gZnJhbWUgcG9zOiBcIit0aGlzLl9mcmFtZVBvcytcIiBncmVhdGVyIHRoZW4gZnJhbWUgbGVuZ3RoOiBcIit0aGlzLmFycmF5QXVkaW9CdWZmZXIuZnJhbWVMZW4pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlYWQ7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGdldCBmcmFtZVBvcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZyYW1lUG9zO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
export class ArrayAudioBufferRandomAccessStream {
|
|
3
|
-
constructor(_arrayBuffer) {
|
|
4
|
-
this._arrayBuffer = _arrayBuffer;
|
|
5
|
-
}
|
|
6
|
-
close() {
|
|
7
|
-
}
|
|
8
|
-
framesObs(framePos, frameLen, bufs) {
|
|
9
|
-
return new Observable(subscriber => {
|
|
10
|
-
let read = this._arrayBuffer.frames(framePos, frameLen, bufs);
|
|
11
|
-
subscriber.next(read);
|
|
12
|
-
subscriber.complete();
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX3JhbmRvbV9hY2Nlc3Nfc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlcl9yYW5kb21fYWNjZXNzX3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE1BQU0sT0FBTyxrQ0FBa0M7SUFFN0MsWUFBb0IsWUFBNkI7UUFBN0IsaUJBQVksR0FBWixZQUFZLENBQWlCO0lBQ2pELENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsSUFBb0I7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FBUyxVQUFVLENBQUMsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbX0gZnJvbSBcIi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlclJhbmRvbUFjY2Vzc1N0cmVhbSBpbXBsZW1lbnRzIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcnJheUJ1ZmZlcjpBcnJheUF1ZGlvQnVmZmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGZyYW1lc09icyhmcmFtZVBvczogbnVtYmVyLCBmcmFtZUxlbjogbnVtYmVyLCBidWZzOiBGbG9hdDMyQXJyYXlbXSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8bnVtYmVyPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgbGV0IHJlYWQgPSB0aGlzLl9hcnJheUJ1ZmZlci5mcmFtZXMoZnJhbWVQb3MsIGZyYW1lTGVuLCBidWZzKTtcclxuICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|