@opendaw/studio-core 0.0.126 → 0.0.128
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/AssetService.d.ts.map +1 -1
- package/dist/AssetService.js +7 -7
- package/dist/AudioConsolidation.d.ts.map +1 -1
- package/dist/AudioConsolidation.js +2 -2
- package/dist/EffectBox.d.ts +2 -2
- package/dist/EffectBox.d.ts.map +1 -1
- package/dist/EffectFactories.d.ts +20 -14
- package/dist/EffectFactories.d.ts.map +1 -1
- package/dist/EffectFactories.js +88 -20
- package/dist/EffectFactory.d.ts +1 -0
- package/dist/EffectFactory.d.ts.map +1 -1
- package/dist/Engine.d.ts +2 -1
- package/dist/Engine.d.ts.map +1 -1
- package/dist/EngineFacade.d.ts +2 -1
- package/dist/EngineFacade.d.ts.map +1 -1
- package/dist/EngineFacade.js +3 -0
- package/dist/EngineWorklet.d.ts +2 -1
- package/dist/EngineWorklet.d.ts.map +1 -1
- package/dist/EngineWorklet.js +11 -1
- package/dist/Mixer.d.ts.map +1 -1
- package/dist/Mixer.js +3 -2
- package/dist/OfflineEngineRenderer.d.ts.map +1 -1
- package/dist/OfflineEngineRenderer.js +41 -3
- package/dist/StudioPreferences.d.ts +1 -1
- package/dist/StudioSettings.d.ts +1 -1
- package/dist/StudioSettings.js +2 -2
- package/dist/capture/RecordAudio.d.ts.map +1 -1
- package/dist/capture/RecordAudio.js +48 -18
- package/dist/capture/RecordAutomation.d.ts.map +1 -1
- package/dist/capture/RecordAutomation.js +219 -198
- package/dist/capture/RecordMidi.d.ts.map +1 -1
- package/dist/capture/RecordMidi.js +1 -1
- package/dist/cloud/CloudBackupSamples.js +1 -1
- package/dist/dawproject/DawProjectExporter.js +1 -1
- package/dist/dawproject/DawProjectService.d.ts.map +1 -1
- package/dist/dawproject/DawProjectService.js +3 -16
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/midi/MidiDevices.d.ts.map +1 -1
- package/dist/midi/MidiDevices.js +8 -2
- package/dist/offline-engine.js +1 -1
- package/dist/offline-engine.js.map +3 -3
- package/dist/processors.js +37 -25
- package/dist/processors.js.map +4 -4
- package/dist/project/Project.d.ts.map +1 -1
- package/dist/project/Project.js +30 -5
- package/dist/project/Recovery.js +1 -1
- package/dist/project/migration/MigrateAudioClipBox.d.ts.map +1 -1
- package/dist/project/migration/MigrateAudioClipBox.js +7 -0
- package/dist/project/migration/MigrateAudioRegionBox.d.ts.map +1 -1
- package/dist/project/migration/MigrateAudioRegionBox.js +7 -0
- package/dist/samples/OpenSampleAPI.d.ts.map +1 -1
- package/dist/samples/OpenSampleAPI.js +1 -1
- package/dist/samples/SampleService.js +1 -1
- package/dist/samples/SampleStorage.d.ts.map +1 -1
- package/dist/samples/SampleStorage.js +1 -1
- package/dist/ui/clipboard/ClipboardManager.d.ts.map +1 -1
- package/dist/ui/clipboard/ClipboardManager.js +18 -4
- package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.d.ts.map +1 -1
- package/dist/ui/clipboard/types/AudioUnitsClipboardHandler.js +8 -2
- package/dist/ui/clipboard/types/DevicesClipboardHandler.d.ts.map +1 -1
- package/dist/ui/clipboard/types/DevicesClipboardHandler.js +77 -10
- package/dist/ui/clipboard/types/DevicesClipboardHandler.test.d.ts +2 -0
- package/dist/ui/clipboard/types/DevicesClipboardHandler.test.d.ts.map +1 -0
- package/dist/ui/clipboard/types/DevicesClipboardHandler.test.js +1154 -0
- package/dist/ui/timeline/RegionClipResolver.d.ts.map +1 -1
- package/dist/ui/timeline/RegionClipResolver.js +21 -29
- package/dist/ui/timeline/TimeGrid.d.ts +2 -0
- package/dist/ui/timeline/TimeGrid.d.ts.map +1 -1
- package/dist/ui/timeline/TimeGrid.js +13 -1
- package/dist/workers-main.js +1 -1
- package/dist/workers-main.js.map +3 -3
- package/dist/ysync/YService.d.ts +6 -1
- package/dist/ysync/YService.d.ts.map +1 -1
- package/dist/ysync/YService.js +2 -2
- package/dist/ysync/YSync.d.ts.map +1 -1
- package/dist/ysync/YSync.js +1 -0
- package/package.json +15 -15
- package/dist/WavFile.d.ts +0 -7
- package/dist/WavFile.d.ts.map +0 -1
- package/dist/WavFile.js +0 -120
package/dist/ysync/YService.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { Option } from "@opendaw/lib-std";
|
|
2
2
|
import { Project, ProjectEnv } from "../project";
|
|
3
|
+
import { WebsocketProvider } from "y-websocket";
|
|
3
4
|
export declare namespace YService {
|
|
4
|
-
|
|
5
|
+
type RoomResult = {
|
|
6
|
+
project: Project;
|
|
7
|
+
provider: WebsocketProvider;
|
|
8
|
+
};
|
|
9
|
+
const getOrCreateRoom: (optProject: Option<Project>, env: ProjectEnv, roomName: string) => Promise<RoomResult>;
|
|
5
10
|
}
|
|
6
11
|
//# sourceMappingURL=YService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YService.d.ts","sourceRoot":"","sources":["../../src/ysync/YService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAyC,MAAM,kBAAkB,CAAA;AAKvF,OAAO,EAAC,OAAO,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"YService.d.ts","sourceRoot":"","sources":["../../src/ysync/YService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAAyC,MAAM,kBAAkB,CAAA;AAKvF,OAAO,EAAC,OAAO,EAAE,UAAU,EAAmB,MAAM,YAAY,CAAA;AAGhE,OAAO,EAAC,iBAAiB,EAAC,MAAM,aAAa,CAAA;AAI7C,yBAAiB,QAAQ,CAAC;IAMtB,KAAY,UAAU,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,iBAAiB,CAAA;KAAE,CAAA;IAEnE,MAAM,eAAe,GAAU,YAAY,MAAM,CAAC,OAAO,CAAC,EAC3B,KAAK,UAAU,EACf,UAAU,MAAM,KAAG,OAAO,CAAC,UAAU,CA+D1E,CAAA;CACJ"}
|
package/dist/ysync/YService.js
CHANGED
|
@@ -49,7 +49,7 @@ export var YService;
|
|
|
49
49
|
// TODO Remove this cast at some point
|
|
50
50
|
const editing = project.editing;
|
|
51
51
|
editing.disable();
|
|
52
|
-
return project;
|
|
52
|
+
return { project, provider };
|
|
53
53
|
}
|
|
54
54
|
else {
|
|
55
55
|
if (optProject.nonEmpty()) {
|
|
@@ -77,7 +77,7 @@ export var YService;
|
|
|
77
77
|
project.own(sync);
|
|
78
78
|
const editing = project.editing;
|
|
79
79
|
editing.disable();
|
|
80
|
-
return project;
|
|
80
|
+
return { project, provider };
|
|
81
81
|
}
|
|
82
82
|
};
|
|
83
83
|
})(YService || (YService = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"YSync.d.ts","sourceRoot":"","sources":["../../src/ysync/YSync.ts"],"names":[],"mappings":"AAAA,OAAO,EASH,QAAQ,EAER,UAAU,EAGb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAa,QAAQ,EAA2D,MAAM,kBAAkB,CAAA;AAE/G,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,qBAAa,KAAK,CAAC,CAAC,CAAE,YAAW,UAAU;;IACvC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO;WAItB,YAAY,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;WAcnE,QAAQ,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAyBhE,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAQrD,SAAS,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"YSync.d.ts","sourceRoot":"","sources":["../../src/ysync/YSync.ts"],"names":[],"mappings":"AAAA,OAAO,EASH,QAAQ,EAER,UAAU,EAGb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAa,QAAQ,EAA2D,MAAM,kBAAkB,CAAA;AAE/G,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAIxB,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACvB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,qBAAa,KAAK,CAAC,CAAC,CAAE,YAAW,UAAU;;IACvC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,GAAG,OAAO;WAItB,YAAY,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;WAcnE,QAAQ,CAAC,CAAC,EAAE,EAAC,QAAQ,EAAE,KAAK,EAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAyBhE,EAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAQrD,SAAS,IAAI,IAAI;CAkLpB"}
|
package/dist/ysync/YSync.js
CHANGED
|
@@ -111,6 +111,7 @@ export class YSync {
|
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
#updateValue(path, key) {
|
|
114
|
+
console.debug(`#updateValue`, path, key);
|
|
114
115
|
const vertexOption = this.#boxGraph.findVertex(YMapper.pathToAddress(path, key));
|
|
115
116
|
if (vertexOption.isEmpty()) {
|
|
116
117
|
console.debug(`Vertex at '${path}' does not exist. Ignoring.`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendaw/studio-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.128",
|
|
4
4
|
"license": "LGPL-3.0-or-later",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -33,17 +33,17 @@
|
|
|
33
33
|
"test": "vitest run --config vitest.config.ts"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@opendaw/lib-box": "^0.0.
|
|
37
|
-
"@opendaw/lib-dawproject": "^0.0.
|
|
38
|
-
"@opendaw/lib-dom": "^0.0.
|
|
39
|
-
"@opendaw/lib-dsp": "^0.0.
|
|
40
|
-
"@opendaw/lib-fusion": "^0.0.
|
|
41
|
-
"@opendaw/lib-runtime": "^0.0.
|
|
42
|
-
"@opendaw/lib-std": "^0.0.
|
|
36
|
+
"@opendaw/lib-box": "^0.0.80",
|
|
37
|
+
"@opendaw/lib-dawproject": "^0.0.65",
|
|
38
|
+
"@opendaw/lib-dom": "^0.0.79",
|
|
39
|
+
"@opendaw/lib-dsp": "^0.0.79",
|
|
40
|
+
"@opendaw/lib-fusion": "^0.0.87",
|
|
41
|
+
"@opendaw/lib-runtime": "^0.0.75",
|
|
42
|
+
"@opendaw/lib-std": "^0.0.74",
|
|
43
43
|
"@opendaw/nam-wasm": "^1.0.3",
|
|
44
|
-
"@opendaw/studio-adapters": "^0.0.
|
|
45
|
-
"@opendaw/studio-boxes": "^0.0.
|
|
46
|
-
"@opendaw/studio-enums": "^0.0.
|
|
44
|
+
"@opendaw/studio-adapters": "^0.0.101",
|
|
45
|
+
"@opendaw/studio-boxes": "^0.0.85",
|
|
46
|
+
"@opendaw/studio-enums": "^0.0.70",
|
|
47
47
|
"dropbox": "^10.34.0",
|
|
48
48
|
"y-websocket": "^1.4.5",
|
|
49
49
|
"yjs": "^13.6.27",
|
|
@@ -57,10 +57,10 @@
|
|
|
57
57
|
"@ffmpeg/ffmpeg": "^0.12.15",
|
|
58
58
|
"@ffmpeg/util": "^0.12.2",
|
|
59
59
|
"@opendaw/eslint-config": "^0.0.27",
|
|
60
|
-
"@opendaw/studio-core-processors": "^0.0.
|
|
61
|
-
"@opendaw/studio-core-workers": "^0.0.
|
|
62
|
-
"@opendaw/studio-forge-boxes": "^0.0.
|
|
60
|
+
"@opendaw/studio-core-processors": "^0.0.105",
|
|
61
|
+
"@opendaw/studio-core-workers": "^0.0.96",
|
|
62
|
+
"@opendaw/studio-forge-boxes": "^0.0.85",
|
|
63
63
|
"@opendaw/typescript-config": "^0.0.29"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "7ccb6855109bc13274fd83ec5dc4ea2302d83b8e"
|
|
66
66
|
}
|
package/dist/WavFile.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { int } from "@opendaw/lib-std";
|
|
2
|
-
import { AudioData } from "@opendaw/lib-dsp";
|
|
3
|
-
export declare namespace WavFile {
|
|
4
|
-
const decodeFloats: (buffer: ArrayBuffer) => AudioData;
|
|
5
|
-
const encodeFloats: (audio: AudioData | AudioBuffer, maxLength?: int) => ArrayBuffer;
|
|
6
|
-
}
|
|
7
|
-
//# sourceMappingURL=WavFile.d.ts.map
|
package/dist/WavFile.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"WavFile.d.ts","sourceRoot":"","sources":["../src/WavFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,GAAG,EAAQ,MAAM,kBAAkB,CAAA;AACnD,OAAO,EAAC,SAAS,EAAC,MAAM,kBAAkB,CAAA;AAE1C,yBAAiB,OAAO,CAAC;IAMd,MAAM,YAAY,GAAI,QAAQ,WAAW,KAAG,SAgElD,CAAA;IAEM,MAAM,YAAY,GAAI,OAAO,SAAS,GAAG,WAAW,EAAE,YAAW,GAA6B,KAAG,WAwCvG,CAAA;CACJ"}
|
package/dist/WavFile.js
DELETED
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
import { Arrays, panic } from "@opendaw/lib-std";
|
|
2
|
-
import { AudioData } from "@opendaw/lib-dsp";
|
|
3
|
-
export var WavFile;
|
|
4
|
-
(function (WavFile) {
|
|
5
|
-
const MAGIC_RIFF = 0x46464952;
|
|
6
|
-
const MAGIC_WAVE = 0x45564157;
|
|
7
|
-
const MAGIC_FMT = 0x20746d66;
|
|
8
|
-
const MAGIC_DATA = 0x61746164;
|
|
9
|
-
WavFile.decodeFloats = (buffer) => {
|
|
10
|
-
const view = new DataView(buffer);
|
|
11
|
-
if (view.getUint32(0, true) !== MAGIC_RIFF
|
|
12
|
-
|| view.getUint32(8, true) !== MAGIC_WAVE) {
|
|
13
|
-
return panic("Not a RIFF/WAVE file");
|
|
14
|
-
}
|
|
15
|
-
let fmtOffset = -1;
|
|
16
|
-
let dataOffset = -1;
|
|
17
|
-
let dataSize = 0;
|
|
18
|
-
for (let o = 12; o + 8 <= view.byteLength;) {
|
|
19
|
-
const id = view.getUint32(o, true);
|
|
20
|
-
const size = view.getUint32(o + 4, true);
|
|
21
|
-
const next = o + 8 + ((size + 1) & ~1);
|
|
22
|
-
if (id === MAGIC_FMT)
|
|
23
|
-
fmtOffset = o + 8;
|
|
24
|
-
if (id === MAGIC_DATA) {
|
|
25
|
-
dataOffset = o + 8;
|
|
26
|
-
dataSize = size;
|
|
27
|
-
}
|
|
28
|
-
o = next;
|
|
29
|
-
}
|
|
30
|
-
if (fmtOffset < 0 || dataOffset < 0) {
|
|
31
|
-
return panic("Missing fmt or data chunk");
|
|
32
|
-
}
|
|
33
|
-
const audioFormat = view.getUint16(fmtOffset, true); // 1 = PCM, 3 = IEEE float
|
|
34
|
-
const numberOfChannels = view.getUint16(fmtOffset + 2, true);
|
|
35
|
-
const sampleRate = view.getUint32(fmtOffset + 4, true);
|
|
36
|
-
const blockAlign = view.getUint16(fmtOffset + 12, true);
|
|
37
|
-
const bitsPerSample = view.getUint16(fmtOffset + 14, true);
|
|
38
|
-
const bytesPerSample = bitsPerSample / 8;
|
|
39
|
-
if (blockAlign !== numberOfChannels * bytesPerSample) {
|
|
40
|
-
return panic("Invalid block alignment");
|
|
41
|
-
}
|
|
42
|
-
const numberOfFrames = Math.floor(dataSize / blockAlign);
|
|
43
|
-
const audioData = AudioData.create(sampleRate, numberOfFrames, numberOfChannels);
|
|
44
|
-
if (audioFormat === 3 && bitsPerSample === 32) {
|
|
45
|
-
// 32-bit float
|
|
46
|
-
const interleaved = new Float32Array(buffer, dataOffset, numberOfFrames * numberOfChannels);
|
|
47
|
-
for (let i = 0, w = 0; i < numberOfFrames; i++) {
|
|
48
|
-
for (let c = 0; c < numberOfChannels; c++) {
|
|
49
|
-
audioData.frames[c][i] = interleaved[w++];
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else if (audioFormat === 1 && bitsPerSample === 16) {
|
|
54
|
-
// 16-bit PCM
|
|
55
|
-
for (let i = 0, offset = dataOffset; i < numberOfFrames; i++) {
|
|
56
|
-
for (let c = 0; c < numberOfChannels; c++) {
|
|
57
|
-
audioData.frames[c][i] = view.getInt16(offset, true) / 32768;
|
|
58
|
-
offset += 2;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
else if (audioFormat === 1 && bitsPerSample === 24) {
|
|
63
|
-
// 24-bit PCM
|
|
64
|
-
for (let i = 0, offset = dataOffset; i < numberOfFrames; i++) {
|
|
65
|
-
for (let c = 0; c < numberOfChannels; c++) {
|
|
66
|
-
const low = view.getUint16(offset, true);
|
|
67
|
-
const high = view.getInt8(offset + 2);
|
|
68
|
-
audioData.frames[c][i] = (high * 65536 + low) / 8388608;
|
|
69
|
-
offset += 3;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
return panic(`Unsupported WAV format: ${audioFormat}, ${bitsPerSample}-bit`);
|
|
75
|
-
}
|
|
76
|
-
return audioData;
|
|
77
|
-
};
|
|
78
|
-
WavFile.encodeFloats = (audio, maxLength = Number.MAX_SAFE_INTEGER) => {
|
|
79
|
-
const bytesPerChannel = Float32Array.BYTES_PER_ELEMENT;
|
|
80
|
-
const sampleRate = audio.sampleRate;
|
|
81
|
-
let numberOfFrames;
|
|
82
|
-
let numberOfChannels;
|
|
83
|
-
let frames;
|
|
84
|
-
if (audio instanceof AudioBuffer) {
|
|
85
|
-
frames = Arrays.create(index => audio.getChannelData(index), audio.numberOfChannels);
|
|
86
|
-
numberOfFrames = audio.length;
|
|
87
|
-
numberOfChannels = audio.numberOfChannels;
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
frames = audio.frames;
|
|
91
|
-
numberOfFrames = audio.numberOfFrames;
|
|
92
|
-
numberOfChannels = audio.frames.length;
|
|
93
|
-
}
|
|
94
|
-
numberOfFrames = Math.min(maxLength, numberOfFrames);
|
|
95
|
-
const size = 44 + numberOfFrames * numberOfChannels * bytesPerChannel;
|
|
96
|
-
const buf = new ArrayBuffer(size);
|
|
97
|
-
const view = new DataView(buf);
|
|
98
|
-
view.setUint32(0, MAGIC_RIFF, true);
|
|
99
|
-
view.setUint32(4, size - 8, true);
|
|
100
|
-
view.setUint32(8, MAGIC_WAVE, true);
|
|
101
|
-
view.setUint32(12, MAGIC_FMT, true);
|
|
102
|
-
view.setUint32(16, 16, true); // chunk length
|
|
103
|
-
view.setUint16(20, 3, true); // compression
|
|
104
|
-
view.setUint16(22, numberOfChannels, true);
|
|
105
|
-
view.setUint32(24, sampleRate, true);
|
|
106
|
-
view.setUint32(28, sampleRate * numberOfChannels * bytesPerChannel, true);
|
|
107
|
-
view.setUint16(32, numberOfChannels * bytesPerChannel, true);
|
|
108
|
-
view.setUint16(34, 8 * bytesPerChannel, true);
|
|
109
|
-
view.setUint32(36, MAGIC_DATA, true);
|
|
110
|
-
view.setUint32(40, numberOfChannels * numberOfFrames * bytesPerChannel, true);
|
|
111
|
-
let w = 44;
|
|
112
|
-
for (let i = 0; i < numberOfFrames; ++i) {
|
|
113
|
-
for (let j = 0; j < numberOfChannels; ++j) {
|
|
114
|
-
view.setFloat32(w, frames[j][i], true);
|
|
115
|
-
w += bytesPerChannel;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
return view.buffer;
|
|
119
|
-
};
|
|
120
|
-
})(WavFile || (WavFile = {}));
|