Some examples

This commit is contained in:
Aria 2025-10-15 14:53:07 -05:00
parent d6de160224
commit 0fe7edc157
3 changed files with 251 additions and 2 deletions

View file

@ -2072,8 +2072,6 @@ export const { tsdelay } = registerControl('tsdelay');
export const { real } = registerControl('real');
export const { imag } = registerControl('imag');
export const { enhance } = registerControl('enhance');
export const { partials } = registerControl('partials');
export const { phases } = registerControl('phases');
export const { comb } = registerControl('comb');
export const { smear } = registerControl('smear');
export const { scram } = registerControl('scram');
@ -2375,3 +2373,31 @@ export const scrub = register(
},
false,
);
/**
* Scale the magnitude of the harmonics of one of the core synths ('sine', 'tri', 'saw', ..)
*
* Can also be used to create a new synth via `s('user').partials(...)`
*
* @name partials
* @param {number[] | Pattern} partials List of magnitudes for partials. 0th entry is the first harmonic (i.e. DC offset is skipped)
* @example
* s("user").seg(16).n(irand(8)).scale("A:major")
* .partials([1, 0, 1, 0, 0, 1])
* @example
* s("saw").seg(8).n(irand(12)).scale("G#:minor")
* .partials(binaryL(256))
*/
export const { partials } = registerControl('partials');
/**
* Rotates the harmonics of one of the core synths ('sine', 'tri', 'saw', 'user', ..) by a list of phases
*
* @name phases
* @param {number[] | Pattern} phases List of phases for partials. 0th entry is the first phase (i.e. DC offset is skipped)
* @example
* s("saw").seg(8).n(irand(12)).scale("G#:minor")
* .partials(binaryL(256))
* .phases(randL(20))
*/
export const { phases } = registerControl('phases');

View file

@ -263,6 +263,8 @@ export const binaryN = (n, nBits = 16) => {
*
* @name binaryL
* @param {number} n - input number to convert to binary
* s("saw").seg(8)
* .partials(binaryL(irand(4096).add(1)))
*/
export const binaryL = (n) => {
const nBits = reify(n).log2(0).floor().add(1);
@ -288,6 +290,15 @@ export const binaryNL = (n, nBits = 16) => {
.appLeft(reify(nBits));
};
/**
* Creates a list of random numbers of the given length
*
* @name randL
* @param {number} n Number of random numbers to sample
* @example
* s("saw").seg(16).n(irand(12)).scale("F1:minor")
* .partials(randL(8))
*/
export const randL = (n) => {
return signal((t) => (nVal) => timeToRands(t, nVal).map(Math.abs)).appLeft(reify(n));
};