Really enjoying Sines, thanks for sharing. Very relaxing to play and stare out the window at winter right now.


super fun! I tried to get some of the frequency ratio to index values into a harsh realm but I think it’s the envelopes that keep it smooth. It could be cool to put in arc support for some of the envelopes. :thinking:


wow. im finally getting the shot to mess with this script a bit and im in love. its really beautiful and inspiring, thanks so much for it. thoughts that come to mind are things like “oh, i’d really love to be able to add some sort of drift modulation to certain parameters based on threshold” or “would be cool if i could change the bpm in order to have slower pulse envelopes (didnt seem to be able to change the clock speed in >param>edit>clock)”

but all around, a very beautiful instrument you have created! love the simplicity of the interface too.

1 Like

I won’t be able to do this, sorry. I don’t have an arc to test with… that’s not to say someone else couldn’t do this and PR? or maybe a fork?


Yes I think the next version should have some kind of global LFO/animation system. BTW - the current envelopes have no relation to the global clock. They are simply looping envelopes.

I’ve created a develop branch. Will start working on some of this stuff in the new year.


I could only help with testing it. Arc/grid is here.
However, some kind of LFO bank would be cool, not sure if it would overload the script, but this cc lfo by @Markeats is really cool.
Other ideas: bitcrush/decimation sounds great on simple waveforms, also a combo script with @Justmat’s otis (see oats) could be great but I am unsure if this would mean running two engines which I am unsure if that is possible.
I think the script is supercool as it is already.



thank you for this btw. very cool

*edit: why couldn’t they make the digitone do this? that would be so dope to have this on a synth like that. it’s like the operator from ableton. its genius


I have this week off the day job. I’ll give this a try.


There is a sample/bit rate reduction update on the develop branch if anyone wants to test it out. You’ll need to git checkout develop on Norns over ssh. You won’t be able to get this from maiden just yet.


This script is getting better and better. Aidan made the sample/bitrate per sine, not just global. :exploding_head:


I think I’m up to speed on the state of the art. Went through the norns/circle/02 video on the clock subsystem and I don’t think that’s necessary for arc animation. The Cccccccc lib uses the global metro. is there a reason to use clock for hardware drawing?

It seems like the envelopes in @Oootini source are parameters passed directly to the EnvGen in the engine. Is that correct?

Yes. If you can think of a better way to do this I’m all ears!

so i dove into this script pretty heavily for last night’s noiz session…
such a cool generator and i look forward to future updates!
running v0.7 on one norns and v0.8 on another with Cheat Codes 2 thrown in with a few other noiz weapons.


update update

I got a PoC working where channel 4 on the Arc controls the envelope named pulse4 on voice 1. Passing values to the set_env() function you wrote for every encoder delta works fine. I also answered my own question about the difference between an envelope and an LFO. One has a frequency in cycles per second and the other has a frequency in seconds per cycle. So now when I make the envelope longer the LED ring spins faster because I’m increasing it’s frequency value but passing that same value to the decay time of the envelope. I’ll figure it out later. A good stopping point for new years eve.

Update! I got a spinny ring animation to work on my fork mostly through copy + paste from the Cccccccc library. In that lib there is no engine and the LFOs are interpolated to MIDI 7bit, which we don’t have to do. I don’t yet have code for and hardware connection to the SC engine so there will be no changes in sound. I’m working on that part now.

Regarding ideas of how to interact with the engine, it’s been over a year since I worked on a Norns project so I’m getting back up to speed.

There is the question of what’s the difference between an envelope and an LFO? I’m not sure I know the answer to this but there are distinct UGens in Supercollider for doing “envelope stuff” and “LFO stuff”. My first try is going to stick with EnvGen in the engine. My second idea is to use LFSaw and friends by changing the engine. I’m not sure if that’s more trouble than it’s worth. Thirdly, there’s the polls feature to get information from the engine. This might also be the wrong path, since I think the only control we need is to get the answer to the question “how fast is each LFO cycle” for the ring animation and “set the LFO cycle to this speed” for the knob control. It seems like just passing params through to the engine is The Right Way.


@Oootini thanks for this simple yet evocative script! had a chance to mess with it today…

here’s a little something from this morning.

sines with the eventual accompaniment of barcode that’s on an aux send/return


hi all- was just curious if there’s a way to control the root note of the script with the keys on my midi keyboard? i have a komplete kontrol a49 that i use as my primary keyboard. it has 8 encoders on it and 4 pages for them, so im controlling the volume of the 16 sines with the first two pages of encoder mappings and the envelopes of the 16 sines with the other two pages. the mod wheel is controlling the scale mode, so i would love to be able to control what note the root note is when i press a key on my keybed. if you have any ideas, let me know! thanks!!


add to the midi event function (e.g. at line 148, presently):

if d.type == "note_on" then
  params:set("root_note", d.note)

I’ll add this to next version.


Aight, I got something presentable. Apologies in advance for the volume levels in the recording. I’m not set up for tech demos and this is me holding my phone and playing the sound through monitors. @Oootini while I’m still working on this, it doesn’t effect existing functionality without an Arc. I’ve tested hotplugging/disconnecting the device and everything just works. I could make a PR if anyone out there wants to try this without running my fork on-device. I’ve already done a short live session with a Fender Rhodes and it was sounding decent.

These are my unchecked list items

[*] test what happens when the frequency is negative
update file this one under “breaks in an interesting way and is recoverable”
[*] determine how to switch between envelope types
[*] determine how to switch between harmonic groups
[*] reduce resolution of encoders


Nice! I’m nearly finished a refactor job which hopefully clears up a lot of the silly param stuff that was done. Wait for that before sending a PR.