Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

latest changes #814

Closed
wants to merge 322 commits into from
Closed
Changes from 12 commits
Commits
Show all changes
322 commits
Select commit Hold shift + click to select a range
4b64168
fix: imports
felixroos Oct 3, 2023
0471292
cache noise
felixroos Oct 3, 2023
376cf09
rename zzfx noise to znoise
felixroos Oct 3, 2023
9c9323e
snapshot
felixroos Oct 3, 2023
d1ffdd5
Merge pull request #713 from Bubobubobubobubo/noise
felixroos Oct 3, 2023
020e859
fix: slider crash on some platforms
felixroos Oct 4, 2023
767ba71
Merge pull request #723 from tidalcycles/slider-afterthoughts
felixroos Oct 4, 2023
a4386a6
Merge branch 'main' into reverb
felixroos Oct 4, 2023
508af7e
update internal reverb param names
felixroos Oct 4, 2023
ce842f7
simplify createReverb
felixroos Oct 4, 2023
3c4f835
consistent naming + simplify
felixroos Oct 4, 2023
75099ab
remove unused reverb method
felixroos Oct 4, 2023
0b888ac
Merge pull request #718 from Bubobubobubobubo/reverb
felixroos Oct 4, 2023
d6c8838
Integrate with the new impulse generation functionality
vasilymilovidov Oct 4, 2023
1d4eb59
fix: reverbGen.mjs
vasilymilovidov Oct 5, 2023
11b0a00
Merge branch 'main' into reverb
vasilymilovidov Oct 5, 2023
2f0798d
fix: formatting
vasilymilovidov Oct 5, 2023
4718bfa
fix: reverb regenerate loophole
felixroos Oct 6, 2023
e2569ed
Merge pull request #726 from tidalcycles/reverb-perf-pitfall
felixroos Oct 6, 2023
b297888
consume n with scale
felixroos Oct 7, 2023
296cd83
snapshot
felixroos Oct 7, 2023
daf965f
Merge pull request #727 from tidalcycles/fix-n-scale
felixroos Oct 7, 2023
b25b9d8
fix: conflicts
vasilymilovidov Oct 7, 2023
2d750a1
fix: conflicts
vasilymilovidov Oct 7, 2023
d24cf8e
Merge branch 'main' into reverb
vasilymilovidov Oct 7, 2023
130ad44
add compressor + postgain
felixroos Oct 7, 2023
444d583
fix: hashes in urls
felixroos Oct 8, 2023
3415465
Merge pull request #728 from tidalcycles/fix-sample-url-special-chars
felixroos Oct 8, 2023
0a3692e
compressor docs
felixroos Oct 8, 2023
08ce821
format
felixroos Oct 8, 2023
56c1441
snapshot
felixroos Oct 8, 2023
a4fc408
Merge pull request #729 from tidalcycles/compressor
felixroos Oct 8, 2023
f34937d
fix: roomsize not required
felixroos Oct 9, 2023
54ed415
Merge pull request #731 from tidalcycles/reverb-fix
felixroos Oct 9, 2023
6544e81
fix: reverb sampleRate
felixroos Oct 9, 2023
d3b96dd
Merge pull request #732 from tidalcycles/reverb-fix-sr
felixroos Oct 9, 2023
e59f06f
Merge branch 'main' into reverb
felixroos Oct 9, 2023
5c76f2b
bump superdough to 0.9.10
felixroos Oct 9, 2023
57b166d
fix: pitched sample as ir
felixroos Oct 9, 2023
a2ee70a
Merge pull request #717 from vasilymilovidov/reverb
felixroos Oct 9, 2023
d702825
vite-vanilla-repl readme fix
felixroos Oct 13, 2023
f751d97
Merge pull request #737 from tidalcycles/readme-fix
felixroos Oct 13, 2023
4fa0a90
Merge branch 'main' of https://github.com/tidalcycles/strudel
felixroos Oct 14, 2023
2898201
Add shabda shortcut (#406)
ilesinge Oct 14, 2023
1721209
Update samples/shabda documentation
ilesinge Oct 14, 2023
fed4c51
Prettier doc file
ilesinge Oct 14, 2023
6b5de5f
fixed
daslyfe Oct 17, 2023
d3edc62
document function
daslyfe Oct 18, 2023
912a661
fixed example test failure
daslyfe Oct 18, 2023
d9db526
add recipes
felixroos Oct 20, 2023
7b8a35a
add understand cycles
felixroos Oct 20, 2023
f51c01d
move stuff around
felixroos Oct 20, 2023
80c98b6
fix: loud example
felixroos Oct 20, 2023
2cc60c6
format
felixroos Oct 20, 2023
db6efec
Merge pull request #742 from tidalcycles/recipes
felixroos Oct 20, 2023
8699748
Merge pull request #741 from daslyfe/bugfix_choose_with
felixroos Oct 20, 2023
1b07244
Add test snapshots for shabda shortcut
ilesinge Oct 20, 2023
048502e
Merge branch 'main' into astro-3
felixroos Oct 20, 2023
a23765a
fix: trailing slash confusion
felixroos Oct 20, 2023
624e685
fix: trailing slash confusion
felixroos Oct 20, 2023
7e28de1
Merge pull request #743 from tidalcycles/fix-slash-confusion
felixroos Oct 20, 2023
8f4344f
fix: try different trailing slash behavior
felixroos Oct 20, 2023
a3e0189
Merge pull request #744 from tidalcycles/fix-slash-confusion
felixroos Oct 20, 2023
46cdbd5
completely revert config mess
felixroos Oct 20, 2023
e99c299
Merge pull request #745 from tidalcycles/fix-slash-confusion
felixroos Oct 20, 2023
072ae72
Fix krill build command in README
ilesinge Oct 21, 2023
cb8edd9
Support international alphabets in mininotation
ilesinge Oct 21, 2023
87f37e3
Add a human-readable error message for invalid char in step
ilesinge Oct 21, 2023
2ad6324
Merge pull request #748 from ilesinge/fix_krill_readme
felixroos Oct 21, 2023
9b9f031
Revert error message length limitation
ilesinge Oct 21, 2023
5430147
use new vite-pwa-astro version from file
felixroos Oct 22, 2023
0509580
Merge pull request #753 from tidalcycles/fix-trailing-slash-bug
felixroos Oct 22, 2023
7f3cded
basic hydra integration
felixroos Oct 26, 2023
9009ecc
add play function
felixroos Oct 26, 2023
19f1aad
Merge pull request #751 from ilesinge/alphabet_samples
felixroos Oct 26, 2023
535dfb5
Merge pull request #740 from ilesinge/shabda_shortcut
felixroos Oct 26, 2023
b14aa90
also return pat
felixroos Oct 26, 2023
5958c69
Merge pull request #758 from tidalcycles/play-function
felixroos Oct 26, 2023
1a45682
Merge branch 'main' into hydra-integration
felixroos Oct 26, 2023
0f7b3e9
add docs + fix hydra for mini repl
felixroos Oct 26, 2023
22c9829
add H function to plug patterns into Hydra
felixroos Oct 26, 2023
8754b02
document H function
felixroos Oct 26, 2023
3ce50d8
ignore hydra.mjs in linter
felixroos Oct 26, 2023
4761e25
Merge pull request #759 from tidalcycles/hydra-integration
felixroos Oct 26, 2023
9fc87fe
add px in zen mode to fix logo overlap
felixroos Oct 27, 2023
a57c2b9
fix: flip scope in y direction
felixroos Oct 27, 2023
c085694
fix: additive synthesis
felixroos Oct 27, 2023
1c7c823
Merge pull request #762 from tidalcycles/fix-addivite-synthesis-phases
felixroos Oct 27, 2023
d84c917
fix: scale offset
felixroos Oct 27, 2023
cdbfb2c
Merge pull request #764 from tidalcycles/fix-scale-offset2
felixroos Oct 27, 2023
248757a
Merge pull request #760 from tidalcycles/zen-fix
felixroos Oct 27, 2023
1e1d5ef
Document striate function
ilesinge Oct 28, 2023
6c23309
Merge pull request #766 from ilesinge/document_striate
felixroos Oct 28, 2023
2633f4f
Document adsr function
ilesinge Oct 28, 2023
af915be
replace strudel.tidalcycles.org with strudel.cc
felixroos Oct 28, 2023
f16cb8f
Merge pull request #768 from tidalcycles/strudel-cc
felixroos Oct 28, 2023
4a57d3a
functions
daslyfe Oct 31, 2023
fd6c713
move to signal file with other choose functions
daslyfe Oct 31, 2023
36ef03a
use 0.1.4 @vite-pwa/astro
felixroos Nov 1, 2023
41a9098
use new flag
felixroos Nov 1, 2023
2bb45af
Merge pull request #772 from tidalcycles/update-vite-pwa
felixroos Nov 1, 2023
9e649a1
snapshots
felixroos Nov 1, 2023
34bd0e1
add doc chapters
felixroos Nov 1, 2023
158fa85
Merge pull request #771 from daslyfe/add_pick_and_squeeze_functions
felixroos Nov 1, 2023
16bb920
Merge pull request #767 from ilesinge/document_adsr
felixroos Nov 1, 2023
d4c12dc
integrated vscode bindings
Dsm0 Nov 1, 2023
9ceab0f
Fix chunk, add fastChunk and repeatCycles (#712)
yaxu Nov 1, 2023
2fd4836
Merge branch 'main' into vscode-bindings
Dsm0 Nov 1, 2023
b141e1e
(hopefully) fixed broken lock file
Dsm0 Nov 1, 2023
1e5edfc
Update CONTRIBUTING.md
felixroos Nov 1, 2023
0c2838c
fixed style issues
Dsm0 Nov 1, 2023
8d3ba2a
fix: share copy to clipboard + alert
felixroos Nov 2, 2023
9ec5d33
Merge pull request #774 from tidalcycles/tauri-clipboard
felixroos Nov 2, 2023
638f5c7
rename bindings key
felixroos Nov 2, 2023
8d8a1f5
Merge pull request #773 from Dsm0/vscode-bindings
felixroos Nov 2, 2023
c25c269
Merge branch 'main' into astro-3
felixroos Nov 2, 2023
326571b
remove obsolete config
felixroos Nov 2, 2023
419cf6c
update to astro 3
felixroos Nov 2, 2023
7768654
no double !
felixroos Nov 2, 2023
0ecc6c1
Merge pull request #775 from tidalcycles/astro-3
felixroos Nov 2, 2023
b3f8df1
initial commit
daslyfe Nov 5, 2023
8c5837e
add xfade + docs
felixroos Nov 5, 2023
d775296
snapshot
felixroos Nov 5, 2023
ec611aa
Merge pull request #780 from tidalcycles/xfade
felixroos Nov 5, 2023
7ad0ec1
fix: namespace mini-repl styles
felixroos Nov 5, 2023
83fec57
Merge pull request #781 from tidalcycles/fix-styles
felixroos Nov 5, 2023
3533336
Implement optional hover tooltip with function documentation
ilesinge Nov 5, 2023
624e540
Add pianoroll function documentation
ilesinge Nov 5, 2023
0d06840
Add label function documentation
ilesinge Nov 5, 2023
f045fb4
Add color function documentation
ilesinge Nov 5, 2023
8fa7bf7
Fix pianoroll documentation
ilesinge Nov 5, 2023
e9265ef
Add function params in reference tab
ilesinge Nov 5, 2023
a05d3a4
Merge pull request #785 from ilesinge/reference_parameters
felixroos Nov 5, 2023
8fe4dca
Update pianoroll documentation
ilesinge Nov 5, 2023
a9efda3
tweaking to make it sound good
daslyfe Nov 5, 2023
62eb9ce
Merge pull request #783 from ilesinge/hover_tooltip
felixroos Nov 5, 2023
52e2b90
fix: scope pos
felixroos Nov 5, 2023
26d87b6
document scope functions
felixroos Nov 5, 2023
c4f26c3
snapshot
felixroos Nov 5, 2023
5807dbf
Merge pull request #786 from tidalcycles/fix-scope-flip
felixroos Nov 5, 2023
2ef35a8
samples loading shortcuts:
felixroos Nov 6, 2023
395ae4d
Merge pull request #788 from tidalcycles/github-shortcut
felixroos Nov 6, 2023
07da9a9
don't use anchor links for reference
felixroos Nov 6, 2023
682ac25
Merge pull request #791 from tidalcycles/fix-ref-anchors
felixroos Nov 6, 2023
9cbf307
change to bus effect experiment
daslyfe Nov 7, 2023
b88f58c
Update first-sounds.mdx
bwagner Nov 7, 2023
bd59533
Merge pull request #794 from bwagner/patch-1
felixroos Nov 7, 2023
eed2c30
Update first-effects.mdx
bwagner Nov 7, 2023
df277d6
Update pattern-effects.mdx
bwagner Nov 7, 2023
23dd9d4
Update recap.mdx
bwagner Nov 7, 2023
4a16cd8
FIXES: table
bwagner Nov 7, 2023
0edd54d
cleaning up
daslyfe Nov 8, 2023
bee36a7
cleaning up
daslyfe Nov 8, 2023
f0a582d
cleaning up
daslyfe Nov 8, 2023
51c63fa
turn off of depth is 0
daslyfe Nov 8, 2023
2e4d28b
update doc
daslyfe Nov 8, 2023
65d07db
create free running lfos for different orbits
daslyfe Nov 8, 2023
c89f912
Merge branch 'tidalcycles:main' into phaser
daslyfe Nov 8, 2023
4b4290e
add more parameters
daslyfe Nov 8, 2023
06eb8b5
fixed doc
daslyfe Nov 8, 2023
791a363
snapshots
felixroos Nov 8, 2023
df636cf
phaser shortcuts
felixroos Nov 9, 2023
ac359a0
doc: phaser synonyms
felixroos Nov 9, 2023
3ecb701
add params to superdough readme
felixroos Nov 9, 2023
2682fd3
add to doc page
felixroos Nov 9, 2023
858a026
dedupe / move supertdirt phaser controls
felixroos Nov 9, 2023
c028686
Merge pull request #797 from bwagner/patch-4
felixroos Nov 9, 2023
d2a0665
Merge pull request #796 from bwagner/patch-3
felixroos Nov 9, 2023
035f6c8
Merge pull request #795 from bwagner/patch-2
felixroos Nov 9, 2023
9dbd073
Merge pull request #784 from ilesinge/document_pianoroll
felixroos Nov 9, 2023
5aac042
Merge branch 'main' into global-vibrato
felixroos Nov 9, 2023
8583508
format
felixroos Nov 9, 2023
7c8a8b8
simplify
felixroos Nov 9, 2023
0052d34
refactor: move vibrato up + cleanup oscillator
felixroos Nov 9, 2023
2a09f9e
fix: sampler broke without vibrato
felixroos Nov 9, 2023
400b210
Merge pull request #706 from Bubobubobubobubo/global-vibrato
felixroos Nov 9, 2023
d02450c
Merge pull request #662 from gogins/main
felixroos Nov 9, 2023
d25851a
support multiple named serial connections, change default baudrate to…
yaxu Nov 10, 2023
e4b0011
Parse the synonyms tag in source documentation
ilesinge Nov 11, 2023
bbc2925
Use synonyms in Tooltip
ilesinge Nov 11, 2023
6ba2b76
Show synonyms in API reference
ilesinge Nov 11, 2023
2aff31f
Simplify JSDoc
ilesinge Nov 11, 2023
bfff38a
Fix code format of JSDoc synonym plugin
ilesinge Nov 11, 2023
24e1881
Ignore jsdoc-synonyms by eslint
ilesinge Nov 11, 2023
1b0427e
Document wordfall
ilesinge Nov 11, 2023
2d6654b
Document slider
ilesinge Nov 11, 2023
e52e257
Document euclidLegatoRot
ilesinge Nov 11, 2023
8a7ff9e
Add snapshot for euclidLegatoRot
ilesinge Nov 11, 2023
ff0af15
remove unwanted cm6 outline for strudelTheme
kasparsj Nov 12, 2023
b7dd9b7
Merge remote-tracking branch 'origin/main' into phaser
felixroos Nov 13, 2023
1aaaaba
Merge pull request #798 from daslyfe/phaser
felixroos Nov 13, 2023
7f1919e
move fix to Repl.css
kasparsj Nov 14, 2023
9ef177e
Merge branch 'main' into fix-strudelTheme-outline
kasparsj Nov 14, 2023
8d5ef45
fix codeformat
kasparsj Nov 15, 2023
49aa9cf
Merge pull request #802 from kasparsj/fix-strudelTheme-outline
felixroos Nov 15, 2023
ef14074
add option to disable active line highlighting in Code Settings
kasparsj Nov 15, 2023
2d1fcf4
fix typo
kasparsj Nov 15, 2023
ee7cd8c
remove pseudo note variables
felixroos Nov 16, 2023
a7b799f
p and q methods + all function
felixroos Nov 16, 2023
f43f627
+ add hush
felixroos Nov 16, 2023
a448717
fix tests
felixroos Nov 16, 2023
cb9ef3e
add q1 .. q9 shortcuts
felixroos Nov 17, 2023
265f01e
add p1 .. p9 shortcuts as well
felixroos Nov 17, 2023
476bda8
Initial work on crackle
Bubobubobubobubo Nov 17, 2023
fb28083
Fixing density and adding documentation
Bubobubobubobubo Nov 17, 2023
2a18df6
Fix documentation
Bubobubobubobubo Nov 17, 2023
6e92c49
Run prettier
Bubobubobubobubo Nov 17, 2023
a84cfb5
bump superdough
felixroos Nov 17, 2023
47a6af2
Merge pull request #805 from tidalcycles/pq-functions
felixroos Nov 17, 2023
08ebb52
Merge pull request #804 from kasparsj/highlight-active-line-opt
felixroos Nov 17, 2023
a3bf697
Mark optional slider params
Nov 17, 2023
b73ea7f
Merge pull request #801 from ilesinge/add_doc
felixroos Nov 17, 2023
f74d1be
Merge branch 'main' of https://github.com/tidalcycles/strudel
felixroos Nov 17, 2023
c0f56be
add options param to initHydra
kasparsj Nov 17, 2023
83561a0
Update README.md
felixroos Nov 17, 2023
0975224
fix: multiple repls
felixroos Nov 17, 2023
dd8be65
Merge pull request #813 from tidalcycles/fix-multiple-repls
felixroos Nov 17, 2023
049aa35
hsl + hsla functions
felixroos Nov 18, 2023
f759999
pianoroll smear as float
felixroos Nov 18, 2023
3e02f0a
Merge pull request #815 from tidalcycles/color-hsl
felixroos Nov 18, 2023
b27f8e4
hotfix: build
felixroos Nov 18, 2023
de00212
fix hydra performance issues
atfornes Nov 22, 2023
66fd20a
add hydra audio capture option
atfornes Nov 22, 2023
ebc6723
enable hydra options update
atfornes Nov 22, 2023
a58ac96
add Hydra audio example to documentation
atfornes Nov 22, 2023
0a280e9
prettier code formatting
atfornes Nov 22, 2023
e0e896d
improve hydra audio detection initialization
atfornes Nov 22, 2023
d71877f
Move jsdoc files to subfolder
Nov 22, 2023
2868a5f
Update the undocumented functions file
Nov 22, 2023
ecc8e0a
More code beauty please
Nov 22, 2023
c606f86
Merge pull request #806 from Bubobubobubobubo/noises
felixroos Nov 24, 2023
4fd3e6e
fix: entry.name mutation bug
felixroos Nov 24, 2023
458c97b
list synonyms in Autocomplete
felixroos Nov 24, 2023
18e9ceb
populate autocomplete with all synonyms
felixroos Nov 24, 2023
5e7e1ff
Merge pull request #800 from ilesinge/improve_doc
felixroos Nov 24, 2023
69e99fa
Merge pull request #808 from kasparsj/hydra-options
felixroos Nov 24, 2023
fb7a9e2
format
felixroos Nov 24, 2023
71b4e14
Merge branch 'main' into atfornesmain
felixroos Nov 24, 2023
456be92
else clause
felixroos Nov 24, 2023
9045ce0
comment
felixroos Nov 24, 2023
508a6c9
default hydra config without audio detection
atfornes Nov 24, 2023
f7a283f
add feedStrudel option + smarter reinit logic
felixroos Nov 24, 2023
407510e
document feedStrudel
felixroos Nov 25, 2023
54b5d69
Merge pull request #818 from atfornes/main
felixroos Nov 25, 2023
dacd1e6
Add and style algolia search
ilesinge Nov 26, 2023
020c326
Codeformat for search
ilesinge Nov 26, 2023
c26e5bb
Merge pull request #827 from ilesinge/add_search
felixroos Nov 30, 2023
b16f235
Update first-sounds.mdx
drewgbarnes Dec 1, 2023
b374cdf
Merge pull request #830 from drewgbarnes/patch-1
felixroos Dec 2, 2023
1bca05e
FIXES: palindrome abc -> abccba (#831)
bwagner Dec 5, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions packages/core/controls.mjs
Original file line number Diff line number Diff line change
@@ -86,6 +86,16 @@ const generic_params = [
*
*/
['gain'],
/**
* Gain applied after all effects have been processed.
*
* @name postgain
* @example
* s("bd sd,hh*4")
* .compressor("-20:20:10:.002:.02").postgain(1.5)
*
*/
['postgain'],
/**
* Like {@link gain}, but linear.
*
@@ -1060,6 +1070,21 @@ const generic_params = [
*
*/
['shape'],
/**
* Dynamics Compressor. The params are `compressor("threshold:ratio:knee:attack:release")`
* More info [here](https://developer.mozilla.org/en-US/docs/Web/API/DynamicsCompressorNode?retiredLocale=de#instance_properties)
*
* @name compressor
* @example
* s("bd sd,hh*4")
* .compressor("-20:20:10:.002:.02")
*
*/
[['compressor', 'compressorRatio', 'compressorKnee', 'compressorAttack', 'compressorRelease']],
['compressorKnee'],
['compressorRatio'],
['compressorAttack'],
['compressorRelease'],
/**
* Changes the speed of sample playback, i.e. a cheap way of changing pitch.
*
11 changes: 11 additions & 0 deletions packages/superdough/helpers.mjs
Original file line number Diff line number Diff line change
@@ -78,6 +78,17 @@ export const getParamADSR = (param, attack, decay, sustain, release, min, max, b
param.linearRampToValueAtTime(min, end + Math.max(release, 0.1));
};

export function getCompressor(ac, threshold, ratio, knee, attack, release) {
const options = {
threshold: threshold ?? -3,
ratio: ratio ?? 10,
knee: knee ?? 10,
attack: attack ?? 0.005,
release: release ?? 0.05,
};
return new DynamicsCompressorNode(ac, options);
}

export function createFilter(
context,
type,
28 changes: 9 additions & 19 deletions packages/superdough/reverb.mjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
import reverbGen from './reverbGen.mjs';

if (typeof AudioContext !== 'undefined') {
AudioContext.prototype.generateReverb = reverbGen.generateReverb;

AudioContext.prototype.adjustLength = function (duration, buffer) {
const newLength = buffer.sampleRate * duration;
const newBuffer = this.createBuffer(buffer.numberOfChannels, buffer.length, buffer.sampleRate);
@@ -19,14 +17,18 @@ if (typeof AudioContext !== 'undefined') {

AudioContext.prototype.createReverb = function (duration, fade, lp, dim, ir) {
const convolver = this.createConvolver();
convolver.generate = (d = 2, fade = 0.1, lp = 15000, dim = 1000, buf) => {
if (buf) {
convolver.buffer = this.adjustLength(d, buf);
convolver.generate = (d = 2, fade = 0.1, lp = 15000, dim = 1000, ir) => {
convolver.duration = d;
convolver.fade = fade;
convolver.lp = lp;
convolver.dim = dim;
convolver.ir = ir;
if (ir) {
convolver.buffer = this.adjustLength(d, ir);
} else {
this.generateReverb(
reverbGen.generateReverb(
{
audioContext: this,
sampleRate: 44100,
numChannels: 2,
decayTime: d,
fadeInTime: fade,
@@ -37,19 +39,7 @@ if (typeof AudioContext !== 'undefined') {
convolver.buffer = buffer;
},
);
convolver.duration = d;
convolver.fade = fade;
convolver.lp = lp;
convolver.dim = dim;
}
};
convolver.setIR = (d, fade, lp, dim, buf) => {
if (buf) {
convolver.buffer = this.adjustLength(d, buf);
} else {
convolver.generate(d, fade, lp, dim, buf);
}
return convolver;
};
convolver.generate(duration, fade, lp, dim, ir);
return convolver;
2 changes: 1 addition & 1 deletion packages/superdough/reverbGen.mjs
Original file line number Diff line number Diff line change
@@ -23,7 +23,7 @@ var reverbGen = {};
immediately within the current execution context, or later. */
reverbGen.generateReverb = function (params, callback) {
var audioContext = params.audioContext || new AudioContext();
var sampleRate = params.sampleRate || 44100;
var sampleRate = audioContext.sampleRate;
var numChannels = params.numChannels || 2;
// params.decayTime is the -60dB fade time. We let it go 50% longer to get to -90dB.
var totalTime = params.decayTime * 1.5;
1 change: 1 addition & 0 deletions packages/superdough/sampler.mjs
Original file line number Diff line number Diff line change
@@ -64,6 +64,7 @@ export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resol

export const loadBuffer = (url, ac, s, n = 0) => {
const label = s ? `sound "${s}:${n}"` : 'sample';
url = url.replace('#', '%23');
if (!loadCache[url]) {
logger(`[sampler] load ${label}..`, 'load-sample', { url });
const timestamp = Date.now();
53 changes: 29 additions & 24 deletions packages/superdough/superdough.mjs
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@ import './reverb.mjs';
import './vowel.mjs';
import { clamp } from './util.mjs';
import workletsUrl from './worklets.mjs?url';
import { createFilter, gainNode } from './helpers.mjs';
import { createFilter, gainNode, getCompressor } from './helpers.mjs';
import { map } from 'nanostores';
import { logger } from './logger.mjs';
import { loadBuffer } from './sampler.mjs';
@@ -124,26 +124,20 @@ function getReverb(orbit, duration, fade, lp, dim, ir) {
reverb.connect(getDestination());
reverbs[orbit] = reverb;
}

if (
hasChanged(duration, reverbs[orbit].duration) ||
hasChanged(fade, reverbs[orbit].fade) ||
hasChanged(lp, reverbs[orbit].lp) ||
hasChanged(dim, reverbs[orbit].dim)
hasChanged(dim, reverbs[orbit].dim) ||
reverbs[orbit].ir !== ir
) {
// only regenerate when something has changed
// avoids endless regeneration on things like
// stack(s("a"), s("b").rsize(8)).room(.5)
// this only works when args may stay undefined until here
// setting default values breaks this
reverbs[orbit].generate(duration, fade, lp, dim);
}

if (reverbs[orbit].ir !== ir) {
reverbs[orbit] = reverbs[orbit].setIR(duration, fade, lp, dim, ir);
reverbs[orbit].ir = ir;
reverbs[orbit].generate(duration, fade, lp, dim, ir);
}

return reverbs[orbit];
}

@@ -204,6 +198,7 @@ export const superdough = async (value, deadline, hapDuration) => {
bank,
source,
gain = 0.8,
postgain = 1,
// filters
ftype = '12db',
fanchor = 0.5,
@@ -251,6 +246,11 @@ export const superdough = async (value, deadline, hapDuration) => {
velocity = 1,
analyze, // analyser wet
fft = 8, // fftSize 0 - 10
compressor: compressorThreshold,
compressorRatio,
compressorKnee,
compressorAttack,
compressorRelease,
} = value;
gain *= velocity; // legacy fix for velocity
let toDisconnect = []; // audio nodes that will be disconnected when the source has ended
@@ -366,6 +366,11 @@ export const superdough = async (value, deadline, hapDuration) => {
crush !== undefined && chain.push(getWorklet(ac, 'crush-processor', { crush }));
shape !== undefined && chain.push(getWorklet(ac, 'shape-processor', { shape }));

compressorThreshold !== undefined &&
chain.push(
getCompressor(ac, compressorThreshold, compressorRatio, compressorKnee, compressorAttack, compressorRelease),
);

// panning
if (pan !== undefined) {
const panner = ac.createStereoPanner();
@@ -374,7 +379,7 @@ export const superdough = async (value, deadline, hapDuration) => {
}

// last gain
const post = gainNode(1);
const post = gainNode(postgain);
chain.push(post);
post.connect(getDestination());

@@ -385,20 +390,20 @@ export const superdough = async (value, deadline, hapDuration) => {
delaySend = effectSend(post, delyNode, delay);
}
// reverb
let buffer;
let url;
if (ir !== undefined) {
let sample = getSound(ir);
if (Array.isArray(sample)) {
url = sample.data.samples[i % sample.data.samples.length];
} else if (typeof sample === 'object') {
url = Object.values(sample.data.samples)[i & Object.values(sample.data.samples).length];
}
buffer = await loadBuffer(url, ac, ir, 0);
}
let reverbSend;
if (room > 0 && roomsize > 0) {
const reverbNode = getReverb(orbit, roomsize, roomfade, roomlp, roomdim, buffer);
if (room > 0) {
let roomIR;
if (ir !== undefined) {
let url;
let sample = getSound(ir);
if (Array.isArray(sample)) {
url = sample.data.samples[i % sample.data.samples.length];
} else if (typeof sample === 'object') {
url = Object.values(sample.data.samples)[i & Object.values(sample.data.samples).length];
}
roomIR = await loadBuffer(url, ac, ir, 0);
}
const reverbNode = getReverb(orbit, roomsize, roomfade, roomlp, roomdim, roomIR);
reverbSend = effectSend(post, reverbNode, room);
}

58 changes: 58 additions & 0 deletions test/__snapshots__/examples.test.mjs.snap
Original file line number Diff line number Diff line change
@@ -1185,6 +1185,35 @@ exports[`runs examples > example "compress" example index 0 1`] = `
]
`;

exports[`runs examples > example "compressor" example index 0 1`] = `
[
"[ 0/1 → 1/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 0/1 → 1/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 1/4 → 1/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 1/2 → 3/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 1/2 → 1/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 3/4 → 1/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 1/1 → 5/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 1/1 → 3/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 5/4 → 3/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 3/2 → 7/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 3/2 → 2/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 7/4 → 2/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 2/1 → 9/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 2/1 → 5/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 9/4 → 5/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 5/2 → 11/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 5/2 → 3/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 11/4 → 3/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 3/1 → 13/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 3/1 → 7/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 13/4 → 7/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 7/2 → 15/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 7/2 → 4/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
"[ 15/4 → 4/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 ]",
]
`;

exports[`runs examples > example "cosine" example index 0 1`] = `
[
"[ 0/1 → 1/8 | note:Eb4 ]",
@@ -3293,6 +3322,35 @@ exports[`runs examples > example "polymeterSteps" example index 0 1`] = `
]
`;

exports[`runs examples > example "postgain" example index 0 1`] = `
[
"[ 0/1 → 1/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 0/1 → 1/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 1/4 → 1/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 1/2 → 3/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 1/2 → 1/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 3/4 → 1/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 1/1 → 5/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 1/1 → 3/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 5/4 → 3/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 3/2 → 7/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 3/2 → 2/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 7/4 → 2/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 2/1 → 9/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 2/1 → 5/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 9/4 → 5/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 5/2 → 11/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 5/2 → 3/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 11/4 → 3/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 3/1 → 13/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 3/1 → 7/2 | s:bd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 13/4 → 7/2 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 7/2 → 15/4 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 7/2 → 4/1 | s:sd compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
"[ 15/4 → 4/1 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
]
`;

exports[`runs examples > example "press" example index 0 1`] = `
[
"[ 0/1 → 1/2 | s:hh ]",
8 changes: 8 additions & 0 deletions website/src/pages/learn/effects.mdx
Original file line number Diff line number Diff line change
@@ -144,6 +144,14 @@ There is one filter envelope for each filter type and thus one set of envelope f

<JsDoc client:idle name="velocity" h={0} />

## compressor

<JsDoc client:idle name="compressor" h={0} />

## postgain

<JsDoc client:idle name="postgain" h={0} />

# Panning

## jux