@xsynaptic/sonic-ui 0.18.0 → 0.19.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/CHANGELOG.md +15 -0
- package/README.md +12 -2
- package/dist/default/elements/button.js +0 -5
- package/dist/default/elements/dial.js +0 -7
- package/dist/default/elements/display-element.js +0 -5
- package/dist/default/elements/envelope.js +0 -6
- package/dist/default/elements/meter.js +0 -1
- package/dist/default/elements/number.js +0 -7
- package/dist/default/elements/segmented.js +0 -5
- package/dist/default/elements/slider.js +0 -7
- package/dist/default/elements/sonic-element.js +3 -1
- package/dist/default/elements/switch.js +0 -1
- package/dist/default/elements/toggle.js +0 -5
- package/dist/default/elements/value-element.js +8 -4
- package/dist/default/elements/wave-element.js +7 -8
- package/dist/default/elements/xy.js +0 -7
- package/dist/default/index.js +2 -1
- package/dist/default/lib/clock.js +23 -0
- package/dist/default/lib/spoken-duration.js +30 -0
- package/dist/default/lib/waveform-buckets.js +7 -1
- package/dist/dev/elements/button.js +12 -5
- package/dist/dev/elements/button.js.map +1 -1
- package/dist/dev/elements/dial.js +14 -7
- package/dist/dev/elements/dial.js.map +1 -1
- package/dist/dev/elements/display-element.js +2 -2
- package/dist/dev/elements/display-element.js.map +1 -1
- package/dist/dev/elements/envelope.js +17 -6
- package/dist/dev/elements/envelope.js.map +1 -1
- package/dist/dev/elements/meter.js +1 -1
- package/dist/dev/elements/meter.js.map +1 -1
- package/dist/dev/elements/number.js +13 -7
- package/dist/dev/elements/number.js.map +1 -1
- package/dist/dev/elements/segmented.js +12 -5
- package/dist/dev/elements/segmented.js.map +1 -1
- package/dist/dev/elements/slider.js +14 -7
- package/dist/dev/elements/slider.js.map +1 -1
- package/dist/dev/elements/sonic-element.d.ts +13 -2
- package/dist/dev/elements/sonic-element.js +63 -11
- package/dist/dev/elements/sonic-element.js.map +1 -1
- package/dist/dev/elements/split.js.map +1 -1
- package/dist/dev/elements/switch.js +7 -1
- package/dist/dev/elements/switch.js.map +1 -1
- package/dist/dev/elements/toggle.js +12 -5
- package/dist/dev/elements/toggle.js.map +1 -1
- package/dist/dev/elements/value-element.d.ts +6 -0
- package/dist/dev/elements/value-element.js +8 -4
- package/dist/dev/elements/value-element.js.map +1 -1
- package/dist/dev/elements/wave-element.d.ts +2 -1
- package/dist/dev/elements/wave-element.js +21 -8
- package/dist/dev/elements/wave-element.js.map +1 -1
- package/dist/dev/elements/waveform.d.ts +1 -1
- package/dist/dev/elements/xy.js +14 -7
- package/dist/dev/elements/xy.js.map +1 -1
- package/dist/dev/index.d.ts +3 -2
- package/dist/dev/index.js +2 -1
- package/dist/dev/lib/clock.d.ts +5 -0
- package/dist/dev/lib/clock.js +24 -0
- package/dist/dev/lib/clock.js.map +1 -0
- package/dist/dev/lib/mirror-children.js.map +1 -1
- package/dist/dev/lib/owned-control.js.map +1 -1
- package/dist/dev/lib/spoken-duration.js +31 -0
- package/dist/dev/lib/spoken-duration.js.map +1 -0
- package/dist/dev/lib/waveform-buckets.d.ts +2 -2
- package/dist/dev/lib/waveform-buckets.js +7 -1
- package/dist/dev/lib/waveform-buckets.js.map +1 -1
- package/dist/skins/amber.css +1 -0
- package/dist/skins/ivory.css +1 -0
- package/dist/skins/lime.css +1 -0
- package/dist/skins/slate.css +1 -0
- package/dist/styles/button.css +29 -5
- package/dist/styles/dial.css +10 -9
- package/dist/styles/envelope.css +10 -4
- package/dist/styles/led.css +5 -1
- package/dist/styles/material/arc.css +3 -2
- package/dist/styles/material/bracket.css +2 -2
- package/dist/styles/material/cap.css +33 -12
- package/dist/styles/material/core.css +4 -0
- package/dist/styles/material/glass.css +1 -1
- package/dist/styles/material/groove.css +4 -3
- package/dist/styles/material/keycap.css +3 -2
- package/dist/styles/material/lens.css +1 -1
- package/dist/styles/material/pane.css +5 -4
- package/dist/styles/material/readout.css +6 -6
- package/dist/styles/material/well.css +2 -2
- package/dist/styles/meter.css +2 -7
- package/dist/styles/number.css +5 -1
- package/dist/styles/panel.css +4 -3
- package/dist/styles/ring.css +1 -1
- package/dist/styles/screen.css +5 -1
- package/dist/styles/segmented.css +17 -4
- package/dist/styles/slider.css +9 -3
- package/dist/styles/spectrum.css +16 -3
- package/dist/styles/switch.css +35 -10
- package/dist/styles/toggle.css +14 -7
- package/dist/styles/waveform.css +15 -4
- package/dist/styles/wavestrip.css +11 -3
- package/dist/styles/xy.css +9 -5
- package/package.json +1 -6
- package/dist/default/dat.js +0 -52
- package/dist/dev/dat.d.ts +0 -20
- package/dist/dev/dat.js +0 -53
- package/dist/dev/dat.js.map +0 -1
package/dist/styles/waveform.css
CHANGED
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
|
|
93
93
|
.sonic-waveform {
|
|
94
94
|
--_sonic-waveform-inset: calc(
|
|
95
|
-
var(--_sonic-waveform-size) * var(--sonic-waveform-inset-ratio, 0
|
|
95
|
+
var(--_sonic-waveform-size) * var(--sonic-waveform-inset-ratio, 0)
|
|
96
96
|
);
|
|
97
97
|
--_sonic-unit: calc(var(--_sonic-waveform-size) / 48);
|
|
98
98
|
--_sonic-glass-depth: var(--sonic-glass-depth, calc(0.6 * var(--_sonic-relief)));
|
|
@@ -104,7 +104,11 @@
|
|
|
104
104
|
--_sonic-waveform-wave: var(--_sonic-waveform-lit);
|
|
105
105
|
--_sonic-waveform-wave-edge: var(
|
|
106
106
|
--sonic-waveform-edge,
|
|
107
|
-
color-mix(
|
|
107
|
+
color-mix(
|
|
108
|
+
in oklab,
|
|
109
|
+
var(--_sonic-waveform-lit) calc(100% - 55% * var(--_sonic-relief)),
|
|
110
|
+
var(--_sonic-shade)
|
|
111
|
+
)
|
|
108
112
|
);
|
|
109
113
|
--_sonic-waveform-grid: var(--sonic-waveform-grid, var(--_sonic-etch));
|
|
110
114
|
--_sonic-waveform-ends: var(--sonic-waveform-ends, var(--_sonic-etch));
|
|
@@ -135,8 +139,15 @@
|
|
|
135
139
|
touch-action: var(--sonic-touch-action, pan-y);
|
|
136
140
|
cursor: grab;
|
|
137
141
|
|
|
138
|
-
--_sonic-
|
|
139
|
-
var(--_sonic-waveform-size) * var(--sonic-waveform-radius-ratio
|
|
142
|
+
--_sonic-waveform-radius-own: calc(
|
|
143
|
+
var(--_sonic-waveform-size) * var(--sonic-waveform-radius-ratio)
|
|
144
|
+
);
|
|
145
|
+
--_sonic-glass-radius: var(
|
|
146
|
+
--_sonic-waveform-radius-own,
|
|
147
|
+
var(
|
|
148
|
+
--sonic-radius,
|
|
149
|
+
calc(var(--_sonic-waveform-size) * var(--sonic-waveform-radius-ratio, 0.08))
|
|
150
|
+
)
|
|
140
151
|
);
|
|
141
152
|
|
|
142
153
|
border-radius: var(--_sonic-glass-radius);
|
|
@@ -111,7 +111,7 @@
|
|
|
111
111
|
--_sonic-wavestrip-groove-size: var(--sonic-wavestrip-groove-size, 0px);
|
|
112
112
|
--_sonic-wavestrip-marker-ratio: var(--sonic-wavestrip-marker-ratio, 0.065);
|
|
113
113
|
--_sonic-wavestrip-inset: calc(
|
|
114
|
-
var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-inset-ratio, 0
|
|
114
|
+
var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-inset-ratio, 0)
|
|
115
115
|
);
|
|
116
116
|
--_sonic-unit: calc(var(--_sonic-wavestrip-size) / 32);
|
|
117
117
|
--_sonic-wavestrip-lit: var(--_sonic-lit);
|
|
@@ -143,8 +143,15 @@
|
|
|
143
143
|
touch-action: var(--sonic-touch-action, pan-y);
|
|
144
144
|
cursor: ew-resize;
|
|
145
145
|
|
|
146
|
-
--_sonic-
|
|
147
|
-
var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-radius-ratio
|
|
146
|
+
--_sonic-wavestrip-radius-own: calc(
|
|
147
|
+
var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-radius-ratio)
|
|
148
|
+
);
|
|
149
|
+
--_sonic-glass-radius: var(
|
|
150
|
+
--_sonic-wavestrip-radius-own,
|
|
151
|
+
var(
|
|
152
|
+
--sonic-radius,
|
|
153
|
+
calc(var(--_sonic-wavestrip-size) * var(--sonic-wavestrip-radius-ratio, 0.15))
|
|
154
|
+
)
|
|
148
155
|
);
|
|
149
156
|
|
|
150
157
|
border-radius: var(--_sonic-glass-radius);
|
|
@@ -170,6 +177,7 @@
|
|
|
170
177
|
display: block;
|
|
171
178
|
inline-size: 100%;
|
|
172
179
|
block-size: 100%;
|
|
180
|
+
border-radius: max(0px, var(--_sonic-glass-radius) - var(--_sonic-wavestrip-inset));
|
|
173
181
|
}
|
|
174
182
|
|
|
175
183
|
.sonic-wavestrip-markers {
|
package/dist/styles/xy.css
CHANGED
|
@@ -41,7 +41,11 @@
|
|
|
41
41
|
touch-action: none;
|
|
42
42
|
cursor: crosshair;
|
|
43
43
|
|
|
44
|
-
--_sonic-
|
|
44
|
+
--_sonic-xy-radius-own: calc(var(--_sonic-xy-size) * var(--sonic-xy-radius-ratio));
|
|
45
|
+
--_sonic-glass-radius: var(
|
|
46
|
+
--_sonic-xy-radius-own,
|
|
47
|
+
var(--sonic-radius, calc(var(--_sonic-xy-size) * var(--_sonic-xy-radius-ratio)))
|
|
48
|
+
);
|
|
45
49
|
|
|
46
50
|
border-radius: var(--_sonic-glass-radius);
|
|
47
51
|
}
|
|
@@ -144,7 +148,7 @@
|
|
|
144
148
|
|
|
145
149
|
cursor: var(--_sonic-xy-cursor);
|
|
146
150
|
filter: drop-shadow(0 0 calc(0.15 * var(--_sonic-xy-puck)) var(--_sonic-xy-puck-glow));
|
|
147
|
-
transition: filter
|
|
151
|
+
transition: filter var(--_sonic-fade-duration) ease-out;
|
|
148
152
|
|
|
149
153
|
&::before {
|
|
150
154
|
position: absolute;
|
|
@@ -156,9 +160,9 @@
|
|
|
156
160
|
border-radius: 50%;
|
|
157
161
|
box-shadow: var(--_sonic-xy-puck-ring);
|
|
158
162
|
transition:
|
|
159
|
-
background-color
|
|
160
|
-
border-color
|
|
161
|
-
box-shadow
|
|
163
|
+
background-color var(--_sonic-fade-duration) ease-out,
|
|
164
|
+
border-color var(--_sonic-fade-duration) ease-out,
|
|
165
|
+
box-shadow var(--_sonic-fade-duration) ease-out;
|
|
162
166
|
}
|
|
163
167
|
}
|
|
164
168
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xsynaptic/sonic-ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
4
4
|
"description": "Native custom elements for audio interfaces, skinned with CSS custom properties",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"custom-elements",
|
|
@@ -38,11 +38,6 @@
|
|
|
38
38
|
"development": "./dist/dev/index.js",
|
|
39
39
|
"import": "./dist/default/index.js"
|
|
40
40
|
},
|
|
41
|
-
"./dat": {
|
|
42
|
-
"types": "./dist/dev/dat.d.ts",
|
|
43
|
-
"development": "./dist/dev/dat.js",
|
|
44
|
-
"import": "./dist/default/dat.js"
|
|
45
|
-
},
|
|
46
41
|
"./define": {
|
|
47
42
|
"types": "./dist/dev/define.d.ts",
|
|
48
43
|
"development": "./dist/dev/define.js",
|
package/dist/default/dat.js
DELETED
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { clamp } from "./lib/math.js";
|
|
2
|
-
|
|
3
|
-
//#region src/dat.ts
|
|
4
|
-
function readVersion(view) {
|
|
5
|
-
const version = view.getInt32(0, true);
|
|
6
|
-
if (version === 1 || version === 2) return version;
|
|
7
|
-
throw new Error(`A .dat file of version ${String(version)} is not one this reads`);
|
|
8
|
-
}
|
|
9
|
-
function readDatHeader(buffer) {
|
|
10
|
-
if (buffer.byteLength < 20) throw new Error("A .dat header takes at least 20 bytes");
|
|
11
|
-
const view = new DataView(buffer);
|
|
12
|
-
const version = readVersion(view);
|
|
13
|
-
const dataOffset = version === 1 ? 20 : 24;
|
|
14
|
-
if (buffer.byteLength < dataOffset) throw new Error(`A version ${String(version)} .dat header takes ${String(dataOffset)} bytes`);
|
|
15
|
-
const channels = version === 1 ? 1 : view.getInt32(20, true);
|
|
16
|
-
if (channels < 1) throw new Error("A .dat header names no channels");
|
|
17
|
-
const sampleRate = view.getInt32(8, true);
|
|
18
|
-
const samplesPerPixel = view.getInt32(12, true);
|
|
19
|
-
if (samplesPerPixel < 1) throw new Error("A .dat header names no samples per pixel");
|
|
20
|
-
return {
|
|
21
|
-
bits: (view.getUint32(4, true) & 1) === 1 ? 8 : 16,
|
|
22
|
-
channels,
|
|
23
|
-
dataOffset,
|
|
24
|
-
pairs: view.getUint32(16, true),
|
|
25
|
-
pairsPerSecond: sampleRate / samplesPerPixel,
|
|
26
|
-
sampleRate,
|
|
27
|
-
samplesPerPixel,
|
|
28
|
-
version
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/** An inclusive byte range for a `Range` header; `undefined` when the pairs asked for are empty */
|
|
32
|
-
function datByteRange(header, fromPair, toPair) {
|
|
33
|
-
const from = clamp(Math.floor(fromPair), 0, header.pairs);
|
|
34
|
-
const to = clamp(Math.ceil(toPair), from, header.pairs);
|
|
35
|
-
if (!(to > from)) return void 0;
|
|
36
|
-
const pairBytes = header.channels * 2 * header.bits / 8;
|
|
37
|
-
return [header.dataOffset + from * pairBytes, header.dataOffset + to * pairBytes - 1];
|
|
38
|
-
}
|
|
39
|
-
function readDatSamples(header, body, byteOffset = 0) {
|
|
40
|
-
return header.bits === 8 ? new Int8Array(body, byteOffset) : new Int16Array(body, byteOffset, Math.floor((body.byteLength - byteOffset) / 2));
|
|
41
|
-
}
|
|
42
|
-
function readDatPeaks(header, body, byteOffset = 0) {
|
|
43
|
-
return {
|
|
44
|
-
channels: header.channels,
|
|
45
|
-
fullScale: header.bits === 8 ? 128 : 32768,
|
|
46
|
-
pairsPerSecond: header.pairsPerSecond,
|
|
47
|
-
samples: readDatSamples(header, body, byteOffset)
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
//#endregion
|
|
52
|
-
export { datByteRange, readDatHeader, readDatPeaks, readDatSamples };
|
package/dist/dev/dat.d.ts
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { WaveformPeaks } from "./lib/waveform-buckets.js";
|
|
2
|
-
//#region src/dat.d.ts
|
|
3
|
-
export interface DatHeader {
|
|
4
|
-
bits: 8 | 16;
|
|
5
|
-
channels: number;
|
|
6
|
-
dataOffset: number;
|
|
7
|
-
pairs: number;
|
|
8
|
-
pairsPerSecond: number;
|
|
9
|
-
sampleRate: number;
|
|
10
|
-
samplesPerPixel: number;
|
|
11
|
-
version: 1 | 2;
|
|
12
|
-
}
|
|
13
|
-
export declare function readDatHeader(buffer: ArrayBuffer): DatHeader;
|
|
14
|
-
/** An inclusive byte range for a `Range` header; `undefined` when the pairs asked for are empty */
|
|
15
|
-
export declare function datByteRange(header: DatHeader, fromPair: number, toPair: number): [number, number] | undefined;
|
|
16
|
-
export declare function readDatSamples(header: DatHeader, body: ArrayBuffer, byteOffset?: number): Int8Array | Int16Array;
|
|
17
|
-
export declare function readDatPeaks(header: DatHeader, body: ArrayBuffer, byteOffset?: number): WaveformPeaks;
|
|
18
|
-
//#endregion
|
|
19
|
-
export type { WaveformPeaks };
|
|
20
|
-
//# sourceMappingURL=dat.d.ts.map
|
package/dist/dev/dat.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { clamp } from "./lib/math.js";
|
|
2
|
-
|
|
3
|
-
//#region src/dat.ts
|
|
4
|
-
function readVersion(view) {
|
|
5
|
-
const version = view.getInt32(0, true);
|
|
6
|
-
if (version === 1 || version === 2) return version;
|
|
7
|
-
throw new Error(`A .dat file of version ${String(version)} is not one this reads`);
|
|
8
|
-
}
|
|
9
|
-
function readDatHeader(buffer) {
|
|
10
|
-
if (buffer.byteLength < 20) throw new Error("A .dat header takes at least 20 bytes");
|
|
11
|
-
const view = new DataView(buffer);
|
|
12
|
-
const version = readVersion(view);
|
|
13
|
-
const dataOffset = version === 1 ? 20 : 24;
|
|
14
|
-
if (buffer.byteLength < dataOffset) throw new Error(`A version ${String(version)} .dat header takes ${String(dataOffset)} bytes`);
|
|
15
|
-
const channels = version === 1 ? 1 : view.getInt32(20, true);
|
|
16
|
-
if (channels < 1) throw new Error("A .dat header names no channels");
|
|
17
|
-
const sampleRate = view.getInt32(8, true);
|
|
18
|
-
const samplesPerPixel = view.getInt32(12, true);
|
|
19
|
-
if (samplesPerPixel < 1) throw new Error("A .dat header names no samples per pixel");
|
|
20
|
-
return {
|
|
21
|
-
bits: (view.getUint32(4, true) & 1) === 1 ? 8 : 16,
|
|
22
|
-
channels,
|
|
23
|
-
dataOffset,
|
|
24
|
-
pairs: view.getUint32(16, true),
|
|
25
|
-
pairsPerSecond: sampleRate / samplesPerPixel,
|
|
26
|
-
sampleRate,
|
|
27
|
-
samplesPerPixel,
|
|
28
|
-
version
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
/** An inclusive byte range for a `Range` header; `undefined` when the pairs asked for are empty */
|
|
32
|
-
function datByteRange(header, fromPair, toPair) {
|
|
33
|
-
const from = clamp(Math.floor(fromPair), 0, header.pairs);
|
|
34
|
-
const to = clamp(Math.ceil(toPair), from, header.pairs);
|
|
35
|
-
if (!(to > from)) return void 0;
|
|
36
|
-
const pairBytes = header.channels * 2 * header.bits / 8;
|
|
37
|
-
return [header.dataOffset + from * pairBytes, header.dataOffset + to * pairBytes - 1];
|
|
38
|
-
}
|
|
39
|
-
function readDatSamples(header, body, byteOffset = 0) {
|
|
40
|
-
return header.bits === 8 ? new Int8Array(body, byteOffset) : new Int16Array(body, byteOffset, Math.floor((body.byteLength - byteOffset) / 2));
|
|
41
|
-
}
|
|
42
|
-
function readDatPeaks(header, body, byteOffset = 0) {
|
|
43
|
-
return {
|
|
44
|
-
channels: header.channels,
|
|
45
|
-
fullScale: header.bits === 8 ? 128 : 32768,
|
|
46
|
-
pairsPerSecond: header.pairsPerSecond,
|
|
47
|
-
samples: readDatSamples(header, body, byteOffset)
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
//#endregion
|
|
52
|
-
export { datByteRange, readDatHeader, readDatPeaks, readDatSamples };
|
|
53
|
-
//# sourceMappingURL=dat.js.map
|
package/dist/dev/dat.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dat.js","names":[],"sources":["../../src/dat.ts"],"sourcesContent":["import type { WaveformPeaks } from '#lib/waveform-buckets.ts';\n\nimport { clamp } from '#lib/math.ts';\n\nexport type { WaveformPeaks } from '#lib/waveform-buckets.ts';\n\nexport interface DatHeader {\n\tbits: 8 | 16;\n\tchannels: number;\n\tdataOffset: number;\n\tpairs: number;\n\tpairsPerSecond: number;\n\tsampleRate: number;\n\tsamplesPerPixel: number;\n\tversion: 1 | 2;\n}\n\nfunction readVersion(view: DataView): 1 | 2 {\n\tconst version = view.getInt32(0, true);\n\tif (version === 1 || version === 2) return version;\n\n\tthrow new Error(`A .dat file of version ${String(version)} is not one this reads`);\n}\n\nexport function readDatHeader(buffer: ArrayBuffer): DatHeader {\n\tif (buffer.byteLength < 20) throw new Error('A .dat header takes at least 20 bytes');\n\n\tconst view = new DataView(buffer);\n\tconst version = readVersion(view);\n\tconst dataOffset = version === 1 ? 20 : 24;\n\tif (buffer.byteLength < dataOffset) {\n\t\tthrow new Error(`A version ${String(version)} .dat header takes ${String(dataOffset)} bytes`);\n\t}\n\n\tconst channels = version === 1 ? 1 : view.getInt32(20, true);\n\tif (channels < 1) throw new Error('A .dat header names no channels');\n\n\tconst sampleRate = view.getInt32(8, true);\n\tconst samplesPerPixel = view.getInt32(12, true);\n\tif (samplesPerPixel < 1) throw new Error('A .dat header names no samples per pixel');\n\n\treturn {\n\t\tbits: (view.getUint32(4, true) & 1) === 1 ? 8 : 16,\n\t\tchannels,\n\t\tdataOffset,\n\t\tpairs: view.getUint32(16, true),\n\t\tpairsPerSecond: sampleRate / samplesPerPixel,\n\t\tsampleRate,\n\t\tsamplesPerPixel,\n\t\tversion,\n\t};\n}\n\n/** An inclusive byte range for a `Range` header; `undefined` when the pairs asked for are empty */\nexport function datByteRange(\n\theader: DatHeader,\n\tfromPair: number,\n\ttoPair: number,\n): [number, number] | undefined {\n\tconst from = clamp(Math.floor(fromPair), 0, header.pairs);\n\tconst to = clamp(Math.ceil(toPair), from, header.pairs);\n\t// A server ignores an inverted `Range` and sends the whole file\n\tif (!(to > from)) return undefined;\n\n\tconst pairBytes = (header.channels * 2 * header.bits) / 8;\n\n\treturn [header.dataOffset + from * pairBytes, header.dataOffset + to * pairBytes - 1];\n}\n\n// Typed arrays read the platform's byte order; every browser platform is little-endian, as the format is\n// A range response can end mid-sample; the odd byte is dropped\nexport function readDatSamples(\n\theader: DatHeader,\n\tbody: ArrayBuffer,\n\tbyteOffset = 0,\n): Int8Array | Int16Array {\n\treturn header.bits === 8\n\t\t? new Int8Array(body, byteOffset)\n\t\t: new Int16Array(body, byteOffset, Math.floor((body.byteLength - byteOffset) / 2));\n}\n\nexport function readDatPeaks(header: DatHeader, body: ArrayBuffer, byteOffset = 0): WaveformPeaks {\n\treturn {\n\t\tchannels: header.channels,\n\t\tfullScale: header.bits === 8 ? 128 : 32_768,\n\t\tpairsPerSecond: header.pairsPerSecond,\n\t\tsamples: readDatSamples(header, body, byteOffset),\n\t};\n}\n"],"mappings":";;;AAiBA,SAAS,YAAY,MAAuB;CAC3C,MAAM,UAAU,KAAK,SAAS,GAAG,IAAI;CACrC,IAAI,YAAY,KAAK,YAAY,GAAG,OAAO;CAE3C,MAAM,IAAI,MAAM,0BAA0B,OAAO,OAAO,EAAE,uBAAuB;AAClF;AAEA,SAAgB,cAAc,QAAgC;CAC7D,IAAI,OAAO,aAAa,IAAI,MAAM,IAAI,MAAM,uCAAuC;CAEnF,MAAM,OAAO,IAAI,SAAS,MAAM;CAChC,MAAM,UAAU,YAAY,IAAI;CAChC,MAAM,aAAa,YAAY,IAAI,KAAK;CACxC,IAAI,OAAO,aAAa,YACvB,MAAM,IAAI,MAAM,aAAa,OAAO,OAAO,EAAE,qBAAqB,OAAO,UAAU,EAAE,OAAO;CAG7F,MAAM,WAAW,YAAY,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI;CAC3D,IAAI,WAAW,GAAG,MAAM,IAAI,MAAM,iCAAiC;CAEnE,MAAM,aAAa,KAAK,SAAS,GAAG,IAAI;CACxC,MAAM,kBAAkB,KAAK,SAAS,IAAI,IAAI;CAC9C,IAAI,kBAAkB,GAAG,MAAM,IAAI,MAAM,0CAA0C;CAEnF,OAAO;EACN,OAAO,KAAK,UAAU,GAAG,IAAI,IAAI,OAAO,IAAI,IAAI;EAChD;EACA;EACA,OAAO,KAAK,UAAU,IAAI,IAAI;EAC9B,gBAAgB,aAAa;EAC7B;EACA;EACA;CACD;AACD;;AAGA,SAAgB,aACf,QACA,UACA,QAC+B;CAC/B,MAAM,OAAO,MAAM,KAAK,MAAM,QAAQ,GAAG,GAAG,OAAO,KAAK;CACxD,MAAM,KAAK,MAAM,KAAK,KAAK,MAAM,GAAG,MAAM,OAAO,KAAK;CAEtD,IAAI,EAAE,KAAK,OAAO,OAAO;CAEzB,MAAM,YAAa,OAAO,WAAW,IAAI,OAAO,OAAQ;CAExD,OAAO,CAAC,OAAO,aAAa,OAAO,WAAW,OAAO,aAAa,KAAK,YAAY,CAAC;AACrF;AAIA,SAAgB,eACf,QACA,MACA,aAAa,GACY;CACzB,OAAO,OAAO,SAAS,IACpB,IAAI,UAAU,MAAM,UAAU,IAC9B,IAAI,WAAW,MAAM,YAAY,KAAK,OAAO,KAAK,aAAa,cAAc,CAAC,CAAC;AACnF;AAEA,SAAgB,aAAa,QAAmB,MAAmB,aAAa,GAAkB;CACjG,OAAO;EACN,UAAU,OAAO;EACjB,WAAW,OAAO,SAAS,IAAI,MAAM;EACrC,gBAAgB,OAAO;EACvB,SAAS,eAAe,QAAQ,MAAM,UAAU;CACjD;AACD"}
|