mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-10 05:08:30 +00:00
67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
export * from '@strudel/core';
|
|
export * from '@strudel/webaudio';
|
|
//export * from '@strudel/soundfonts';
|
|
export * from '@strudel/transpiler';
|
|
export * from '@strudel/mini';
|
|
export * from '@strudel/tonal';
|
|
export * from '@strudel/webaudio';
|
|
import { Pattern, evalScope, setTime } from '@strudel/core';
|
|
import { initAudioOnFirstClick, registerSynthSounds, webaudioRepl } from '@strudel/webaudio';
|
|
// import { registerSoundfonts } from '@strudel/soundfonts';
|
|
import { evaluate as _evaluate, transpiler } from '@strudel/transpiler';
|
|
import { miniAllStrings } from '@strudel/mini';
|
|
|
|
// init logic
|
|
export async function defaultPrebake() {
|
|
const loadModules = evalScope(
|
|
evalScope,
|
|
import('@strudel/core'),
|
|
import('@strudel/mini'),
|
|
import('@strudel/tonal'),
|
|
import('@strudel/webaudio'),
|
|
{ hush, evaluate },
|
|
);
|
|
await Promise.all([loadModules, registerSynthSounds() /* , registerSoundfonts() */]);
|
|
}
|
|
|
|
// when this function finishes, everything is initialized
|
|
let initDone;
|
|
|
|
let repl;
|
|
export function initStrudel(options = {}) {
|
|
initAudioOnFirstClick();
|
|
options.miniAllStrings !== false && miniAllStrings();
|
|
const { prebake, ...replOptions } = options;
|
|
repl = webaudioRepl({ ...replOptions, transpiler });
|
|
initDone = (async () => {
|
|
await defaultPrebake();
|
|
await prebake?.();
|
|
return repl;
|
|
})();
|
|
setTime(() => repl.scheduler.now());
|
|
return initDone;
|
|
}
|
|
|
|
window.initStrudel = initStrudel;
|
|
|
|
// this method will play the pattern on the default scheduler
|
|
Pattern.prototype.play = function () {
|
|
if (!repl) {
|
|
throw new Error('.play: no repl found. Have you called initStrudel?');
|
|
}
|
|
initDone.then(() => {
|
|
repl.setPattern(this, true);
|
|
});
|
|
return this;
|
|
};
|
|
|
|
// stop playback
|
|
export function hush() {
|
|
repl.stop();
|
|
}
|
|
|
|
// evaluate and play the given code using the transpiler
|
|
export async function evaluate(code, autoplay = true) {
|
|
return repl.evaluate(code, autoplay);
|
|
}
|