Merge pull request 'rename wavetable controls to match existing naming conventions' (#1610) from wavetable_controls into main
Reviewed-on: https://codeberg.org/uzu/strudel/pulls/1610
This commit is contained in:
commit
ec69f6fd77
6 changed files with 430 additions and 346 deletions
|
|
@ -90,193 +90,191 @@ export const { s, sound } = registerControl(['s', 'n', 'gain'], 'sound');
|
||||||
/**
|
/**
|
||||||
* Position in the wavetable of the wavetable oscillator
|
* Position in the wavetable of the wavetable oscillator
|
||||||
*
|
*
|
||||||
* @name wtPos
|
* @name wt
|
||||||
* @param {number | Pattern} position Position in the wavetable from 0 to 1
|
* @param {number | Pattern} position Position in the wavetable from 0 to 1
|
||||||
* @synonyms wavetablePosition
|
* @synonyms wavetablePosition
|
||||||
* @example
|
* @example
|
||||||
* s("squelch").bank("wt_digital").seg(8).note("F1").wtPos("0 0.25 0.5 0.75 1")
|
* s("squelch").bank("wt_digital").seg(8).note("F1").wt("0 0.25 0.5 0.75 1")
|
||||||
*/
|
*/
|
||||||
export const { wtPos, wavetablePosition } = registerControl('wtPos', 'wavetablePosition');
|
export const { wt, wavetablePosition } = registerControl('wt', 'wavetablePosition');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Amount of envelope applied wavetable oscillator's position envelope
|
||||||
|
*
|
||||||
|
* @name wtenv
|
||||||
|
* @param {number | Pattern} amount between 0 and 1
|
||||||
|
*/
|
||||||
|
export const { wtenv } = registerControl('wtenv');
|
||||||
/**
|
/**
|
||||||
* Attack time of the wavetable oscillator's position envelope
|
* Attack time of the wavetable oscillator's position envelope
|
||||||
*
|
*
|
||||||
* @name wtPosAttack
|
* @name wtattack
|
||||||
* @synonyms wtPosAtt
|
* @synonyms wtatt
|
||||||
* @param {number | Pattern} time attack time in seconds
|
* @param {number | Pattern} time attack time in seconds
|
||||||
*/
|
*/
|
||||||
export const { wtPosAttack, wtPosAtt } = registerControl('wtPosAttack', 'wtPosAtt');
|
export const { wtattack, wtatt } = registerControl('wtattack', 'wtatt');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decay time of the wavetable oscillator's position envelope
|
* Decay time of the wavetable oscillator's position envelope
|
||||||
*
|
*
|
||||||
* @name wtPosDecay
|
* @name wtdecay
|
||||||
* @synonyms wtPosDec
|
* @synonyms wtdec
|
||||||
* @param {number | Pattern} time decay time in seconds
|
* @param {number | Pattern} time decay time in seconds
|
||||||
*/
|
*/
|
||||||
export const { wtPosDecay, wtPosDec } = registerControl('wtPosDecay', 'wtPosDec');
|
export const { wtdecay, wtdec } = registerControl('wtdecay', 'wtdec');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sustain time of the wavetable oscillator's position envelope
|
* Sustain time of the wavetable oscillator's position envelope
|
||||||
*
|
*
|
||||||
* @name wtPosAttack
|
* @name wtsustain
|
||||||
* @synonyms wtPosSus
|
* @synonyms wtsus
|
||||||
* @param {number | Pattern} gain sustain level (0 to 1)
|
* @param {number | Pattern} gain sustain level (0 to 1)
|
||||||
*/
|
*/
|
||||||
export const { wtPosSustain, wtPosSus } = registerControl('wtPosSustain', 'wtPosSus');
|
export const { wtsustain, wtsus } = registerControl('wtsustain', 'wtsus');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release time of the wavetable oscillator's position envelope
|
* Release time of the wavetable oscillator's position envelope
|
||||||
*
|
*
|
||||||
* @name wtPosRelease
|
* @name wtrelease
|
||||||
* @synonyms wtPosRel
|
* @synonyms wtrel
|
||||||
* @param {number | Pattern} time release time in seconds
|
* @param {number | Pattern} time release time in seconds
|
||||||
*/
|
*/
|
||||||
export const { wtPosRelease, wtPosRel } = registerControl('wtPosRelease', 'wtPosRel');
|
export const { wtrelease, wtrel } = registerControl('wtrelease', 'wtrel');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rate of the LFO for the wavetable oscillator's position
|
* Rate of the LFO for the wavetable oscillator's position
|
||||||
*
|
*
|
||||||
* @name wtPosRate
|
* @name wtrate
|
||||||
* @param {number | Pattern} rate rate in hertz
|
* @param {number | Pattern} rate rate in hertz
|
||||||
*/
|
*/
|
||||||
export const { wtPosRate } = registerControl('wtPosRate');
|
export const { wtrate } = registerControl('wtrate');
|
||||||
|
/**
|
||||||
|
* cycle synced rate of the LFO for the wavetable oscillator's position
|
||||||
|
*
|
||||||
|
* @name wtsync
|
||||||
|
* @param {number | Pattern} rate rate in cycles
|
||||||
|
*/
|
||||||
|
export const { wtsync } = registerControl('wtsync');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Depth of the LFO for the wavetable oscillator's position
|
* Depth of the LFO for the wavetable oscillator's position
|
||||||
*
|
*
|
||||||
* @name wtPosDepth
|
* @name wtdepth
|
||||||
* @param {number | Pattern} depth depth of modulation
|
* @param {number | Pattern} depth depth of modulation
|
||||||
*/
|
*/
|
||||||
export const { wtPosDepth } = registerControl('wtPosDepth');
|
export const { wtdepth } = registerControl('wtdepth');
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether to sync the LFO for the wavetable oscillator's position
|
|
||||||
*
|
|
||||||
* @name wtPosSynced
|
|
||||||
* @param {number | Pattern} synced Whether to sync the lfo to CPM. > 0.5 will be synced
|
|
||||||
*/
|
|
||||||
export const { wtPosSynced } = registerControl('wtPosSynced');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shape of the LFO for the wavetable oscillator's position
|
* Shape of the LFO for the wavetable oscillator's position
|
||||||
*
|
*
|
||||||
* @name wtPosShape
|
* @name wtshape
|
||||||
* @param {number | Pattern} shape Shape of the lfo (0, 1, 2, ..)
|
* @param {number | Pattern} shape Shape of the lfo (0, 1, 2, ..)
|
||||||
*/
|
*/
|
||||||
export const { wtPosShape } = registerControl('wtPosShape');
|
export const { wtshape } = registerControl('wtshape');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DC offset of the LFO for the wavetable oscillator's position
|
* DC offset of the LFO for the wavetable oscillator's position
|
||||||
*
|
*
|
||||||
* @name wtPosDCOffset
|
* @name wtdc
|
||||||
* @param {number | Pattern} dcoffset dc offset. set to 0 for unipolar
|
* @param {number | Pattern} dcoffset dc offset. set to 0 for unipolar
|
||||||
*/
|
*/
|
||||||
export const { wtPosDCOffset } = registerControl('wtPosDCOffset');
|
export const { wtdc } = registerControl('wtdc');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skew of the LFO for the wavetable oscillator's position
|
* Skew of the LFO for the wavetable oscillator's position
|
||||||
*
|
*
|
||||||
* @name wtPosSkew
|
* @name wtskew
|
||||||
* @param {number | Pattern} skew How much to bend the LFO shape
|
* @param {number | Pattern} skew How much to bend the LFO shape
|
||||||
*/
|
*/
|
||||||
export const { wtPosSkew } = registerControl('wtPosSkew');
|
export const { wtskew } = registerControl('wtskew');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Amount of warp (alteration of the waveform) to apply to the wavetable oscillator
|
* Amount of warp (alteration of the waveform) to apply to the wavetable oscillator
|
||||||
*
|
*
|
||||||
* @name wtWarp
|
* @name warp
|
||||||
* @param {number | Pattern} amount Warp of the wavetable from 0 to 1
|
* @param {number | Pattern} amount Warp of the wavetable from 0 to 1
|
||||||
* @synonyms wavetableWarp
|
* @synonyms wavetableWarp
|
||||||
* @example
|
* @example
|
||||||
* s("basique").bank("wt_digital").seg(8).note("F1").wtWarp("0 0.25 0.5 0.75 1")
|
* s("basique").bank("wt_digital").seg(8).note("F1").warp("0 0.25 0.5 0.75 1")
|
||||||
* .wtWarpMode("spin")
|
* .warpmode("spin")
|
||||||
*/
|
*/
|
||||||
export const { wtWarp, wavetableWarp } = registerControl('wtWarp', 'wavetableWarp');
|
export const { warp, wavetableWarp } = registerControl('warp', 'wavetableWarp');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attack time of the wavetable oscillator's warp envelope
|
* Attack time of the wavetable oscillator's warp envelope
|
||||||
*
|
*
|
||||||
* @name wtWarpAttack
|
* @name warpattack
|
||||||
* @synonyms wtWarpAtt
|
* @synonyms warpatt
|
||||||
* @param {number | Pattern} time attack time in seconds
|
* @param {number | Pattern} time attack time in seconds
|
||||||
*/
|
*/
|
||||||
export const { wtWarpAttack, wtWarpAtt } = registerControl('wtWarpAttack', 'wtWarpAtt');
|
export const { warpattack, warpatt } = registerControl('warpattack', 'warpatt');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Decay time of the wavetable oscillator's warp envelope
|
* Decay time of the wavetable oscillator's warp envelope
|
||||||
*
|
*
|
||||||
* @name wtWarpDecay
|
* @name warpdecay
|
||||||
* @synonyms wtWarpDec
|
* @synonyms warpdec
|
||||||
* @param {number | Pattern} time decay time in seconds
|
* @param {number | Pattern} time decay time in seconds
|
||||||
*/
|
*/
|
||||||
export const { wtWarpDecay, wtWarpDec } = registerControl('wtWarpDecay', 'wtWarpDec');
|
export const { warpdecay, warpdec } = registerControl('warpdecay', 'warpdec');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sustain time of the wavetable oscillator's warp envelope
|
* Sustain time of the wavetable oscillator's warp envelope
|
||||||
*
|
*
|
||||||
* @name wtWarpAttack
|
* @name warpsustain
|
||||||
* @synonyms wtWarpSus
|
* @synonyms warpsus
|
||||||
* @param {number | Pattern} gain sustain level (0 to 1)
|
* @param {number | Pattern} gain sustain level (0 to 1)
|
||||||
*/
|
*/
|
||||||
export const { wtWarpSustain, wtWarpSus } = registerControl('wtWarpSustain', 'wtWarpSus');
|
export const { warpsustain, warpsus } = registerControl('warpsustain', 'warpsus');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Release time of the wavetable oscillator's warp envelope
|
* Release time of the wavetable oscillator's warp envelope
|
||||||
*
|
*
|
||||||
* @name wtWarpRelease
|
* @name warprelease
|
||||||
* @synonyms wtWarpRel
|
* @synonyms warprel
|
||||||
* @param {number | Pattern} time release time in seconds
|
* @param {number | Pattern} time release time in seconds
|
||||||
*/
|
*/
|
||||||
export const { wtWarpRelease, wtWarpRel } = registerControl('wtWarpRelease', 'wtWarpRel');
|
export const { warprelease, warprel } = registerControl('warprelease', 'warprel');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rate of the LFO for the wavetable oscillator's warp
|
* Rate of the LFO for the wavetable oscillator's warp
|
||||||
*
|
*
|
||||||
* @name wtWarpRate
|
* @name warprate
|
||||||
* @param {number | Pattern} rate rate in hertz
|
* @param {number | Pattern} rate rate in hertz
|
||||||
*/
|
*/
|
||||||
export const { wtWarpRate } = registerControl('wtWarpRate');
|
export const { warprate } = registerControl('warprate');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Depth of the LFO for the wavetable oscillator's warp
|
* Depth of the LFO for the wavetable oscillator's warp
|
||||||
*
|
*
|
||||||
* @name wtWarpDepth
|
* @name warpdepth
|
||||||
* @param {number | Pattern} depth depth of modulation
|
* @param {number | Pattern} depth depth of modulation
|
||||||
*/
|
*/
|
||||||
export const { wtWarpDepth } = registerControl('wtWarpDepth');
|
export const { warpdepth } = registerControl('warpdepth');
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether to sync the LFO for the wavetable oscillator's warp
|
|
||||||
*
|
|
||||||
* @name wtWarpSynced
|
|
||||||
* @param {number | Pattern} synced Whether to sync the lfo to CPM. > 0.5 will be synced
|
|
||||||
*/
|
|
||||||
export const { wtWarpSynced } = registerControl('wtWarpSynced');
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shape of the LFO for the wavetable oscillator's warp
|
* Shape of the LFO for the wavetable oscillator's warp
|
||||||
*
|
*
|
||||||
* @name wtWarpShape
|
* @name warpshape
|
||||||
* @param {number | Pattern} shape Shape of the lfo (0, 1, 2, ..)
|
* @param {number | Pattern} shape Shape of the lfo (0, 1, 2, ..)
|
||||||
*/
|
*/
|
||||||
export const { wtWarpShape } = registerControl('wtWarpShape');
|
export const { warpshape } = registerControl('warpshape');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* DC offset of the LFO for the wavetable oscillator's warp
|
* DC offset of the LFO for the wavetable oscillator's warp
|
||||||
*
|
*
|
||||||
* @name wtWarpDCOffset
|
* @name warpdc
|
||||||
* @param {number | Pattern} dcoffset dc offset. set to 0 for unipolar
|
* @param {number | Pattern} dcoffset dc offset. set to 0 for unipolar
|
||||||
*/
|
*/
|
||||||
export const { wtWarpDCOffset } = registerControl('wtWarpDCOffset');
|
export const { warpdc } = registerControl('warpdc');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Skew of the LFO for the wavetable oscillator's warp
|
* Skew of the LFO for the wavetable oscillator's warp
|
||||||
*
|
*
|
||||||
* @name wtWarpSkew
|
* @name warpskew
|
||||||
* @param {number | Pattern} skew How much to bend the LFO shape
|
* @param {number | Pattern} skew How much to bend the LFO shape
|
||||||
*/
|
*/
|
||||||
export const { wtWarpSkew } = registerControl('wtWarpSkew');
|
export const { warpskew } = registerControl('warpskew');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Type of warp (alteration of the waveform) to apply to the wavetable oscillator.
|
* Type of warp (alteration of the waveform) to apply to the wavetable oscillator.
|
||||||
|
|
@ -284,27 +282,43 @@ export const { wtWarpSkew } = registerControl('wtWarpSkew');
|
||||||
* The current options are: none, asym, bendp, bendm, bendmp, sync, quant, fold, pwm, orbit,
|
* The current options are: none, asym, bendp, bendm, bendmp, sync, quant, fold, pwm, orbit,
|
||||||
* spin, chaos, primes, binary, brownian, reciprocal, wormhole, logistic, sigmoid, fractal, flip
|
* spin, chaos, primes, binary, brownian, reciprocal, wormhole, logistic, sigmoid, fractal, flip
|
||||||
*
|
*
|
||||||
* @name wtWarpMode
|
* @name warpmode
|
||||||
* @param {number | string | Pattern} mode Warp mode
|
* @param {number | string | Pattern} mode Warp mode
|
||||||
* @synonyms wavetableWarpMode
|
* @synonyms wavetableWarpMode
|
||||||
* @example
|
* @example
|
||||||
* s("morgana").bank("wt_digital").seg(8).note("F1").wtWarp("0 0.25 0.5 0.75 1")
|
* s("morgana").bank("wt_digital").seg(8).note("F1").warp("0 0.25 0.5 0.75 1")
|
||||||
* .wtWarpMode("<asym bendp spin logistic sync wormhole brownian>*2")
|
* .warpmode("<asym bendp spin logistic sync wormhole brownian>*2")
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export const { wtWarpMode, wavetableWarpMode } = registerControl('wtWarpMode', 'wavetableWarpMode');
|
export const { warpmode, wavetableWarpMode } = registerControl('warpmode', 'wavetableWarpMode');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Amount of randomness of the initial phase of the wavetable oscillator.
|
* Amount of randomness of the initial phase of the wavetable oscillator.
|
||||||
*
|
*
|
||||||
* @name wtPhaseRand
|
* @name wtphaserand
|
||||||
* @param {number | Pattern} amount Randomness of the initial phase. Between 0 (not random) and 1 (fully random)
|
* @param {number | Pattern} amount Randomness of the initial phase. Between 0 (not random) and 1 (fully random)
|
||||||
* @synonyms wavetablePhaseRand
|
* @synonyms wavetablePhaseRand
|
||||||
* @example
|
* @example
|
||||||
* s("basique").bank("wt_digital").seg(16).wtPhaseRand("<0 1>")
|
* s("basique").bank("wt_digital").seg(16).wtphaserand("<0 1>")
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
export const { wtPhaseRand, wavetablePhaseRand } = registerControl('wtPhaseRand', 'wavetablePhaseRand');
|
export const { wtphaserand, wavetablePhaseRand } = registerControl('wtphaserand', 'wavetablePhaseRand');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Amount of envelope applied wavetable oscillator's position envelope
|
||||||
|
*
|
||||||
|
* @name warpenv
|
||||||
|
* @param {number | Pattern} amount between 0 and 1
|
||||||
|
*/
|
||||||
|
export const { warpenv } = registerControl('warpenv');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cycle synced rate of the LFO for the wavetable warp position
|
||||||
|
*
|
||||||
|
* @name warpsync
|
||||||
|
* @param {number | Pattern} rate rate in cycles
|
||||||
|
*/
|
||||||
|
export const { warpsync } = registerControl('warpsync');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define a custom webaudio node to use as a sound source.
|
* Define a custom webaudio node to use as a sound source.
|
||||||
|
|
|
||||||
|
|
@ -153,6 +153,41 @@ export const getADSRValues = (params, curve = 'linear', defaultValues) => {
|
||||||
return [Math.max(a ?? 0, envmin), Math.max(d ?? 0, envmin), Math.min(sustain, envmax), Math.max(r ?? 0, releaseMin)];
|
return [Math.max(a ?? 0, envmin), Math.max(d ?? 0, envmin), Math.min(sustain, envmax), Math.max(r ?? 0, releaseMin)];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// helper utility for applying standard modulators to a parameter
|
||||||
|
export function applyParameterModulators(audioContext, param, start, end, envelopeValues, lfoValues) {
|
||||||
|
let { amount, offset, defaultAmount = 1, curve = 'linear', values, holdEnd, defaultValues } = envelopeValues;
|
||||||
|
|
||||||
|
if (amount == null) {
|
||||||
|
const hasADSRParams = values.some((p) => p != null);
|
||||||
|
amount = hasADSRParams ? defaultAmount : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const min = offset ?? 0;
|
||||||
|
const max = amount + min;
|
||||||
|
const diff = Math.abs(max - min);
|
||||||
|
if (diff) {
|
||||||
|
const [attack, decay, sustain, release] = getADSRValues(values, curve, defaultValues);
|
||||||
|
getParamADSR(param, attack, decay, sustain, release, min, max, start, holdEnd, curve);
|
||||||
|
}
|
||||||
|
let lfo;
|
||||||
|
let { defaultDepth = 1, depth, dcoffset, ...getLfoInputs } = lfoValues;
|
||||||
|
|
||||||
|
if (depth == null) {
|
||||||
|
const hasLFOParams = Object.values(getLfoInputs).some((v) => v != null);
|
||||||
|
depth = hasLFOParams ? defaultDepth : 0;
|
||||||
|
}
|
||||||
|
if (depth) {
|
||||||
|
lfo = getLfo(audioContext, start, end, {
|
||||||
|
depth,
|
||||||
|
dcoffset,
|
||||||
|
...getLfoInputs,
|
||||||
|
});
|
||||||
|
lfo.connect(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { lfo, disconnect: () => lfo?.disconnect() };
|
||||||
|
}
|
||||||
|
|
||||||
export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fenv, start, end, fanchor, model, drive) {
|
export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fenv, start, end, fanchor, model, drive) {
|
||||||
const curve = 'exponential';
|
const curve = 'exponential';
|
||||||
const [attack, decay, sustain, release] = getADSRValues([att, dec, sus, rel], curve, [0.005, 0.14, 0, 0.1]);
|
const [attack, decay, sustain, release] = getADSRValues([att, dec, sus, rel], curve, [0.005, 0.14, 0, 0.1]);
|
||||||
|
|
|
||||||
|
|
@ -555,7 +555,7 @@ export const superdough = async (value, t, hapDuration, cps = 0.5, cycle = 0.5)
|
||||||
audioNodes.forEach((n) => n?.disconnect());
|
audioNodes.forEach((n) => n?.disconnect());
|
||||||
activeSoundSources.delete(chainID);
|
activeSoundSources.delete(chainID);
|
||||||
};
|
};
|
||||||
const soundHandle = await onTrigger(t, value, onEnded);
|
const soundHandle = await onTrigger(t, value, onEnded, cps);
|
||||||
|
|
||||||
if (soundHandle) {
|
if (soundHandle) {
|
||||||
sourceNode = soundHandle.node;
|
sourceNode = soundHandle.node;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import { getAudioContext, registerSound } from './index.mjs';
|
import { getAudioContext, registerSound } from './index.mjs';
|
||||||
import { getCommonSampleInfo } from './util.mjs';
|
import { getCommonSampleInfo } from './util.mjs';
|
||||||
import {
|
import {
|
||||||
|
applyParameterModulators,
|
||||||
destroyAudioWorkletNode,
|
destroyAudioWorkletNode,
|
||||||
getADSRValues,
|
getADSRValues,
|
||||||
getFrequencyFromValue,
|
getFrequencyFromValue,
|
||||||
|
|
@ -14,7 +15,7 @@ import {
|
||||||
import { logger } from './logger.mjs';
|
import { logger } from './logger.mjs';
|
||||||
|
|
||||||
const WT_MAX_MIP_LEVELS = 6;
|
const WT_MAX_MIP_LEVELS = 6;
|
||||||
export const WarpMode = Object.freeze({
|
export const Warpmode = Object.freeze({
|
||||||
NONE: 0,
|
NONE: 0,
|
||||||
ASYM: 1,
|
ASYM: 1,
|
||||||
MIRROR: 2,
|
MIRROR: 2,
|
||||||
|
|
@ -177,11 +178,17 @@ const _processTables = (json, baseUrl, frameLen, options = {}) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
export function registerWaveTable(key, tables, params) {
|
export function registerWaveTable(key, tables, params) {
|
||||||
registerSound(key, (t, hapValue, onended) => onTriggerSynth(t, hapValue, onended, tables, params?.frameLen ?? 2048), {
|
registerSound(
|
||||||
type: 'wavetable',
|
key,
|
||||||
tables,
|
(t, hapValue, onended, cps) => {
|
||||||
...params,
|
return onTriggerSynth(t, hapValue, onended, tables, cps, params?.frameLen ?? 2048);
|
||||||
});
|
},
|
||||||
|
{
|
||||||
|
type: 'wavetable',
|
||||||
|
tables,
|
||||||
|
...params,
|
||||||
|
},
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -214,13 +221,13 @@ export const tables = async (url, frameLen, json, options = {}) => {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export async function onTriggerSynth(t, value, onended, tables, frameLen) {
|
export async function onTriggerSynth(t, value, onended, tables, cps, frameLen) {
|
||||||
const { s, n = 0, duration } = value;
|
const { s, n = 0, duration } = value;
|
||||||
const ac = getAudioContext();
|
const ac = getAudioContext();
|
||||||
const [attack, decay, sustain, release] = getADSRValues([value.attack, value.decay, value.sustain, value.release]);
|
const [attack, decay, sustain, release] = getADSRValues([value.attack, value.decay, value.sustain, value.release]);
|
||||||
let { wtWarpMode } = value;
|
let { warpmode } = value;
|
||||||
if (typeof wtWarpMode === 'string') {
|
if (typeof warpmode === 'string') {
|
||||||
wtWarpMode = WarpMode[wtWarpMode.toUpperCase()] ?? WarpMode.NONE;
|
warpmode = Warpmode[warpmode.toUpperCase()] ?? Warpmode.NONE;
|
||||||
}
|
}
|
||||||
const frequency = getFrequencyFromValue(value);
|
const frequency = getFrequencyFromValue(value);
|
||||||
const { url, label } = getCommonSampleInfo(value, tables);
|
const { url, label } = getCommonSampleInfo(value, tables);
|
||||||
|
|
@ -236,12 +243,12 @@ export async function onTriggerSynth(t, value, onended, tables, frameLen) {
|
||||||
end: envEnd,
|
end: envEnd,
|
||||||
frequency,
|
frequency,
|
||||||
detune: value.detune,
|
detune: value.detune,
|
||||||
position: value.wtPos,
|
position: value.wt,
|
||||||
warp: value.wtWarp,
|
warp: value.warp,
|
||||||
warpMode: wtWarpMode,
|
warpMode: warpmode,
|
||||||
voices: value.unison,
|
voices: Math.max(value.unison ?? 1, 1),
|
||||||
spread: value.spread,
|
spread: value.spread,
|
||||||
phaserand: value.wtPhaseRand,
|
phaserand: (value.wtphaserand ?? value.unison > 1) ? 1 : 0,
|
||||||
},
|
},
|
||||||
{ outputChannelCount: [2] },
|
{ outputChannelCount: [2] },
|
||||||
);
|
);
|
||||||
|
|
@ -250,44 +257,73 @@ export async function onTriggerSynth(t, value, onended, tables, frameLen) {
|
||||||
logger(`[wavetable] still loading sound "${s}:${n}"`, 'highlight');
|
logger(`[wavetable] still loading sound "${s}:${n}"`, 'highlight');
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const posADSRParams = [value.wtPosAttack, value.wtPosDecay, value.wtPosSustain, value.wtPosRelease];
|
const posADSRParams = [value.wtattack, value.wtdecay, value.wtsustain, value.wtrelease];
|
||||||
const warpADSRParams = [value.wtPosAttack, value.wtPosDecay, value.wtPosSustain, value.wtPosRelease];
|
const warpADSRParams = [value.warpattack, value.warpdecay, value.warpsustain, value.warprelease];
|
||||||
const wtParams = source.parameters;
|
const wtParams = source.parameters;
|
||||||
const positionParam = wtParams.get('position');
|
const positionParam = wtParams.get('position');
|
||||||
const warpParam = wtParams.get('warp');
|
const warpParam = wtParams.get('warp');
|
||||||
let posLFO;
|
|
||||||
if (posADSRParams.some((p) => p !== undefined)) {
|
let wtrate = value.wtrate;
|
||||||
const [pAttack, pDecay, pSustain, pRelease] = getADSRValues(posADSRParams);
|
if (value.wtsync != null) {
|
||||||
getParamADSR(positionParam, pAttack, pDecay, pSustain, pRelease, 0, 1, t, holdEnd, 'linear');
|
wtrate = cps * value.wtsync;
|
||||||
} else {
|
|
||||||
const posLFO = getLfo(ac, t, endWithRelease, {
|
|
||||||
frequency: value.wtPosRate,
|
|
||||||
depth: value.wtPosDepth,
|
|
||||||
shape: value.wtPosShape,
|
|
||||||
skew: value.wtPosSkew,
|
|
||||||
dcoffset: value.wtPosDCOffset ?? 0,
|
|
||||||
});
|
|
||||||
posLFO.connect(positionParam);
|
|
||||||
}
|
}
|
||||||
let warpLFO;
|
|
||||||
if (posADSRParams.some((p) => p !== undefined)) {
|
const wtPosModulators = applyParameterModulators(
|
||||||
const [wAttack, wDecay, wSustain, wRelease] = getADSRValues(warpADSRParams);
|
ac,
|
||||||
getParamADSR(warpParam, wAttack, wDecay, wSustain, wRelease, 0, 1, t, holdEnd, 'linear');
|
positionParam,
|
||||||
} else {
|
t,
|
||||||
const warpLFO = getLfo(ac, t, endWithRelease, {
|
endWithRelease,
|
||||||
frequency: value.wtWarpRate,
|
{
|
||||||
depth: value.wtWarpDepth,
|
offset: value.wt,
|
||||||
shape: value.wtWarpShape,
|
amount: value.wtenv,
|
||||||
skew: value.wtWarpSkew,
|
defaultAmount: 0.5,
|
||||||
dcoffset: value.wtWarpDCOffset ?? 0,
|
shape: 'linear',
|
||||||
});
|
values: posADSRParams,
|
||||||
warpLFO.connect(warpParam);
|
holdEnd,
|
||||||
|
defaultValues: [0, 0.5, 0, 0.1],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
frequency: wtrate,
|
||||||
|
depth: value.wtdepth,
|
||||||
|
defaultDepth: 0.5,
|
||||||
|
shape: value.wtshape,
|
||||||
|
skew: value.wtskew,
|
||||||
|
dcoffset: value.wtdc ?? 0,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
|
let warprate = value.warprate;
|
||||||
|
if (value.warpsync != null) {
|
||||||
|
warprate = warprate = cps * value.warpsync;
|
||||||
}
|
}
|
||||||
const vibratoOscillator = getVibratoOscillator(source.detune, value, t);
|
const wtWarpModulators = applyParameterModulators(
|
||||||
|
ac,
|
||||||
|
warpParam,
|
||||||
|
t,
|
||||||
|
endWithRelease,
|
||||||
|
{
|
||||||
|
offset: value.warp,
|
||||||
|
amount: value.warpenv,
|
||||||
|
defaultAmount: 0.5,
|
||||||
|
shape: 'linear',
|
||||||
|
values: warpADSRParams,
|
||||||
|
holdEnd,
|
||||||
|
defaultValues: [0, 0.5, 0, 0.1],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
frequency: warprate,
|
||||||
|
depth: value.warpdepth,
|
||||||
|
defaultDepth: 0.5,
|
||||||
|
shape: value.warpshape,
|
||||||
|
skew: value.warpskew,
|
||||||
|
dcoffset: value.warpdc ?? 0,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
const vibratoOscillator = getVibratoOscillator(source.parameters.get('detune'), value, t);
|
||||||
const envGain = ac.createGain();
|
const envGain = ac.createGain();
|
||||||
const node = source.connect(envGain);
|
const node = source.connect(envGain);
|
||||||
getParamADSR(node.gain, attack, decay, sustain, release, 0, 1, t, holdEnd, 'linear');
|
getParamADSR(node.gain, attack, decay, sustain, release, 0, 1, t, holdEnd, 'linear');
|
||||||
getPitchEnvelope(source.detune, value, t, holdEnd);
|
getPitchEnvelope(source.parameters.get('detune'), value, t, holdEnd);
|
||||||
const handle = { node, source };
|
const handle = { node, source };
|
||||||
const timeoutNode = webAudioTimeout(
|
const timeoutNode = webAudioTimeout(
|
||||||
ac,
|
ac,
|
||||||
|
|
@ -296,8 +332,8 @@ export async function onTriggerSynth(t, value, onended, tables, frameLen) {
|
||||||
destroyAudioWorkletNode(source);
|
destroyAudioWorkletNode(source);
|
||||||
vibratoOscillator?.stop();
|
vibratoOscillator?.stop();
|
||||||
node.disconnect();
|
node.disconnect();
|
||||||
posLFO?.disconnect();
|
wtPosModulators?.disconnect();
|
||||||
warpLFO?.disconnect();
|
wtWarpModulators?.disconnect();
|
||||||
onended();
|
onended();
|
||||||
},
|
},
|
||||||
t,
|
t,
|
||||||
|
|
|
||||||
|
|
@ -1054,7 +1054,7 @@ class WavetableOscillatorProcessor extends AudioWorkletProcessor {
|
||||||
{ name: 'warp', defaultValue: 0, minValue: 0, maxValue: 1 },
|
{ name: 'warp', defaultValue: 0, minValue: 0, maxValue: 1 },
|
||||||
{ name: 'warpMode', defaultValue: 0 },
|
{ name: 'warpMode', defaultValue: 0 },
|
||||||
{ name: 'voices', defaultValue: 1, minValue: 1, maxValue: 32 },
|
{ name: 'voices', defaultValue: 1, minValue: 1, maxValue: 32 },
|
||||||
{ name: 'spread', defaultValue: 0.18, minValue: 0, maxValue: 1 },
|
{ name: 'spread', defaultValue: 0.7, minValue: 0, maxValue: 1 },
|
||||||
{ name: 'phaserand', defaultValue: 0, minValue: 0, maxValue: 1 },
|
{ name: 'phaserand', defaultValue: 0, minValue: 0, maxValue: 1 },
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
@ -1239,7 +1239,6 @@ class WavetableOscillatorProcessor extends AudioWorkletProcessor {
|
||||||
}
|
}
|
||||||
const outL = outputs[0][0];
|
const outL = outputs[0][0];
|
||||||
const outR = outputs[0][1] || outputs[0][0];
|
const outR = outputs[0][1] || outputs[0][0];
|
||||||
const gainAdjustment = 0.3;
|
|
||||||
|
|
||||||
if (!this.tables) {
|
if (!this.tables) {
|
||||||
outL.fill(0);
|
outL.fill(0);
|
||||||
|
|
@ -1256,13 +1255,13 @@ class WavetableOscillatorProcessor extends AudioWorkletProcessor {
|
||||||
const warpAmount = pv(parameters.warp, i);
|
const warpAmount = pv(parameters.warp, i);
|
||||||
const warpMode = pv(parameters.warpMode, i);
|
const warpMode = pv(parameters.warpMode, i);
|
||||||
const voices = pv(parameters.voices, i);
|
const voices = pv(parameters.voices, i);
|
||||||
const spread = voices > 1 ? pv(parameters.spread, i) : 0;
|
|
||||||
const phaseRand = pv(parameters.phaserand, i);
|
const phaseRand = pv(parameters.phaserand, i);
|
||||||
|
const spread = voices > 1 ? pv(parameters.spread, i) : 0;
|
||||||
const gain1 = Math.sqrt(0.5 - 0.5 * spread);
|
const gain1 = Math.sqrt(0.5 - 0.5 * spread);
|
||||||
const gain2 = Math.sqrt(0.5 + 0.5 * spread);
|
const gain2 = Math.sqrt(0.5 + 0.5 * spread);
|
||||||
let f = pv(parameters.frequency, i);
|
let f = pv(parameters.frequency, i);
|
||||||
f = applySemitoneDetuneToFrequency(f, detune / 100); // overall detune
|
f = applySemitoneDetuneToFrequency(f, detune / 100); // overall detune
|
||||||
const normalizer = 0.3 / voices;
|
const normalizer = 0.3 / Math.sqrt(voices);
|
||||||
for (let n = 0; n < voices; n++) {
|
for (let n = 0; n < voices; n++) {
|
||||||
const isOdd = (n & 1) == 1;
|
const isOdd = (n & 1) == 1;
|
||||||
let gainL = gain1;
|
let gainL = gain1;
|
||||||
|
|
|
||||||
|
|
@ -11789,6 +11789,112 @@ exports[`runs examples > example "vowel" example index 1 1`] = `
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`runs examples > example "warp" example index 0 1`] = `
|
||||||
|
[
|
||||||
|
"[ 0/1 → 1/8 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ (1/8 → 1/5) ⇝ 1/4 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ 1/8 ⇜ (1/5 → 1/4) | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 1/4 → 3/8 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ (3/8 → 2/5) ⇝ 1/2 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 3/8 ⇜ (2/5 → 1/2) | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ (1/2 → 3/5) ⇝ 5/8 | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ 1/2 ⇜ (3/5 → 5/8) | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 5/8 → 3/4 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ (3/4 → 4/5) ⇝ 7/8 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 3/4 ⇜ (4/5 → 7/8) | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 7/8 → 1/1 | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 1/1 → 9/8 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ (9/8 → 6/5) ⇝ 5/4 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ 9/8 ⇜ (6/5 → 5/4) | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 5/4 → 11/8 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ (11/8 → 7/5) ⇝ 3/2 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 11/8 ⇜ (7/5 → 3/2) | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ (3/2 → 8/5) ⇝ 13/8 | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ 3/2 ⇜ (8/5 → 13/8) | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 13/8 → 7/4 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ (7/4 → 9/5) ⇝ 15/8 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 7/4 ⇜ (9/5 → 15/8) | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 15/8 → 2/1 | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 2/1 → 17/8 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ (17/8 → 11/5) ⇝ 9/4 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ 17/8 ⇜ (11/5 → 9/4) | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 9/4 → 19/8 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ (19/8 → 12/5) ⇝ 5/2 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 19/8 ⇜ (12/5 → 5/2) | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ (5/2 → 13/5) ⇝ 21/8 | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ 5/2 ⇜ (13/5 → 21/8) | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 21/8 → 11/4 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ (11/4 → 14/5) ⇝ 23/8 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 11/4 ⇜ (14/5 → 23/8) | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 23/8 → 3/1 | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 3/1 → 25/8 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ (25/8 → 16/5) ⇝ 13/4 | s:basique bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ 25/8 ⇜ (16/5 → 13/4) | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 13/4 → 27/8 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ (27/8 → 17/5) ⇝ 7/2 | s:basique bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 27/8 ⇜ (17/5 → 7/2) | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ (7/2 → 18/5) ⇝ 29/8 | s:basique bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ 7/2 ⇜ (18/5 → 29/8) | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 29/8 → 15/4 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ (15/4 → 19/5) ⇝ 31/8 | s:basique bank:wt_digital note:F1 warp:0.75 warpmode:spin ]",
|
||||||
|
"[ 15/4 ⇜ (19/5 → 31/8) | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
"[ 31/8 → 4/1 | s:basique bank:wt_digital note:F1 warp:1 warpmode:spin ]",
|
||||||
|
]
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`runs examples > example "warpmode" example index 0 1`] = `
|
||||||
|
[
|
||||||
|
"[ 0/1 → 1/8 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:asym ]",
|
||||||
|
"[ (1/8 → 1/5) ⇝ 1/4 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:asym ]",
|
||||||
|
"[ 1/8 ⇜ (1/5 → 1/4) | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:asym ]",
|
||||||
|
"[ 1/4 → 3/8 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:asym ]",
|
||||||
|
"[ (3/8 → 2/5) ⇝ 1/2 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:asym ]",
|
||||||
|
"[ 3/8 ⇜ (2/5 → 1/2) | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:asym ]",
|
||||||
|
"[ (1/2 → 3/5) ⇝ 5/8 | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:bendp ]",
|
||||||
|
"[ 1/2 ⇜ (3/5 → 5/8) | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:bendp ]",
|
||||||
|
"[ 5/8 → 3/4 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:bendp ]",
|
||||||
|
"[ (3/4 → 4/5) ⇝ 7/8 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:bendp ]",
|
||||||
|
"[ 3/4 ⇜ (4/5 → 7/8) | s:morgana bank:wt_digital note:F1 warp:1 warpmode:bendp ]",
|
||||||
|
"[ 7/8 → 1/1 | s:morgana bank:wt_digital note:F1 warp:1 warpmode:bendp ]",
|
||||||
|
"[ 1/1 → 9/8 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ (9/8 → 6/5) ⇝ 5/4 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:spin ]",
|
||||||
|
"[ 9/8 ⇜ (6/5 → 5/4) | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 5/4 → 11/8 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ (11/8 → 7/5) ⇝ 3/2 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:spin ]",
|
||||||
|
"[ 11/8 ⇜ (7/5 → 3/2) | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:spin ]",
|
||||||
|
"[ (3/2 → 8/5) ⇝ 13/8 | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:logistic ]",
|
||||||
|
"[ 3/2 ⇜ (8/5 → 13/8) | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:logistic ]",
|
||||||
|
"[ 13/8 → 7/4 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:logistic ]",
|
||||||
|
"[ (7/4 → 9/5) ⇝ 15/8 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:logistic ]",
|
||||||
|
"[ 7/4 ⇜ (9/5 → 15/8) | s:morgana bank:wt_digital note:F1 warp:1 warpmode:logistic ]",
|
||||||
|
"[ 15/8 → 2/1 | s:morgana bank:wt_digital note:F1 warp:1 warpmode:logistic ]",
|
||||||
|
"[ 2/1 → 17/8 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:sync ]",
|
||||||
|
"[ (17/8 → 11/5) ⇝ 9/4 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:sync ]",
|
||||||
|
"[ 17/8 ⇜ (11/5 → 9/4) | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:sync ]",
|
||||||
|
"[ 9/4 → 19/8 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:sync ]",
|
||||||
|
"[ (19/8 → 12/5) ⇝ 5/2 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:sync ]",
|
||||||
|
"[ 19/8 ⇜ (12/5 → 5/2) | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:sync ]",
|
||||||
|
"[ (5/2 → 13/5) ⇝ 21/8 | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:wormhole ]",
|
||||||
|
"[ 5/2 ⇜ (13/5 → 21/8) | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:wormhole ]",
|
||||||
|
"[ 21/8 → 11/4 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:wormhole ]",
|
||||||
|
"[ (11/4 → 14/5) ⇝ 23/8 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:wormhole ]",
|
||||||
|
"[ 11/4 ⇜ (14/5 → 23/8) | s:morgana bank:wt_digital note:F1 warp:1 warpmode:wormhole ]",
|
||||||
|
"[ 23/8 → 3/1 | s:morgana bank:wt_digital note:F1 warp:1 warpmode:wormhole ]",
|
||||||
|
"[ 3/1 → 25/8 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:brownian ]",
|
||||||
|
"[ (25/8 → 16/5) ⇝ 13/4 | s:morgana bank:wt_digital note:F1 warp:0 warpmode:brownian ]",
|
||||||
|
"[ 25/8 ⇜ (16/5 → 13/4) | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:brownian ]",
|
||||||
|
"[ 13/4 → 27/8 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:brownian ]",
|
||||||
|
"[ (27/8 → 17/5) ⇝ 7/2 | s:morgana bank:wt_digital note:F1 warp:0.25 warpmode:brownian ]",
|
||||||
|
"[ 27/8 ⇜ (17/5 → 7/2) | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:brownian ]",
|
||||||
|
"[ (7/2 → 18/5) ⇝ 29/8 | s:morgana bank:wt_digital note:F1 warp:0.5 warpmode:asym ]",
|
||||||
|
"[ 7/2 ⇜ (18/5 → 29/8) | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:asym ]",
|
||||||
|
"[ 29/8 → 15/4 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:asym ]",
|
||||||
|
"[ (15/4 → 19/5) ⇝ 31/8 | s:morgana bank:wt_digital note:F1 warp:0.75 warpmode:asym ]",
|
||||||
|
"[ 15/4 ⇜ (19/5 → 31/8) | s:morgana bank:wt_digital note:F1 warp:1 warpmode:asym ]",
|
||||||
|
"[ 31/8 → 4/1 | s:morgana bank:wt_digital note:F1 warp:1 warpmode:asym ]",
|
||||||
|
]
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`runs examples > example "wchoose" example index 0 1`] = `
|
exports[`runs examples > example "wchoose" example index 0 1`] = `
|
||||||
[
|
[
|
||||||
"[ 0/1 → 1/5 | note:c2 s:sine ]",
|
"[ 0/1 → 1/5 | note:c2 s:sine ]",
|
||||||
|
|
@ -11993,231 +12099,125 @@ exports[`runs examples > example "withValue" example index 0 1`] = `
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`runs examples > example "wtPhaseRand" example index 0 1`] = `
|
exports[`runs examples > example "wt" example index 0 1`] = `
|
||||||
[
|
[
|
||||||
"[ 0/1 → 1/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 0/1 → 1/8 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 1/16 → 1/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (1/8 → 1/5) ⇝ 1/4 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 1/8 → 3/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 1/8 ⇜ (1/5 → 1/4) | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 3/16 → 1/4 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 1/4 → 3/8 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 1/4 → 5/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (3/8 → 2/5) ⇝ 1/2 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 5/16 → 3/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 3/8 ⇜ (2/5 → 1/2) | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 3/8 → 7/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (1/2 → 3/5) ⇝ 5/8 | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 7/16 → 1/2 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 1/2 ⇜ (3/5 → 5/8) | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 1/2 → 9/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 5/8 → 3/4 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 9/16 → 5/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (3/4 → 4/5) ⇝ 7/8 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 5/8 → 11/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 3/4 ⇜ (4/5 → 7/8) | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 11/16 → 3/4 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 7/8 → 1/1 | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 3/4 → 13/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 1/1 → 9/8 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 13/16 → 7/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (9/8 → 6/5) ⇝ 5/4 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 7/8 → 15/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 9/8 ⇜ (6/5 → 5/4) | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 15/16 → 1/1 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 5/4 → 11/8 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 1/1 → 17/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ (11/8 → 7/5) ⇝ 3/2 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 17/16 → 9/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 11/8 ⇜ (7/5 → 3/2) | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 9/8 → 19/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ (3/2 → 8/5) ⇝ 13/8 | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 19/16 → 5/4 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 3/2 ⇜ (8/5 → 13/8) | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 5/4 → 21/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 13/8 → 7/4 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 21/16 → 11/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ (7/4 → 9/5) ⇝ 15/8 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 11/8 → 23/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 7/4 ⇜ (9/5 → 15/8) | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 23/16 → 3/2 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 15/8 → 2/1 | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 3/2 → 25/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 2/1 → 17/8 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 25/16 → 13/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ (17/8 → 11/5) ⇝ 9/4 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 13/8 → 27/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 17/8 ⇜ (11/5 → 9/4) | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 27/16 → 7/4 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 9/4 → 19/8 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 7/4 → 29/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ (19/8 → 12/5) ⇝ 5/2 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 29/16 → 15/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 19/8 ⇜ (12/5 → 5/2) | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 15/8 → 31/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ (5/2 → 13/5) ⇝ 21/8 | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 31/16 → 2/1 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
"[ 5/2 ⇜ (13/5 → 21/8) | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 2/1 → 33/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 21/8 → 11/4 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 33/16 → 17/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (11/4 → 14/5) ⇝ 23/8 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 17/8 → 35/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 11/4 ⇜ (14/5 → 23/8) | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 35/16 → 9/4 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 23/8 → 3/1 | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 9/4 → 37/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 3/1 → 25/8 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 37/16 → 19/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (25/8 → 16/5) ⇝ 13/4 | s:squelch bank:wt_digital note:F1 wt:0 ]",
|
||||||
"[ 19/8 → 39/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 25/8 ⇜ (16/5 → 13/4) | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 39/16 → 5/2 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 13/4 → 27/8 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 5/2 → 41/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (27/8 → 17/5) ⇝ 7/2 | s:squelch bank:wt_digital note:F1 wt:0.25 ]",
|
||||||
"[ 41/16 → 21/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 27/8 ⇜ (17/5 → 7/2) | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 21/8 → 43/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (7/2 → 18/5) ⇝ 29/8 | s:squelch bank:wt_digital note:F1 wt:0.5 ]",
|
||||||
"[ 43/16 → 11/4 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 7/2 ⇜ (18/5 → 29/8) | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 11/4 → 45/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 29/8 → 15/4 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 45/16 → 23/8 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ (15/4 → 19/5) ⇝ 31/8 | s:squelch bank:wt_digital note:F1 wt:0.75 ]",
|
||||||
"[ 23/8 → 47/16 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 15/4 ⇜ (19/5 → 31/8) | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 47/16 → 3/1 | s:basique bank:wt_digital wtPhaseRand:0 ]",
|
"[ 31/8 → 4/1 | s:squelch bank:wt_digital note:F1 wt:1 ]",
|
||||||
"[ 3/1 → 49/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 49/16 → 25/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 25/8 → 51/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 51/16 → 13/4 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 13/4 → 53/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 53/16 → 27/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 27/8 → 55/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 55/16 → 7/2 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 7/2 → 57/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 57/16 → 29/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 29/8 → 59/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 59/16 → 15/4 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 15/4 → 61/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 61/16 → 31/8 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 31/8 → 63/16 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
"[ 63/16 → 4/1 | s:basique bank:wt_digital wtPhaseRand:1 ]",
|
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
exports[`runs examples > example "wtPos" example index 0 1`] = `
|
exports[`runs examples > example "wtphaserand" example index 0 1`] = `
|
||||||
[
|
[
|
||||||
"[ 0/1 → 1/8 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 0/1 → 1/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (1/8 → 1/5) ⇝ 1/4 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 1/16 → 1/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 1/8 ⇜ (1/5 → 1/4) | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 1/8 → 3/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 1/4 → 3/8 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 3/16 → 1/4 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (3/8 → 2/5) ⇝ 1/2 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 1/4 → 5/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 3/8 ⇜ (2/5 → 1/2) | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 5/16 → 3/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (1/2 → 3/5) ⇝ 5/8 | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 3/8 → 7/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 1/2 ⇜ (3/5 → 5/8) | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 7/16 → 1/2 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 5/8 → 3/4 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 1/2 → 9/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (3/4 → 4/5) ⇝ 7/8 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 9/16 → 5/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 3/4 ⇜ (4/5 → 7/8) | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 5/8 → 11/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 7/8 → 1/1 | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 11/16 → 3/4 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 1/1 → 9/8 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 3/4 → 13/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (9/8 → 6/5) ⇝ 5/4 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 13/16 → 7/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 9/8 ⇜ (6/5 → 5/4) | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 7/8 → 15/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 5/4 → 11/8 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 15/16 → 1/1 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (11/8 → 7/5) ⇝ 3/2 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 1/1 → 17/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 11/8 ⇜ (7/5 → 3/2) | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 17/16 → 9/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (3/2 → 8/5) ⇝ 13/8 | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 9/8 → 19/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 3/2 ⇜ (8/5 → 13/8) | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 19/16 → 5/4 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 13/8 → 7/4 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 5/4 → 21/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (7/4 → 9/5) ⇝ 15/8 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 21/16 → 11/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 7/4 ⇜ (9/5 → 15/8) | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 11/8 → 23/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 15/8 → 2/1 | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 23/16 → 3/2 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 2/1 → 17/8 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 3/2 → 25/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (17/8 → 11/5) ⇝ 9/4 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 25/16 → 13/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 17/8 ⇜ (11/5 → 9/4) | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 13/8 → 27/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 9/4 → 19/8 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 27/16 → 7/4 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (19/8 → 12/5) ⇝ 5/2 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 7/4 → 29/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 19/8 ⇜ (12/5 → 5/2) | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 29/16 → 15/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (5/2 → 13/5) ⇝ 21/8 | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 15/8 → 31/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 5/2 ⇜ (13/5 → 21/8) | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 31/16 → 2/1 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 21/8 → 11/4 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 2/1 → 33/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (11/4 → 14/5) ⇝ 23/8 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 33/16 → 17/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 11/4 ⇜ (14/5 → 23/8) | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 17/8 → 35/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 23/8 → 3/1 | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 35/16 → 9/4 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 3/1 → 25/8 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 9/4 → 37/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (25/8 → 16/5) ⇝ 13/4 | s:squelch bank:wt_digital note:F1 wtPos:0 ]",
|
"[ 37/16 → 19/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 25/8 ⇜ (16/5 → 13/4) | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 19/8 → 39/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 13/4 → 27/8 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 39/16 → 5/2 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (27/8 → 17/5) ⇝ 7/2 | s:squelch bank:wt_digital note:F1 wtPos:0.25 ]",
|
"[ 5/2 → 41/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 27/8 ⇜ (17/5 → 7/2) | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 41/16 → 21/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (7/2 → 18/5) ⇝ 29/8 | s:squelch bank:wt_digital note:F1 wtPos:0.5 ]",
|
"[ 21/8 → 43/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 7/2 ⇜ (18/5 → 29/8) | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 43/16 → 11/4 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 29/8 → 15/4 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 11/4 → 45/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ (15/4 → 19/5) ⇝ 31/8 | s:squelch bank:wt_digital note:F1 wtPos:0.75 ]",
|
"[ 45/16 → 23/8 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 15/4 ⇜ (19/5 → 31/8) | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 23/8 → 47/16 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
"[ 31/8 → 4/1 | s:squelch bank:wt_digital note:F1 wtPos:1 ]",
|
"[ 47/16 → 3/1 | s:basique bank:wt_digital wtphaserand:0 ]",
|
||||||
]
|
"[ 3/1 → 49/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
`;
|
"[ 49/16 → 25/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
|
"[ 25/8 → 51/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
exports[`runs examples > example "wtWarp" example index 0 1`] = `
|
"[ 51/16 → 13/4 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
[
|
"[ 13/4 → 53/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 0/1 → 1/8 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
"[ 53/16 → 27/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (1/8 → 1/5) ⇝ 1/4 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
"[ 27/8 → 55/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 1/8 ⇜ (1/5 → 1/4) | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
"[ 55/16 → 7/2 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 1/4 → 3/8 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
"[ 7/2 → 57/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (3/8 → 2/5) ⇝ 1/2 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
"[ 57/16 → 29/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 3/8 ⇜ (2/5 → 1/2) | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
"[ 29/8 → 59/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (1/2 → 3/5) ⇝ 5/8 | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
"[ 59/16 → 15/4 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 1/2 ⇜ (3/5 → 5/8) | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
"[ 15/4 → 61/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 5/8 → 3/4 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
"[ 61/16 → 31/8 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ (3/4 → 4/5) ⇝ 7/8 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
"[ 31/8 → 63/16 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 3/4 ⇜ (4/5 → 7/8) | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
"[ 63/16 → 4/1 | s:basique bank:wt_digital wtphaserand:1 ]",
|
||||||
"[ 7/8 → 1/1 | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
"[ 1/1 → 9/8 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ (9/8 → 6/5) ⇝ 5/4 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ 9/8 ⇜ (6/5 → 5/4) | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 5/4 → 11/8 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ (11/8 → 7/5) ⇝ 3/2 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 11/8 ⇜ (7/5 → 3/2) | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ (3/2 → 8/5) ⇝ 13/8 | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ 3/2 ⇜ (8/5 → 13/8) | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ 13/8 → 7/4 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ (7/4 → 9/5) ⇝ 15/8 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ 7/4 ⇜ (9/5 → 15/8) | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
"[ 15/8 → 2/1 | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
"[ 2/1 → 17/8 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ (17/8 → 11/5) ⇝ 9/4 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ 17/8 ⇜ (11/5 → 9/4) | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 9/4 → 19/8 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ (19/8 → 12/5) ⇝ 5/2 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 19/8 ⇜ (12/5 → 5/2) | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ (5/2 → 13/5) ⇝ 21/8 | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ 5/2 ⇜ (13/5 → 21/8) | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ 21/8 → 11/4 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ (11/4 → 14/5) ⇝ 23/8 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ 11/4 ⇜ (14/5 → 23/8) | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
"[ 23/8 → 3/1 | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
"[ 3/1 → 25/8 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ (25/8 → 16/5) ⇝ 13/4 | s:basique bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ 25/8 ⇜ (16/5 → 13/4) | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 13/4 → 27/8 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ (27/8 → 17/5) ⇝ 7/2 | s:basique bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 27/8 ⇜ (17/5 → 7/2) | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ (7/2 → 18/5) ⇝ 29/8 | s:basique bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ 7/2 ⇜ (18/5 → 29/8) | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ 29/8 → 15/4 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ (15/4 → 19/5) ⇝ 31/8 | s:basique bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:spin ]",
|
|
||||||
"[ 15/4 ⇜ (19/5 → 31/8) | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
"[ 31/8 → 4/1 | s:basique bank:wt_digital note:F1 wtWarp:1 wtWarpMode:spin ]",
|
|
||||||
]
|
|
||||||
`;
|
|
||||||
|
|
||||||
exports[`runs examples > example "wtWarpMode" example index 0 1`] = `
|
|
||||||
[
|
|
||||||
"[ 0/1 → 1/8 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:asym ]",
|
|
||||||
"[ (1/8 → 1/5) ⇝ 1/4 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:asym ]",
|
|
||||||
"[ 1/8 ⇜ (1/5 → 1/4) | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:asym ]",
|
|
||||||
"[ 1/4 → 3/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:asym ]",
|
|
||||||
"[ (3/8 → 2/5) ⇝ 1/2 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:asym ]",
|
|
||||||
"[ 3/8 ⇜ (2/5 → 1/2) | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:asym ]",
|
|
||||||
"[ (1/2 → 3/5) ⇝ 5/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:bendp ]",
|
|
||||||
"[ 1/2 ⇜ (3/5 → 5/8) | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:bendp ]",
|
|
||||||
"[ 5/8 → 3/4 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:bendp ]",
|
|
||||||
"[ (3/4 → 4/5) ⇝ 7/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:bendp ]",
|
|
||||||
"[ 3/4 ⇜ (4/5 → 7/8) | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:bendp ]",
|
|
||||||
"[ 7/8 → 1/1 | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:bendp ]",
|
|
||||||
"[ 1/1 → 9/8 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ (9/8 → 6/5) ⇝ 5/4 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:spin ]",
|
|
||||||
"[ 9/8 ⇜ (6/5 → 5/4) | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 5/4 → 11/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ (11/8 → 7/5) ⇝ 3/2 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:spin ]",
|
|
||||||
"[ 11/8 ⇜ (7/5 → 3/2) | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:spin ]",
|
|
||||||
"[ (3/2 → 8/5) ⇝ 13/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:logistic ]",
|
|
||||||
"[ 3/2 ⇜ (8/5 → 13/8) | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:logistic ]",
|
|
||||||
"[ 13/8 → 7/4 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:logistic ]",
|
|
||||||
"[ (7/4 → 9/5) ⇝ 15/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:logistic ]",
|
|
||||||
"[ 7/4 ⇜ (9/5 → 15/8) | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:logistic ]",
|
|
||||||
"[ 15/8 → 2/1 | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:logistic ]",
|
|
||||||
"[ 2/1 → 17/8 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:sync ]",
|
|
||||||
"[ (17/8 → 11/5) ⇝ 9/4 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:sync ]",
|
|
||||||
"[ 17/8 ⇜ (11/5 → 9/4) | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:sync ]",
|
|
||||||
"[ 9/4 → 19/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:sync ]",
|
|
||||||
"[ (19/8 → 12/5) ⇝ 5/2 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:sync ]",
|
|
||||||
"[ 19/8 ⇜ (12/5 → 5/2) | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:sync ]",
|
|
||||||
"[ (5/2 → 13/5) ⇝ 21/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:wormhole ]",
|
|
||||||
"[ 5/2 ⇜ (13/5 → 21/8) | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:wormhole ]",
|
|
||||||
"[ 21/8 → 11/4 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:wormhole ]",
|
|
||||||
"[ (11/4 → 14/5) ⇝ 23/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:wormhole ]",
|
|
||||||
"[ 11/4 ⇜ (14/5 → 23/8) | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:wormhole ]",
|
|
||||||
"[ 23/8 → 3/1 | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:wormhole ]",
|
|
||||||
"[ 3/1 → 25/8 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:brownian ]",
|
|
||||||
"[ (25/8 → 16/5) ⇝ 13/4 | s:morgana bank:wt_digital note:F1 wtWarp:0 wtWarpMode:brownian ]",
|
|
||||||
"[ 25/8 ⇜ (16/5 → 13/4) | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:brownian ]",
|
|
||||||
"[ 13/4 → 27/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:brownian ]",
|
|
||||||
"[ (27/8 → 17/5) ⇝ 7/2 | s:morgana bank:wt_digital note:F1 wtWarp:0.25 wtWarpMode:brownian ]",
|
|
||||||
"[ 27/8 ⇜ (17/5 → 7/2) | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:brownian ]",
|
|
||||||
"[ (7/2 → 18/5) ⇝ 29/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.5 wtWarpMode:asym ]",
|
|
||||||
"[ 7/2 ⇜ (18/5 → 29/8) | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:asym ]",
|
|
||||||
"[ 29/8 → 15/4 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:asym ]",
|
|
||||||
"[ (15/4 → 19/5) ⇝ 31/8 | s:morgana bank:wt_digital note:F1 wtWarp:0.75 wtWarpMode:asym ]",
|
|
||||||
"[ 15/4 ⇜ (19/5 → 31/8) | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:asym ]",
|
|
||||||
"[ 31/8 → 4/1 | s:morgana bank:wt_digital note:F1 wtWarp:1 wtWarpMode:asym ]",
|
|
||||||
]
|
]
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue