@hyperframes/core 0.7.107 → 0.7.108
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/audioFxAutomation.d.ts +63 -0
- package/dist/audio/audioFxAutomation.d.ts.map +1 -0
- package/dist/audio/audioFxAutomation.js +219 -0
- package/dist/audio/audioFxAutomation.js.map +1 -0
- package/dist/audio/audioFxGraph.d.ts +73 -0
- package/dist/audio/audioFxGraph.d.ts.map +1 -0
- package/dist/audio/audioFxGraph.js +649 -0
- package/dist/audio/audioFxGraph.js.map +1 -0
- package/dist/audio/audioFxTail.d.ts +28 -0
- package/dist/audio/audioFxTail.d.ts.map +1 -0
- package/dist/audio/audioFxTail.js +95 -0
- package/dist/audio/audioFxTail.js.map +1 -0
- package/dist/audio/audioFxWorklets.d.ts +8 -0
- package/dist/audio/audioFxWorklets.d.ts.map +1 -0
- package/dist/audio/audioFxWorklets.js +263 -0
- package/dist/audio/audioFxWorklets.js.map +1 -0
- package/dist/audioAutomation.d.ts +191 -0
- package/dist/audioAutomation.d.ts.map +1 -0
- package/dist/audioAutomation.js +488 -0
- package/dist/audioAutomation.js.map +1 -0
- package/dist/audioCarve.d.ts +216 -0
- package/dist/audioCarve.d.ts.map +1 -0
- package/dist/audioCarve.js +608 -0
- package/dist/audioCarve.js.map +1 -0
- package/dist/audioFx.d.ts +182 -0
- package/dist/audioFx.d.ts.map +1 -0
- package/dist/audioFx.js +813 -0
- package/dist/audioFx.js.map +1 -0
- package/dist/audioFxCopy.d.ts +89 -0
- package/dist/audioFxCopy.d.ts.map +1 -0
- package/dist/audioFxCopy.js +340 -0
- package/dist/audioFxCopy.js.map +1 -0
- package/dist/audioFxEq.d.ts +75 -0
- package/dist/audioFxEq.d.ts.map +1 -0
- package/dist/audioFxEq.js +153 -0
- package/dist/audioFxEq.js.map +1 -0
- package/dist/audioFxJobs.d.ts +52 -0
- package/dist/audioFxJobs.d.ts.map +1 -0
- package/dist/audioFxJobs.js +92 -0
- package/dist/audioFxJobs.js.map +1 -0
- package/dist/audioFxPresets.d.ts +91 -0
- package/dist/audioFxPresets.d.ts.map +1 -0
- package/dist/audioFxPresets.js +320 -0
- package/dist/audioFxPresets.js.map +1 -0
- package/dist/audioFxProfiles.d.ts +65 -0
- package/dist/audioFxProfiles.d.ts.map +1 -0
- package/dist/audioFxProfiles.js +209 -0
- package/dist/audioFxProfiles.js.map +1 -0
- package/dist/audioLeveller.d.ts +62 -0
- package/dist/audioLeveller.d.ts.map +1 -0
- package/dist/audioLeveller.js +208 -0
- package/dist/audioLeveller.js.map +1 -0
- package/dist/canaryRegistry.d.ts.map +1 -1
- package/dist/canaryRegistry.js +8 -0
- package/dist/canaryRegistry.js.map +1 -1
- package/dist/compiler/compositionScoping.d.ts +3 -0
- package/dist/compiler/compositionScoping.d.ts.map +1 -1
- package/dist/compiler/compositionScoping.js +34 -11
- package/dist/compiler/compositionScoping.js.map +1 -1
- package/dist/compiler/htmlBundler.d.ts.map +1 -1
- package/dist/compiler/htmlBundler.js +42 -2
- package/dist/compiler/htmlBundler.js.map +1 -1
- package/dist/editing/affordances.d.ts +3 -0
- package/dist/editing/affordances.d.ts.map +1 -1
- package/dist/editing/affordances.js +1 -0
- package/dist/editing/affordances.js.map +1 -1
- package/dist/generated/audio-fx-runtime-inline.d.ts +3 -0
- package/dist/generated/audio-fx-runtime-inline.d.ts.map +1 -0
- package/dist/generated/audio-fx-runtime-inline.js +7 -0
- package/dist/generated/audio-fx-runtime-inline.js.map +1 -0
- package/dist/generated/runtime-inline.js +1 -1
- package/dist/generated/runtime-inline.js.map +1 -1
- package/dist/hyperframe.runtime.iife.js +238 -28
- package/dist/runtime/applyVariableBindings.d.ts +45 -0
- package/dist/runtime/applyVariableBindings.d.ts.map +1 -0
- package/dist/runtime/applyVariableBindings.js +194 -0
- package/dist/runtime/applyVariableBindings.js.map +1 -0
- package/dist/runtime/audioAutomationVolume.d.ts +17 -0
- package/dist/runtime/audioAutomationVolume.d.ts.map +1 -0
- package/dist/runtime/audioAutomationVolume.js +49 -0
- package/dist/runtime/audioAutomationVolume.js.map +1 -0
- package/dist/runtime/media.d.ts.map +1 -1
- package/dist/runtime/media.js +17 -1
- package/dist/runtime/media.js.map +1 -1
- package/dist/runtime/variableScope.d.ts +9 -0
- package/dist/runtime/variableScope.d.ts.map +1 -0
- package/dist/runtime/variableScope.js +21 -0
- package/dist/runtime/variableScope.js.map +1 -0
- package/package.json +51 -6
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio FX chain: the one description of every effect that can be applied to an
|
|
3
|
+
* audio track.
|
|
4
|
+
*
|
|
5
|
+
* Preview and render both run the same Web Audio graph — the studio in a live
|
|
6
|
+
* AudioContext, the engine in an OfflineAudioContext inside the headless
|
|
7
|
+
* browser it already drives. There is only one implementation of each effect,
|
|
8
|
+
* so preview predicting the render is a property of the architecture rather
|
|
9
|
+
* than something to measure and defend.
|
|
10
|
+
*
|
|
11
|
+
* This file holds what both ends need to agree on: the parameter set for each
|
|
12
|
+
* effect with its usable range, and the id of the graph builder that realises
|
|
13
|
+
* it. Parameters are declared in the units a person thinks in (dB, ms, Hz);
|
|
14
|
+
* the graph builders convert where the Web Audio node wants something else.
|
|
15
|
+
*/
|
|
16
|
+
export declare const HF_AUDIO_FX_ATTR = "data-fx-chain";
|
|
17
|
+
/**
|
|
18
|
+
* The same attribute as a `dataset` / `dataAttributes` key — the `data-` prefix
|
|
19
|
+
* is not part of that spelling.
|
|
20
|
+
*
|
|
21
|
+
* Derived rather than restated: the studio writes through
|
|
22
|
+
* `HF_AUDIO_FX_ATTR` and reads through the key, so a hardcoded `"fx-chain"`
|
|
23
|
+
* on the read side is a rename waiting to half-land.
|
|
24
|
+
*/
|
|
25
|
+
export declare const HF_AUDIO_FX_DATA_KEY: string;
|
|
26
|
+
/** Chain files are versioned; a reader must refuse a version it doesn't know. */
|
|
27
|
+
export declare const HF_AUDIO_FX_CHAIN_VERSION = 1;
|
|
28
|
+
export type HfAudioFxGroup = "filter" | "dynamics" | "nonlinear" | "time";
|
|
29
|
+
export interface HfAudioFxNumberParam {
|
|
30
|
+
kind: "number";
|
|
31
|
+
key: string;
|
|
32
|
+
label: string;
|
|
33
|
+
/** Shown after the value in the panel; "" for a bare ratio. */
|
|
34
|
+
unit: string;
|
|
35
|
+
min: number;
|
|
36
|
+
max: number;
|
|
37
|
+
step: number;
|
|
38
|
+
default: number;
|
|
39
|
+
/** Frequency-style controls need a log knob to be usable. */
|
|
40
|
+
scale?: "linear" | "log";
|
|
41
|
+
/**
|
|
42
|
+
* The knob is backed by an AudioParam, so an automation lane can drive it.
|
|
43
|
+
*
|
|
44
|
+
* Not every knob can be: a WaveShaper curve, a convolution impulse and a
|
|
45
|
+
* worklet's `processorOptions` are all set wholesale rather than scheduled.
|
|
46
|
+
* A graph builder must expose an AudioParam for every parameter flagged here
|
|
47
|
+
* — `audioFxGraph.test.ts` builds each effect and checks it.
|
|
48
|
+
*/
|
|
49
|
+
automatable?: boolean;
|
|
50
|
+
/** One line explaining what turning this does, shown on the control. */
|
|
51
|
+
hint?: string;
|
|
52
|
+
}
|
|
53
|
+
export interface HfAudioFxEnumParam {
|
|
54
|
+
kind: "enum";
|
|
55
|
+
key: string;
|
|
56
|
+
label: string;
|
|
57
|
+
options: readonly {
|
|
58
|
+
value: string;
|
|
59
|
+
label: string;
|
|
60
|
+
}[];
|
|
61
|
+
default: string;
|
|
62
|
+
hint?: string;
|
|
63
|
+
}
|
|
64
|
+
export type HfAudioFxParam = HfAudioFxNumberParam | HfAudioFxEnumParam;
|
|
65
|
+
export type HfAudioFxParamValues = Record<string, number | string>;
|
|
66
|
+
export interface HfAudioFxDef {
|
|
67
|
+
id: string;
|
|
68
|
+
label: string;
|
|
69
|
+
group: HfAudioFxGroup;
|
|
70
|
+
/** One sentence on what the effect is for, shown when adding it. */
|
|
71
|
+
description: string;
|
|
72
|
+
params: readonly HfAudioFxParam[];
|
|
73
|
+
/**
|
|
74
|
+
* Identifier for the Web Audio graph builder that realises this effect. Kept
|
|
75
|
+
* as a string rather than a function so this module stays free of browser
|
|
76
|
+
* globals and can be imported by the engine and the linter.
|
|
77
|
+
*/
|
|
78
|
+
web: string;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Every effect, in panel order. Ranges are the usable span for each control;
|
|
82
|
+
* a value that survives `normalizeAudioFxParams` is always safe to realise.
|
|
83
|
+
*/
|
|
84
|
+
export declare const HF_AUDIO_FX: readonly HfAudioFxDef[];
|
|
85
|
+
export declare function getAudioFxDef(id: string): HfAudioFxDef | undefined;
|
|
86
|
+
export declare const HF_AUDIO_FX_IDS: readonly string[];
|
|
87
|
+
/** Every parameter at its declared default, ready to seed a freshly added effect. */
|
|
88
|
+
export declare function defaultAudioFxParams(id: string): HfAudioFxParamValues;
|
|
89
|
+
/**
|
|
90
|
+
* Clamp and fill a parameter set so it is always renderable: unknown keys are
|
|
91
|
+
* dropped, missing keys take their default, numbers are clamped into their
|
|
92
|
+
* declared range, and an unrecognised enum value falls back to its default.
|
|
93
|
+
* A non-finite number is treated as missing rather than passed through, since
|
|
94
|
+
* NaN reaching an AudioParam silences the node for the rest of the render.
|
|
95
|
+
*/
|
|
96
|
+
export declare function normalizeAudioFxParams(id: string, values: Readonly<HfAudioFxParamValues> | undefined): HfAudioFxParamValues;
|
|
97
|
+
export interface HfAudioFxNode {
|
|
98
|
+
/** Effect id from HF_AUDIO_FX. */
|
|
99
|
+
type: string;
|
|
100
|
+
/**
|
|
101
|
+
* Stable handle for this node within its chain, minted when the node is
|
|
102
|
+
* added. Automation lanes address nodes by id (`fx.<id>.<param>`) so that
|
|
103
|
+
* reordering the chain never re-points a lane at a different effect. Older
|
|
104
|
+
* chains have no ids; they load fine and simply cannot be automated until
|
|
105
|
+
* the panel touches them.
|
|
106
|
+
*/
|
|
107
|
+
id?: string;
|
|
108
|
+
/** Set on nodes the carve analysis generated, so re-running replaces them
|
|
109
|
+
* instead of stacking another set on top of hand-added effects. */
|
|
110
|
+
fromCarve?: boolean;
|
|
111
|
+
/**
|
|
112
|
+
* Id of the preset that wrote this node, for the same reason `fromCarve`
|
|
113
|
+
* exists: re-applying a preset replaces its own nodes rather than adding a
|
|
114
|
+
* second copy, and the rack can brace them together under the preset's name.
|
|
115
|
+
*
|
|
116
|
+
* The id rather than a flag, because a chain can carry more than one preset
|
|
117
|
+
* and each has to be able to find its own.
|
|
118
|
+
*/
|
|
119
|
+
fromPreset?: string;
|
|
120
|
+
/**
|
|
121
|
+
* What the rack calls this node, when the effect's own name is not specific
|
|
122
|
+
* enough to be useful.
|
|
123
|
+
*
|
|
124
|
+
* A peaking filter is "Shape One Range" wherever it appears, so a chain that
|
|
125
|
+
* cuts mud at 250 Hz and lifts clarity at 3 kHz shows the same words twice
|
|
126
|
+
* and an author cannot tell the two apart. A preset names each node for the
|
|
127
|
+
* JOB it is doing instead — "Reduce Mud", "Add Clarity" — and the rack reads
|
|
128
|
+
* as a list of things that were done rather than a list of filter types.
|
|
129
|
+
*/
|
|
130
|
+
label?: string;
|
|
131
|
+
/**
|
|
132
|
+
* Id of the multi-band EQ that owns this node, when it is one of its bands.
|
|
133
|
+
*
|
|
134
|
+
* Same device as `fromCarve`: the module gathers its own nodes out of the
|
|
135
|
+
* chain and presents them as one control surface, so an EQ needs no new
|
|
136
|
+
* effect type and its bands stay ordinary filters underneath.
|
|
137
|
+
*/
|
|
138
|
+
fromEq?: string;
|
|
139
|
+
/**
|
|
140
|
+
* How much of this node's preset is applied, 0..1 — the wet/dry blend the
|
|
141
|
+
* graph wraps its run in.
|
|
142
|
+
*
|
|
143
|
+
* On every node of the run rather than beside the chain, because the chain has
|
|
144
|
+
* nowhere else to put it: `HfAudioFxChain` is a version and a list of nodes,
|
|
145
|
+
* and a preset is defined by which nodes carry its tag. The graph reads it off
|
|
146
|
+
* the first node of each run. Absent means fully applied, which is what every
|
|
147
|
+
* chain written before this means.
|
|
148
|
+
*/
|
|
149
|
+
presetAmount?: number;
|
|
150
|
+
/**
|
|
151
|
+
* Set on the gain stage the leveller writes, so re-running replaces it rather
|
|
152
|
+
* than stacking a second one — the same contract `fromCarve` has.
|
|
153
|
+
*/
|
|
154
|
+
fromLeveller?: boolean;
|
|
155
|
+
/** Absent means enabled — chain files written before the field existed still load. */
|
|
156
|
+
enabled?: boolean;
|
|
157
|
+
params?: HfAudioFxParamValues;
|
|
158
|
+
}
|
|
159
|
+
export interface HfAudioFxChain {
|
|
160
|
+
version: number;
|
|
161
|
+
nodes: HfAudioFxNode[];
|
|
162
|
+
}
|
|
163
|
+
export declare class AudioFxChainError extends Error {
|
|
164
|
+
constructor(message: string);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Parse a chain file. Unknown effect ids are rejected rather than skipped: a
|
|
168
|
+
* chain that silently loses a node would render differently from the project
|
|
169
|
+
* the author saved, which is worse than refusing to render at all.
|
|
170
|
+
*/
|
|
171
|
+
export declare function parseAudioFxChain(json: string): HfAudioFxChain;
|
|
172
|
+
/** The nodes that should process audio, in order. */
|
|
173
|
+
export declare function enabledAudioFxNodes(chain: HfAudioFxChain): HfAudioFxNode[];
|
|
174
|
+
/** Serialise a chain for the `data-fx-chain` attribute. */
|
|
175
|
+
export declare function serializeAudioFxChain(chain: HfAudioFxChain): string;
|
|
176
|
+
/**
|
|
177
|
+
* Next free node id for a chain, as `n1`, `n2`, … — counted rather than random
|
|
178
|
+
* so that adding an effect produces the same document on every machine, which
|
|
179
|
+
* compositions require.
|
|
180
|
+
*/
|
|
181
|
+
export declare function mintAudioFxNodeId(chain: HfAudioFxChain): string;
|
|
182
|
+
//# sourceMappingURL=audioFx.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audioFx.d.ts","sourceRoot":"","sources":["../src/audioFx.ts"],"names":[],"mappings":"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"}
|