mirror of
https://github.com/eliasstepanik/strudel-docker.git
synced 2026-01-13 22:58:34 +00:00
nano-repl add modules + proper eval
This commit is contained in:
parent
48bf17614f
commit
e3e3a8404a
@ -1,15 +1,32 @@
|
||||
import * as strudel from '@strudel.cycles/core';
|
||||
import * as webaudio from '@strudel.cycles/webaudio';
|
||||
import '@strudel.cycles/core';
|
||||
import controls from '@strudel.cycles/core/controls.mjs';
|
||||
import { evalScope } from '@strudel.cycles/eval';
|
||||
import { webaudioOutput } from '@strudel.cycles/webaudio';
|
||||
import { useState } from 'react';
|
||||
import useScheduler from '../../../src/hooks/useScheduler';
|
||||
import useEvaluator from '../../../src/hooks/useEvaluator';
|
||||
// import { prebake } from '../../../../../repl/src/prebake.mjs';
|
||||
|
||||
Object.assign(globalThis, strudel, webaudio); // add strudel to eval scope
|
||||
await evalScope(
|
||||
controls,
|
||||
import('@strudel.cycles/core'),
|
||||
import('@strudel.cycles/tone'),
|
||||
import('@strudel.cycles/tonal'),
|
||||
import('@strudel.cycles/mini'),
|
||||
import('@strudel.cycles/midi'),
|
||||
import('@strudel.cycles/xen'),
|
||||
import('@strudel.cycles/webaudio'),
|
||||
import('@strudel.cycles/osc'),
|
||||
import('@strudel.cycles/webdirt'),
|
||||
import('@strudel.cycles/serial'),
|
||||
import('@strudel.cycles/soundfonts'),
|
||||
);
|
||||
|
||||
// await prebake();
|
||||
|
||||
function App() {
|
||||
const [code, setCode] = useState(`seq('c3','eb3').note()`);
|
||||
const { evaluate, pattern, isDirty, error: evaluatorError } = useEvaluator(code);
|
||||
const [code, setCode] = useState(`"c3 [eb3,g3]".note()`);
|
||||
const { evaluate, pattern, isDirty, error: evaluatorError } = useEvaluator({ code });
|
||||
const { scheduler, error: schedulerError } = useScheduler(pattern, webaudioOutput);
|
||||
const error = evaluatorError || schedulerError;
|
||||
return (
|
||||
|
||||
@ -1,14 +1,20 @@
|
||||
import { useRef, useState, useCallback, useEffect } from 'react';
|
||||
import { evaluate as _evaluate } from '@strudel.cycles/eval';
|
||||
|
||||
function useEvaluator(code, evalOnMount = true) {
|
||||
function useEvaluator({ code, evalOnMount = true }) {
|
||||
const [error, setError] = useState();
|
||||
const [activeCode, setActiveCode] = useState(code);
|
||||
const [pattern, setPattern] = useState();
|
||||
const isDirty = code !== activeCode;
|
||||
const evaluate = useCallback(() => {
|
||||
|
||||
const evaluate = useCallback(async () => {
|
||||
if (!code) {
|
||||
console.log('no code..');
|
||||
return;
|
||||
}
|
||||
try {
|
||||
// TODO: use @strudel.cycles/eval or let user inject custom eval function
|
||||
const _pattern = eval(code);
|
||||
// TODO: let user inject custom eval function?
|
||||
const { pattern: _pattern } = await _evaluate(code);
|
||||
setActiveCode(activeCode);
|
||||
setPattern(_pattern);
|
||||
setError();
|
||||
@ -20,9 +26,9 @@ function useEvaluator(code, evalOnMount = true) {
|
||||
const inited = useRef();
|
||||
useEffect(() => {
|
||||
if (!inited.current && evalOnMount) {
|
||||
inited.current = true;
|
||||
evaluate();
|
||||
}
|
||||
inited.current = true;
|
||||
}, [evaluate, evalOnMount]);
|
||||
return { error, evaluate, activeCode, pattern, isDirty };
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user