
* I use a Bernoulli distribution for random true/falses. Not that there is anything wrong with generating a random number between [0, 1) and comparing it, but I think using a Bernoulli distribution probably makes intent a little clearer.
* For note matching to work, all notes need to flow through the same `set key` module. (If the key doesn't change, the note is passed through unaltered so there is no performance loss here.)
* I didn't clamp the key, just to keep the example simple.

