diff --git a/packages/wam/index.mjs b/packages/wam/index.mjs index dabb25cac..b0fbec91c 100644 --- a/packages/wam/index.mjs +++ b/packages/wam/index.mjs @@ -23,6 +23,9 @@ export const getWamInstance = (key) => { let hostInit; // maps wam keys to init promises let instanceInit = {}; +// maps wam keys to a list of params that are automated +let automatedWamParams = {}; +export const getAutomatedWamParams = () => automatedWamParams; // host groups of WAMs can interact with one another, but not directly across groups const hostGroupId = 'strudel'; @@ -77,6 +80,13 @@ export const param = register('param', function (param, value, pat) { return pat.addTrigger((time, hap) => { const { wam } = hap.value; const i = getWamInstance(wam); + + // save param automation + if (!automatedWamParams[wam]) { + automatedWamParams[wam] = {}; + } + automatedWamParams[wam][param] = true; + i.audioNode.scheduleEvents({ time: time, type: 'wam-automation', diff --git a/website/src/repl/Footer.jsx b/website/src/repl/Footer.jsx index e2b073acf..ba8097664 100644 --- a/website/src/repl/Footer.jsx +++ b/website/src/repl/Footer.jsx @@ -7,7 +7,7 @@ import React, { useCallback, useLayoutEffect, useRef, useState } from 'react'; import { loadedSamples } from './Repl'; import { Reference } from './Reference'; import { themes, themeColors } from './themes.mjs'; -import { getWamInstances } from '@strudel.cycles/wam'; +import { getAutomatedWamParams, getWamInstances } from '@strudel.cycles/wam'; export function Footer({ context }) { // const [activeFooter, setActiveFooter] = useState('console'); @@ -69,6 +69,7 @@ export function Footer({ context }) { if (isZen) { return null; } + return (