@grame/faustwasm 0.4.4 → 0.4.6
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/COPYING.txt +520 -0
- package/README.md +3 -0
- package/assets/standalone/faust-ui/index.css +8 -0
- package/assets/standalone/faust-ui/index.css.map +1 -1
- package/assets/standalone/faust-ui/index.js +56 -30
- package/assets/standalone/faust-ui/index.js.map +1 -1
- package/assets/standalone/faustwasm/index.d.ts +18 -10
- package/assets/standalone/faustwasm/index.js +69 -24
- package/assets/standalone/faustwasm/index.js.map +2 -2
- package/dist/cjs/index.d.ts +18 -10
- package/dist/cjs/index.js +69 -24
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs-bundle/index.d.ts +18 -10
- package/dist/cjs-bundle/index.js +72 -27
- package/dist/cjs-bundle/index.js.map +2 -2
- package/dist/esm/index.d.ts +18 -10
- package/dist/esm/index.js +69 -24
- package/dist/esm/index.js.map +2 -2
- package/dist/esm-bundle/index.d.ts +18 -10
- package/dist/esm-bundle/index.js +72 -27
- package/dist/esm-bundle/index.js.map +2 -2
- package/libfaust-wasm/libfaust-wasm.data +0 -0
- package/libfaust-wasm/libfaust-wasm.js +1 -1
- package/libfaust-wasm/libfaust-wasm.wasm +0 -0
- package/node +0 -0
- package/package.json +4 -2
- package/src/FaustAudioWorkletNode.ts +13 -24
- package/src/FaustAudioWorkletProcessor.ts +28 -1
- package/src/FaustDspGenerator.ts +18 -9
- package/src/FaustFFTAudioWorkletProcessor.ts +27 -0
- package/src/instantiateFaustModule.js +82 -0
- package/test/faustlive-wasm/faust-ui/index.css +8 -0
- package/test/faustlive-wasm/faust-ui/index.css.map +1 -1
- package/test/faustlive-wasm/faust-ui/index.js +56 -30
- package/test/faustlive-wasm/faust-ui/index.js.map +1 -1
- package/test/faustlive-wasm/faustwasm/index.d.ts +18 -10
- package/test/faustlive-wasm/faustwasm/index.js +69 -24
- package/test/faustlive-wasm/faustwasm/index.js.map +2 -2
|
Binary file
|
package/node
ADDED
|
File without changes
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@grame/faustwasm",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.6",
|
|
4
4
|
"description": "WebAssembly version of Faust Compiler",
|
|
5
5
|
"main": "dist/cjs/index.js",
|
|
6
6
|
"types": "dist/esm/index.d.ts",
|
|
@@ -39,9 +39,11 @@
|
|
|
39
39
|
"homepage": "https://github.com/grame-cncm/faustwasm#readme",
|
|
40
40
|
"devDependencies": {
|
|
41
41
|
"@aws-crypto/sha256-js": "^5.2.0",
|
|
42
|
-
"@shren/faust-ui": "^1.1.
|
|
42
|
+
"@shren/faust-ui": "^1.1.12",
|
|
43
43
|
"@types/node": "^20.12.7",
|
|
44
44
|
"@types/webmidi": "^2.0.10",
|
|
45
|
+
"@webaudiomodules/api": "^2.0.0-alpha.6",
|
|
46
|
+
"@webaudiomodules/sdk-parammgr": "^0.0.13",
|
|
45
47
|
"dts-bundle-generator": "^9.5.1",
|
|
46
48
|
"esbuild": "^0.20.2",
|
|
47
49
|
"typescript": "^5.4.5"
|
|
@@ -18,7 +18,7 @@ export class FaustAudioWorkletNode<Poly extends boolean = false> extends (global
|
|
|
18
18
|
#hasAccInput = false;
|
|
19
19
|
#hasGyrInput = false;
|
|
20
20
|
|
|
21
|
-
constructor(context: BaseAudioContext, name: string, factory: LooseFaustDspFactory, options: FaustAudioWorkletNodeOptions<Poly
|
|
21
|
+
constructor(context: BaseAudioContext, name: string, factory: LooseFaustDspFactory, options: Partial<FaustAudioWorkletNodeOptions<Poly>> = {}) {
|
|
22
22
|
|
|
23
23
|
// Create JSON object
|
|
24
24
|
const JSONObj: FaustDspMeta = JSON.parse(factory.json);
|
|
@@ -31,8 +31,8 @@ export class FaustAudioWorkletNode<Poly extends boolean = false> extends (global
|
|
|
31
31
|
outputChannelCount: [JSONObj.outputs],
|
|
32
32
|
channelCountMode: "explicit",
|
|
33
33
|
channelInterpretation: "speakers",
|
|
34
|
-
processorOptions: options,
|
|
35
|
-
...
|
|
34
|
+
processorOptions: options.processorOptions,
|
|
35
|
+
...options
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
this.fJSONDsp = JSONObj;
|
|
@@ -156,6 +156,9 @@ export class FaustAudioWorkletNode<Poly extends boolean = false> extends (global
|
|
|
156
156
|
getPlotHandler(): PlotHandler | null {
|
|
157
157
|
return this.fPlotHandler;
|
|
158
158
|
}
|
|
159
|
+
setupWamEventHandler() {
|
|
160
|
+
this.port.postMessage({ type: "setupWamEventHandler" });
|
|
161
|
+
}
|
|
159
162
|
|
|
160
163
|
getNumInputs() {
|
|
161
164
|
return this.fJSONDsp.inputs;
|
|
@@ -252,8 +255,8 @@ export class FaustMonoAudioWorkletNode extends FaustAudioWorkletNode<false> impl
|
|
|
252
255
|
throw e;
|
|
253
256
|
}
|
|
254
257
|
|
|
255
|
-
constructor(context: BaseAudioContext,
|
|
256
|
-
super(context, name, factory,
|
|
258
|
+
constructor(context: BaseAudioContext, options: Partial<FaustAudioWorkletNodeOptions<false>> & Pick<FaustAudioWorkletNodeOptions<false>, "processorOptions">) {
|
|
259
|
+
super(context, options.processorOptions.name, options.processorOptions.factory, options);
|
|
257
260
|
}
|
|
258
261
|
}
|
|
259
262
|
|
|
@@ -269,30 +272,16 @@ export class FaustPolyAudioWorkletNode extends FaustAudioWorkletNode<true> imple
|
|
|
269
272
|
throw e;
|
|
270
273
|
}
|
|
271
274
|
|
|
272
|
-
constructor(context: BaseAudioContext,
|
|
273
|
-
name: string,
|
|
274
|
-
voiceFactory: LooseFaustDspFactory,
|
|
275
|
-
mixerModule: WebAssembly.Module,
|
|
276
|
-
voices: number,
|
|
277
|
-
sampleSize: number,
|
|
278
|
-
effectFactory?: LooseFaustDspFactory, nodeOptions: Partial<FaustAudioWorkletNodeOptions> = {}) {
|
|
275
|
+
constructor(context: BaseAudioContext, options: Partial<FaustAudioWorkletNodeOptions<true>> & Pick<FaustAudioWorkletNodeOptions<true>, "processorOptions">) {
|
|
279
276
|
|
|
280
277
|
super(
|
|
281
278
|
context,
|
|
282
|
-
name,
|
|
283
|
-
voiceFactory,
|
|
284
|
-
|
|
285
|
-
name,
|
|
286
|
-
voiceFactory,
|
|
287
|
-
mixerModule,
|
|
288
|
-
voices,
|
|
289
|
-
sampleSize,
|
|
290
|
-
effectFactory
|
|
291
|
-
},
|
|
292
|
-
nodeOptions
|
|
279
|
+
options.processorOptions.name,
|
|
280
|
+
options.processorOptions.voiceFactory,
|
|
281
|
+
options
|
|
293
282
|
);
|
|
294
283
|
|
|
295
|
-
this.fJSONEffect = effectFactory ? JSON.parse(effectFactory.json) : null;
|
|
284
|
+
this.fJSONEffect = options.processorOptions.effectFactory ? JSON.parse(options.processorOptions.effectFactory.json) : null;
|
|
296
285
|
|
|
297
286
|
if (this.fJSONEffect) {
|
|
298
287
|
FaustBaseWebAudioDsp.parseUI(this.fJSONEffect.ui, this.fUICallback);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type FaustWasmInstantiator from "./FaustWasmInstantiator";
|
|
2
2
|
import type { FaustBaseWebAudioDsp, FaustWebAudioDspVoice, FaustMonoWebAudioDsp, FaustPolyWebAudioDsp } from "./FaustWebAudioDsp";
|
|
3
|
-
import type { AudioParamDescriptor, AudioWorkletGlobalScope, LooseFaustDspFactory, FaustDspMeta, FaustUIItem
|
|
3
|
+
import type { AudioParamDescriptor, AudioWorkletGlobalScope, LooseFaustDspFactory, FaustDspMeta, FaustUIItem } from "./types";
|
|
4
|
+
import type { AudioWorkletGlobalScope as WamAudioWorkletGlobalScope, WamParamMgrSDKBaseModuleScope } from "@webaudiomodules/sdk-parammgr";
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Injected in the string to be compiled on AudioWorkletProcessor side
|
|
@@ -31,6 +32,9 @@ export interface FaustPolyAudioWorkletNodeOptions extends AudioWorkletNodeOption
|
|
|
31
32
|
export interface FaustAudioWorkletProcessorOptions {
|
|
32
33
|
name: string;
|
|
33
34
|
sampleSize: number;
|
|
35
|
+
// for WAMs
|
|
36
|
+
moduleId?: string;
|
|
37
|
+
instanceId?: string;
|
|
34
38
|
}
|
|
35
39
|
export interface FaustMonoAudioWorkletProcessorOptions extends FaustAudioWorkletProcessorOptions {
|
|
36
40
|
factory: LooseFaustDspFactory;
|
|
@@ -82,6 +86,8 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
|
|
|
82
86
|
|
|
83
87
|
protected paramValuesCache: Record<string, number> = {};
|
|
84
88
|
|
|
89
|
+
protected wamInfo?: { moduleId: string; instanceId: string };
|
|
90
|
+
|
|
85
91
|
constructor(options: FaustAudioWorkletNodeOptions<Poly>) {
|
|
86
92
|
super(options);
|
|
87
93
|
|
|
@@ -92,6 +98,10 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
|
|
|
92
98
|
parameterDescriptors.forEach((pd) => {
|
|
93
99
|
this.paramValuesCache[pd.name] = pd.defaultValue || 0;
|
|
94
100
|
})
|
|
101
|
+
|
|
102
|
+
const { moduleId, instanceId } = options.processorOptions;
|
|
103
|
+
if (!moduleId || !instanceId) return;
|
|
104
|
+
this.wamInfo = { moduleId, instanceId };
|
|
95
105
|
}
|
|
96
106
|
|
|
97
107
|
static get parameterDescriptors() {
|
|
@@ -107,6 +117,19 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
|
|
|
107
117
|
return params;
|
|
108
118
|
}
|
|
109
119
|
|
|
120
|
+
setupWamEventHandler() {
|
|
121
|
+
if (!this.wamInfo) return;
|
|
122
|
+
const { moduleId, instanceId } = this.wamInfo;
|
|
123
|
+
const { webAudioModules } = (globalThis as unknown as WamAudioWorkletGlobalScope);
|
|
124
|
+
const ModuleScope = webAudioModules.getModuleScope(moduleId) as WamParamMgrSDKBaseModuleScope;
|
|
125
|
+
const paramMgrProcessor = ModuleScope?.paramMgrProcessors?.[instanceId];
|
|
126
|
+
if (!paramMgrProcessor) return;
|
|
127
|
+
if (paramMgrProcessor.handleEvent) return;
|
|
128
|
+
paramMgrProcessor.handleEvent = (event) => {
|
|
129
|
+
if (event.type === "wam-midi") this.midiMessage(event.data.bytes);
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
|
|
110
133
|
process(inputs: Float32Array[][], outputs: Float32Array[][], parameters: { [key: string]: Float32Array }) {
|
|
111
134
|
|
|
112
135
|
// Update controls (possibly needed for sample accurate control)
|
|
@@ -162,6 +185,10 @@ const getFaustAudioWorkletProcessor = <Poly extends boolean = false>(dependencie
|
|
|
162
185
|
}
|
|
163
186
|
break;
|
|
164
187
|
}
|
|
188
|
+
case "setupWamEventHandler": {
|
|
189
|
+
this.setupWamEventHandler();
|
|
190
|
+
break;
|
|
191
|
+
}
|
|
165
192
|
case "start": {
|
|
166
193
|
this.fDSPCode.start();
|
|
167
194
|
break;
|
package/src/FaustDspGenerator.ts
CHANGED
|
@@ -52,6 +52,7 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
|
|
|
52
52
|
* @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode
|
|
53
53
|
* @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames
|
|
54
54
|
* @param processorName - AudioWorklet Processor name
|
|
55
|
+
* @param processorOptions - Additional AudioWorklet Processor options
|
|
55
56
|
* @returns the compiled WebAudio node or 'null' if failure
|
|
56
57
|
*/
|
|
57
58
|
createNode(
|
|
@@ -60,7 +61,8 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
|
|
|
60
61
|
factory?: LooseFaustDspFactory,
|
|
61
62
|
sp?: boolean,
|
|
62
63
|
bufferSize?: number,
|
|
63
|
-
processorName?: string
|
|
64
|
+
processorName?: string,
|
|
65
|
+
processorOptions?: Record<string, any>
|
|
64
66
|
): Promise<IFaustMonoWebAudioNode | null>;
|
|
65
67
|
|
|
66
68
|
/**
|
|
@@ -72,6 +74,7 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
|
|
|
72
74
|
* @param factory - default is the compiled factory
|
|
73
75
|
* @param fftOptions - initial FFT options
|
|
74
76
|
* @param processorName - AudioWorklet Processor name
|
|
77
|
+
* @param processorOptions - Additional AudioWorklet Processor options
|
|
75
78
|
* @returns the compiled WebAudio node or 'null' if failure
|
|
76
79
|
*/
|
|
77
80
|
createFFTNode(
|
|
@@ -80,7 +83,8 @@ export interface IFaustMonoDspGenerator extends GeneratorSupportingSoundfiles {
|
|
|
80
83
|
name?: string,
|
|
81
84
|
factory?: LooseFaustDspFactory,
|
|
82
85
|
fftOptions?: Partial<FaustFFTOptionsData>,
|
|
83
|
-
processorName?: string
|
|
86
|
+
processorName?: string,
|
|
87
|
+
processorOptions?: Record<string, any>
|
|
84
88
|
): Promise<FaustMonoAudioWorkletNode | null>;
|
|
85
89
|
|
|
86
90
|
/**
|
|
@@ -148,6 +152,7 @@ export interface IFaustPolyDspGenerator extends GeneratorSupportingSoundfiles {
|
|
|
148
152
|
* @param effectFactory - the Faust factory for the effect, either obtained with a compiler (createDSPFactory) or loaded from files (loadDSPFactory)
|
|
149
153
|
* @param sp - whether to compile a ScriptProcessorNode or an AudioWorkletNode
|
|
150
154
|
* @param bufferSize - the buffer size in frames to be used in ScriptProcessorNode only, since AudioWorkletNode always uses 128 frames
|
|
155
|
+
* @param processorOptions - Additional AudioWorklet Processor options
|
|
151
156
|
* @returns the compiled WebAudio node or 'null' if failure
|
|
152
157
|
*/
|
|
153
158
|
createNode(
|
|
@@ -159,7 +164,8 @@ export interface IFaustPolyDspGenerator extends GeneratorSupportingSoundfiles {
|
|
|
159
164
|
effectFactory?: LooseFaustDspFactory | null,
|
|
160
165
|
sp?: boolean,
|
|
161
166
|
bufferSize?: number,
|
|
162
|
-
processorName?: string
|
|
167
|
+
processorName?: string,
|
|
168
|
+
processorOptions?: Record<string, any>
|
|
163
169
|
): Promise<IFaustPolyWebAudioNode | null>;
|
|
164
170
|
|
|
165
171
|
/**
|
|
@@ -244,7 +250,8 @@ export class FaustMonoDspGenerator implements IFaustMonoDspGenerator {
|
|
|
244
250
|
factory = this.factory as LooseFaustDspFactory,
|
|
245
251
|
sp = false as SP,
|
|
246
252
|
bufferSize = 1024,
|
|
247
|
-
processorName = factory?.shaKey || name
|
|
253
|
+
processorName = factory?.shaKey || name,
|
|
254
|
+
processorOptions: Record<string, any> = {}
|
|
248
255
|
): Promise<SP extends true ? FaustMonoScriptProcessorNode | null : FaustMonoAudioWorkletNode | null> {
|
|
249
256
|
if (!factory) throw new Error("Code is not compiled, please define the factory or call `await this.compile()` first.");
|
|
250
257
|
|
|
@@ -307,7 +314,7 @@ const dependencies = {
|
|
|
307
314
|
}
|
|
308
315
|
}
|
|
309
316
|
// Create the AWN
|
|
310
|
-
const node = new FaustMonoAudioWorkletNode(context, processorName, factory, sampleSize);
|
|
317
|
+
const node = new FaustMonoAudioWorkletNode(context, { processorOptions: { name: processorName, factory, sampleSize, ...processorOptions } });
|
|
311
318
|
|
|
312
319
|
return node as SP extends true ? FaustMonoScriptProcessorNode : FaustMonoAudioWorkletNode;
|
|
313
320
|
}
|
|
@@ -319,7 +326,8 @@ const dependencies = {
|
|
|
319
326
|
name = this.name,
|
|
320
327
|
factory = this.factory as LooseFaustDspFactory,
|
|
321
328
|
fftOptions: Partial<FaustFFTOptionsData> = {},
|
|
322
|
-
processorName = factory?.shaKey ? `${factory.shaKey}_fft` : name
|
|
329
|
+
processorName = factory?.shaKey ? `${factory.shaKey}_fft` : name,
|
|
330
|
+
processorOptions: Record<string, any> = {}
|
|
323
331
|
): Promise<FaustMonoAudioWorkletNode | null> {
|
|
324
332
|
if (!factory) throw new Error("Code is not compiled, please define the factory or call `await this.compile()` first.");
|
|
325
333
|
|
|
@@ -375,7 +383,7 @@ const dependencies = {
|
|
|
375
383
|
}
|
|
376
384
|
}
|
|
377
385
|
// Create the AWN
|
|
378
|
-
const node = new FaustMonoAudioWorkletNode(context,
|
|
386
|
+
const node = new FaustMonoAudioWorkletNode(context, { channelCount: Math.max(1, Math.ceil(meta.inputs / 3)), outputChannelCount: [Math.ceil(meta.outputs / 2)], processorOptions: { name: processorName, factory, sampleSize, ...processorOptions } });
|
|
379
387
|
if (fftOptions.fftSize) {
|
|
380
388
|
const param = node.parameters.get("fftSize");
|
|
381
389
|
if (param) param.value = fftOptions.fftSize;
|
|
@@ -573,7 +581,8 @@ process = adaptorIns(dsp_code.process) : dsp_code.effect : adaptorOuts;
|
|
|
573
581
|
effectFactory = this.effectFactory as LooseFaustDspFactory | null,
|
|
574
582
|
sp = false as SP,
|
|
575
583
|
bufferSize = 1024,
|
|
576
|
-
processorName = ((voiceFactory?.shaKey || "") + (effectFactory?.shaKey || "")) || `${name}_poly
|
|
584
|
+
processorName = ((voiceFactory?.shaKey || "") + (effectFactory?.shaKey || "")) || `${name}_poly`,
|
|
585
|
+
processorOptions = {}
|
|
577
586
|
): Promise<SP extends true ? FaustPolyScriptProcessorNode | null : FaustPolyAudioWorkletNode | null> {
|
|
578
587
|
if (!voiceFactory) throw new Error("Code is not compiled, please define the factory or call `await this.compile()` first.");
|
|
579
588
|
|
|
@@ -642,7 +651,7 @@ const dependencies = {
|
|
|
642
651
|
}
|
|
643
652
|
}
|
|
644
653
|
// Create the AWN
|
|
645
|
-
const node = new FaustPolyAudioWorkletNode(context, processorName, voiceFactory, mixerModule, voices, sampleSize, effectFactory || undefined);
|
|
654
|
+
const node = new FaustPolyAudioWorkletNode(context, { processorOptions: { name: processorName, voiceFactory, mixerModule, voices, sampleSize, effectFactory: effectFactory || undefined, ...processorOptions } });
|
|
646
655
|
|
|
647
656
|
return node as SP extends true ? FaustPolyScriptProcessorNode : FaustPolyAudioWorkletNode;
|
|
648
657
|
}
|
|
@@ -2,6 +2,7 @@ import type { FaustMonoDspInstance } from "./FaustDspInstance";
|
|
|
2
2
|
import type FaustWasmInstantiator from "./FaustWasmInstantiator";
|
|
3
3
|
import type { FaustBaseWebAudioDsp, FaustMonoWebAudioDsp, PlotHandler } from "./FaustWebAudioDsp";
|
|
4
4
|
import type { AudioParamDescriptor, AudioWorkletGlobalScope, LooseFaustDspFactory, FaustDspMeta, FaustUIItem, InterfaceFFT, TWindowFunction, Writeable, TypedArray, FFTUtils } from "./types";
|
|
5
|
+
import type { AudioWorkletGlobalScope as WamAudioWorkletGlobalScope, WamParamMgrSDKBaseModuleScope } from "@webaudiomodules/sdk-parammgr";
|
|
5
6
|
|
|
6
7
|
export interface FaustFFTOptionsData {
|
|
7
8
|
fftSize: number;
|
|
@@ -33,6 +34,9 @@ export interface FaustFFTAudioWorkletProcessorOptions {
|
|
|
33
34
|
name: string;
|
|
34
35
|
sampleSize: number;
|
|
35
36
|
factory: LooseFaustDspFactory;
|
|
37
|
+
// for WAMs
|
|
38
|
+
moduleId?: string;
|
|
39
|
+
instanceId?: string;
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
|
|
@@ -122,6 +126,8 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
|
|
|
122
126
|
|
|
123
127
|
protected paramValuesCache: Record<string, number> = {};
|
|
124
128
|
|
|
129
|
+
protected wamInfo?: { moduleId: string; instanceId: string };
|
|
130
|
+
|
|
125
131
|
private dspInstance!: FaustMonoDspInstance;
|
|
126
132
|
private sampleSize!: number;
|
|
127
133
|
|
|
@@ -187,6 +193,10 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
|
|
|
187
193
|
|
|
188
194
|
// Init the FFT constructor and the Faust FFT Processor
|
|
189
195
|
this.initFFT();
|
|
196
|
+
|
|
197
|
+
const { moduleId, instanceId } = options.processorOptions;
|
|
198
|
+
if (!moduleId || !instanceId) return;
|
|
199
|
+
this.wamInfo = { moduleId, instanceId };
|
|
190
200
|
}
|
|
191
201
|
|
|
192
202
|
async initFFT(): Promise<true> {
|
|
@@ -232,6 +242,19 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
|
|
|
232
242
|
];
|
|
233
243
|
}
|
|
234
244
|
|
|
245
|
+
setupWamEventHandler() {
|
|
246
|
+
if (!this.wamInfo) return;
|
|
247
|
+
const { moduleId, instanceId } = this.wamInfo;
|
|
248
|
+
const { webAudioModules } = (globalThis as unknown as WamAudioWorkletGlobalScope);
|
|
249
|
+
const ModuleScope = webAudioModules.getModuleScope(moduleId) as WamParamMgrSDKBaseModuleScope;
|
|
250
|
+
const paramMgrProcessor = ModuleScope?.paramMgrProcessors?.[instanceId];
|
|
251
|
+
if (!paramMgrProcessor) return;
|
|
252
|
+
if (paramMgrProcessor.handleEvent) return;
|
|
253
|
+
paramMgrProcessor.handleEvent = (event) => {
|
|
254
|
+
if (event.type === "wam-midi") this.midiMessage(event.data.bytes);
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
235
258
|
processFFT() {
|
|
236
259
|
// Get the number of samples that need to proceed, from the input r/w pointers
|
|
237
260
|
let samplesForFFT = mod(this.$inputWrite - this.$inputRead, this.fftBufferSize) || this.fftBufferSize;
|
|
@@ -400,6 +423,10 @@ const getFaustFFTAudioWorkletProcessor = (dependencies: FaustFFTAudioWorkletProc
|
|
|
400
423
|
this.fDSPCode?.setPlotHandler(this.fPlotHandler);
|
|
401
424
|
break;
|
|
402
425
|
}
|
|
426
|
+
case "setupWamEventHandler": {
|
|
427
|
+
this.setupWamEventHandler();
|
|
428
|
+
break;
|
|
429
|
+
}
|
|
403
430
|
case "start": {
|
|
404
431
|
this.fDSPCode?.start();
|
|
405
432
|
break;
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
13
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (_) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
exports.__esModule = true;
|
|
39
|
+
exports.FaustModuleFactoryData = exports.FaustModuleFactoryWasm = exports.FaustModuleFactoryFn = void 0;
|
|
40
|
+
var libfaust_wasm_cjs_1 = require("../libfaust-wasm/libfaust-wasm.cjs");
|
|
41
|
+
var libfaust_wasm_wasm_1 = require("../libfaust-wasm/libfaust-wasm.wasm");
|
|
42
|
+
var libfaust_wasm_data_1 = require("../libfaust-wasm/libfaust-wasm.data");
|
|
43
|
+
exports.FaustModuleFactoryFn = libfaust_wasm_cjs_1["default"];
|
|
44
|
+
exports.FaustModuleFactoryWasm = libfaust_wasm_wasm_1["default"];
|
|
45
|
+
exports.FaustModuleFactoryData = libfaust_wasm_data_1["default"];
|
|
46
|
+
/**
|
|
47
|
+
* Instantiate `FaustModule` using bundled binaries. Module constructor and files can be overriden.
|
|
48
|
+
*/
|
|
49
|
+
var instantiateFaustModule = function (FaustModuleFactoryIn, dataBinaryIn, wasmBinaryIn) {
|
|
50
|
+
if (FaustModuleFactoryIn === void 0) { FaustModuleFactoryIn = libfaust_wasm_cjs_1["default"]; }
|
|
51
|
+
if (dataBinaryIn === void 0) { dataBinaryIn = libfaust_wasm_data_1["default"]; }
|
|
52
|
+
if (wasmBinaryIn === void 0) { wasmBinaryIn = libfaust_wasm_wasm_1["default"]; }
|
|
53
|
+
return __awaiter(void 0, void 0, void 0, function () {
|
|
54
|
+
var g, faustModule;
|
|
55
|
+
return __generator(this, function (_a) {
|
|
56
|
+
switch (_a.label) {
|
|
57
|
+
case 0:
|
|
58
|
+
g = globalThis;
|
|
59
|
+
if (g.AudioWorkletGlobalScope) {
|
|
60
|
+
g.importScripts = function () { };
|
|
61
|
+
g.self = { location: { href: "" } };
|
|
62
|
+
}
|
|
63
|
+
return [4 /*yield*/, FaustModuleFactoryIn({
|
|
64
|
+
wasmBinary: wasmBinaryIn,
|
|
65
|
+
getPreloadedPackage: function (remotePackageName, remotePackageSize) {
|
|
66
|
+
if (remotePackageName === "libfaust-wasm.data")
|
|
67
|
+
return dataBinaryIn.buffer;
|
|
68
|
+
return new ArrayBuffer(0);
|
|
69
|
+
}
|
|
70
|
+
})];
|
|
71
|
+
case 1:
|
|
72
|
+
faustModule = _a.sent();
|
|
73
|
+
if (g.AudioWorkletGlobalScope) {
|
|
74
|
+
delete g.importScripts;
|
|
75
|
+
delete g.self;
|
|
76
|
+
}
|
|
77
|
+
return [2 /*return*/, faustModule];
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
exports["default"] = instantiateFaustModule;
|
|
@@ -53,6 +53,7 @@
|
|
|
53
53
|
display: block;
|
|
54
54
|
height: 100%;
|
|
55
55
|
width: 100%;
|
|
56
|
+
touch-action: none;
|
|
56
57
|
}
|
|
57
58
|
.faust-ui-component.faust-ui-component-vslider > .faust-ui-component-vslider-flexdiv input {
|
|
58
59
|
position: relative;
|
|
@@ -98,6 +99,7 @@
|
|
|
98
99
|
display: block;
|
|
99
100
|
height: 100%;
|
|
100
101
|
width: 100%;
|
|
102
|
+
touch-action: none;
|
|
101
103
|
}
|
|
102
104
|
.faust-ui-component.faust-ui-component-hslider > .faust-ui-component-hslider-flexdiv > input {
|
|
103
105
|
position: relative;
|
|
@@ -162,6 +164,7 @@
|
|
|
162
164
|
border-radius: 4px;
|
|
163
165
|
flex: 1 0 auto;
|
|
164
166
|
border-style: solid;
|
|
167
|
+
touch-action: none;
|
|
165
168
|
}
|
|
166
169
|
.faust-ui-component.faust-ui-component-button > div > span {
|
|
167
170
|
user-select: none;
|
|
@@ -179,6 +182,7 @@
|
|
|
179
182
|
border-radius: 1px;
|
|
180
183
|
flex: 1 0 auto;
|
|
181
184
|
border-style: solid;
|
|
185
|
+
touch-action: none;
|
|
182
186
|
}
|
|
183
187
|
.faust-ui-component.faust-ui-component-checkbox > div > span {
|
|
184
188
|
margin: auto;
|
|
@@ -196,6 +200,7 @@
|
|
|
196
200
|
flex: 1 1 auto;
|
|
197
201
|
min-height: 50%;
|
|
198
202
|
width: 100%;
|
|
203
|
+
touch-action: none;
|
|
199
204
|
}
|
|
200
205
|
.faust-ui-component.faust-ui-component-knob > input {
|
|
201
206
|
position: relative;
|
|
@@ -271,6 +276,7 @@
|
|
|
271
276
|
display: block;
|
|
272
277
|
height: 100%;
|
|
273
278
|
width: 100%;
|
|
279
|
+
touch-action: none;
|
|
274
280
|
}
|
|
275
281
|
/*!************************************************************************************************************************!*\
|
|
276
282
|
!*** css ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./src/components/Numerical.scss ***!
|
|
@@ -318,6 +324,7 @@
|
|
|
318
324
|
display: block;
|
|
319
325
|
height: 100%;
|
|
320
326
|
width: 100%;
|
|
327
|
+
touch-action: none;
|
|
321
328
|
}
|
|
322
329
|
.faust-ui-component.faust-ui-component-vbargraph > .faust-ui-component-vbargraph-flexdiv > input {
|
|
323
330
|
position: relative;
|
|
@@ -358,6 +365,7 @@
|
|
|
358
365
|
display: block;
|
|
359
366
|
height: 100%;
|
|
360
367
|
width: 100%;
|
|
368
|
+
touch-action: none;
|
|
361
369
|
}
|
|
362
370
|
.faust-ui-component.faust-ui-component-hbargraph > .faust-ui-component-hbargraph-flexdiv > input {
|
|
363
371
|
position: relative;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.css","mappings":";;;AAAA;EACI;EACA;EACA;EACA;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAAI;EACI;AAER,C;;;;ACvBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ;AAFY;EAEI;EACA;AAGhB,C;;;;AC1CI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ;AAAY;EAEI;EACA;AAChB,C;;;;ACxCA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;AAEZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACbA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;EACA;AAEZ,C;;;;AC1BA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACVA;EACI;AACJ;AAAI;EACI;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;AAGZ,C;;;;ACnBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ,C;;;;ACjBA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACdA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ,C;;;;ACrCI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ,C;;;;AClCA;EACI;EACA;EACA;EACA;EACA;AAAJ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;AAEZ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEZ;AADY;EACI;AAGhB;AADY;EACI;EACA;AAGhB,C;;;;AC3CA;EACI;EACA;EACA;EACA;EACA;EACA;AACJ,C","sources":["webpack://@shren/faust-ui/./src/components/Base.scss","webpack://@shren/faust-ui/./src/components/VSlider.scss","webpack://@shren/faust-ui/./src/components/HSlider.scss","webpack://@shren/faust-ui/./src/components/Nentry.scss","webpack://@shren/faust-ui/./src/components/Soundfile.scss","webpack://@shren/faust-ui/./src/components/Button.scss","webpack://@shren/faust-ui/./src/components/Checkbox.scss","webpack://@shren/faust-ui/./src/components/Knob.scss","webpack://@shren/faust-ui/./src/components/Menu.scss","webpack://@shren/faust-ui/./src/components/Radio.scss","webpack://@shren/faust-ui/./src/components/Led.scss","webpack://@shren/faust-ui/./src/components/Numerical.scss","webpack://@shren/faust-ui/./src/components/VBargraph.scss","webpack://@shren/faust-ui/./src/components/HBargraph.scss","webpack://@shren/faust-ui/./src/components/Group.scss","webpack://@shren/faust-ui/./src/index.scss"],"sourcesContent":[".faust-ui-component {\n display: flex;\n position: absolute;\n flex-direction: column;\n overflow: hidden;\n &:focus {\n outline: none;\n }\n & > .faust-ui-component-label {\n position: relative;\n margin-top: 4px;\n width: 100%;\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & input {\n box-shadow: none;\n }\n}",".faust-ui-component.faust-ui-component-vslider {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-vslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}",".faust-ui-component.faust-ui-component-hslider {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}\n",".faust-ui-component.faust-ui-component-nentry {\n align-items: center;\n & input {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n opacity: 1;\n }\n }\n}",".faust-ui-component.faust-ui-component-soundfile {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-button {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-checkbox {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 1px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n margin: auto;\n user-select: none;\n }\n }\n}",".faust-ui-component.faust-ui-component-knob {\n align-items: center;\n & > canvas {\n position: relative;\n display: block;\n flex: 1 1 auto;\n min-height: 50%;\n width: 100%;\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 0px;\n border-width: 0px;\n border-radius: 4px;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n}",".faust-ui-component.faust-ui-component-menu {\n align-items: center;\n & > select {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n }\n}",".faust-ui-component.faust-ui-component-radio {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n margin-top: auto;\n }\n & > .faust-ui-component-radio-group {\n flex: 0 0 auto;\n margin-bottom: auto;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n & > div {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n}",".faust-ui-component.faust-ui-component-led {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-led-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-numerical {\n align-items: center;\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n}",".faust-ui-component.faust-ui-component-vbargraph {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: inherit;\n & > .faust-ui-component-vbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-hbargraph {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n }\n }\n}","\n.faust-ui-group {\n position: absolute;\n display: block;\n background-color: rgba(80, 80, 80, 0.75);\n border-radius: 4px;\n border: 1px rgba(255, 255, 255, 0.25) solid;\n & > .faust-ui-group-label {\n position: relative;\n margin: 4px;\n width: calc(100% - 8px);\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & .faust-ui-tgroup-tabs {\n position: absolute;\n display: inline-block;\n white-space: nowrap;\n left: 0px;\n & .faust-ui-tgroup-tab {\n position: relative;\n display: inline-block;\n border-radius: 5px;\n cursor: pointer;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n margin: 10px;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.5);\n &:hover {\n background-color: rgba(255, 255, 255, 1);\n }\n &.active {\n background-color: rgba(40, 40, 40, 1);\n color: white;\n }\n }\n }\n}",".faust-ui-root {\n margin: 0px auto;\n flex: 1 0 auto;\n position: relative !important;\n background-color: transparent !important;\n border: none !important;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}"],"names":[],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"index.css","mappings":";;;AAAA;EACI;EACA;EACA;EACA;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAAI;EACI;AAER,C;;;;ACvBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ;AAFY;EAEI;EACA;AAGhB,C;;;;AC3CI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ;AAAY;EAEI;EACA;AAChB,C;;;;ACzCA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;AAEZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACZI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACbI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;AACZ,C;;;;ACdA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EAEI;EACA;AAEZ,C;;;;AC3BA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACVA;EACI;AACJ;AAAI;EACI;EACA;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;AAGZ,C;;;;ACnBA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;EACA;AAGZ,C;;;;AClBA;EACI;AACJ;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAER,C;;;;ACdA;EACI;AACJ;AAAI;EACI;AAER;AAAI;EACI;EACA;EACA;EACA;EACA;EACA;AAER;AADQ;EACI;EACA;EACA;EACA;AAGZ;AAFY;EACI;EACA;EACA;EACA;EACA;AAIhB;AADQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAGZ,C;;;;ACtCI;EACI;AAAR;AAEI;EACI;EACA;EACA;EACA;EACA;EACA;AAAR;AACQ;EACI;EACA;EACA;EACA;EACA;AACZ;AAAY;EACI;EACA;EACA;EACA;EACA;AAEhB;AACQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AACZ,C;;;;ACnCA;EACI;EACA;EACA;EACA;EACA;AAAJ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;AAEZ;AACI;EACI;EACA;EACA;EACA;AACR;AAAQ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEZ;AADY;EACI;AAGhB;AADY;EACI;EACA;AAGhB,C;;;;AC3CA;EACI;EACA;EACA;EACA;EACA;EACA;AACJ,C","sources":["webpack://@shren/faust-ui/./src/components/Base.scss","webpack://@shren/faust-ui/./src/components/VSlider.scss","webpack://@shren/faust-ui/./src/components/HSlider.scss","webpack://@shren/faust-ui/./src/components/Nentry.scss","webpack://@shren/faust-ui/./src/components/Soundfile.scss","webpack://@shren/faust-ui/./src/components/Button.scss","webpack://@shren/faust-ui/./src/components/Checkbox.scss","webpack://@shren/faust-ui/./src/components/Knob.scss","webpack://@shren/faust-ui/./src/components/Menu.scss","webpack://@shren/faust-ui/./src/components/Radio.scss","webpack://@shren/faust-ui/./src/components/Led.scss","webpack://@shren/faust-ui/./src/components/Numerical.scss","webpack://@shren/faust-ui/./src/components/VBargraph.scss","webpack://@shren/faust-ui/./src/components/HBargraph.scss","webpack://@shren/faust-ui/./src/components/Group.scss","webpack://@shren/faust-ui/./src/index.scss"],"sourcesContent":[".faust-ui-component {\n display: flex;\n position: absolute;\n flex-direction: column;\n overflow: hidden;\n &:focus {\n outline: none;\n }\n & > .faust-ui-component-label {\n position: relative;\n margin-top: 4px;\n width: 100%;\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & input {\n box-shadow: none;\n }\n}",".faust-ui-component.faust-ui-component-vslider {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-vslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance:textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}",".faust-ui-component.faust-ui-component-hslider {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hslider-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hslider-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n -moz-appearance: textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n }\n}\n",".faust-ui-component.faust-ui-component-nentry {\n align-items: center;\n & input {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n opacity: 1;\n }\n }\n}",".faust-ui-component.faust-ui-component-soundfile {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-button {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 4px;\n flex: 1 0 auto;\n border-style: solid;\n touch-action: none;\n & > span {\n user-select: none;\n margin: auto;\n }\n }\n}",".faust-ui-component.faust-ui-component-checkbox {\n & > div {\n display: flex;\n position: relative;\n cursor: pointer;\n border-width: 1px;\n text-align: center;\n border-radius: 1px;\n flex: 1 0 auto;\n border-style: solid;\n touch-action: none;\n & > span {\n margin: auto;\n user-select: none;\n }\n }\n}",".faust-ui-component.faust-ui-component-knob {\n align-items: center;\n & > canvas {\n position: relative;\n display: block;\n flex: 1 1 auto;\n min-height: 50%;\n width: 100%;\n touch-action: none;\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 0px;\n border-width: 0px;\n border-radius: 4px;\n max-width: calc(100% - 8px);\n padding: 2px 4px;\n -moz-appearance: textfield;\n &::-webkit-inner-spin-button, \n &::-webkit-outer-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n }\n}",".faust-ui-component.faust-ui-component-menu {\n align-items: center;\n & > select {\n margin: 0px;\n text-align: center;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n }\n}",".faust-ui-component.faust-ui-component-radio {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n margin-top: auto;\n }\n & > .faust-ui-component-radio-group {\n flex: 0 0 auto;\n margin-bottom: auto;\n border-width: 1px;\n border-radius: 4px;\n padding: 2px 4px;\n width: calc(100% - 8px);\n & > div {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n }\n }\n}",".faust-ui-component.faust-ui-component-led {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-led-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-numerical {\n align-items: center;\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n}",".faust-ui-component.faust-ui-component-vbargraph {\n align-items: center;\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-vbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: column;\n flex: 1 1 auto;\n width: 100%;\n height: inherit;\n & > .faust-ui-component-vbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n width: 100%;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: 5px auto auto auto;\n border-width: 0px;\n border-radius: 4px;\n height: 5%;\n width: calc(100% - 8px);\n padding: 2px 4px;\n }\n }\n}\n",".faust-ui-component.faust-ui-component-hbargraph {\n & > .faust-ui-component-label {\n flex: 0 0 auto;\n }\n & > .faust-ui-component-hbargraph-flexdiv {\n position: relative;\n display: flex;\n flex-direction: row-reverse;\n flex: 1 1 auto;\n width: 100%;\n height: auto;\n & > .faust-ui-component-hbargraph-canvasdiv {\n position: relative;\n display: block;\n flex: 1 1 auto;\n height: 100%;\n margin: auto;\n & > canvas {\n position: absolute;\n display: block;\n height: 100%;\n width: 100%;\n touch-action: none;\n }\n }\n & > input {\n position: relative;\n display: block;\n flex: 0 1 auto;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.25);\n margin: auto 5px auto auto;\n border-width: 0px;\n border-radius: 4px;\n width: calc(20% - 13px);\n padding: 2px 4px;\n }\n }\n}","\n.faust-ui-group {\n position: absolute;\n display: block;\n background-color: rgba(80, 80, 80, 0.75);\n border-radius: 4px;\n border: 1px rgba(255, 255, 255, 0.25) solid;\n & > .faust-ui-group-label {\n position: relative;\n margin: 4px;\n width: calc(100% - 8px);\n user-select: none;\n & > canvas {\n position: relative;\n display: block;\n max-width: 100%;\n max-height: 100%;\n }\n }\n & .faust-ui-tgroup-tabs {\n position: absolute;\n display: inline-block;\n white-space: nowrap;\n left: 0px;\n & .faust-ui-tgroup-tab {\n position: relative;\n display: inline-block;\n border-radius: 5px;\n cursor: pointer;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: none;\n margin: 10px;\n text-align: center;\n background-color: rgba(255, 255, 255, 0.5);\n &:hover {\n background-color: rgba(255, 255, 255, 1);\n }\n &.active {\n background-color: rgba(40, 40, 40, 1);\n color: white;\n }\n }\n }\n}",".faust-ui-root {\n margin: 0px auto;\n flex: 1 0 auto;\n position: relative !important;\n background-color: transparent !important;\n border: none !important;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n}"],"names":[],"sourceRoot":""}
|