Notes of the selected scale are spread around a circle. Points are drawn by rotating a set amount from the last point while moving outwards slightly and notes are triggered depending on where they land. Patterns repeat and change over time.
If you find any interesting patterns or have ideas of how this can be expanded then let me know!
E1 change current spiral
K2 play / stop current spiral
K3 toggle options
→ E2 change option
→ E3 change value
K1 + K2 toggle lock sequence to the last X number of notes
K1 + K3 toggle scale overlay
grid
spirals supports grid or midigrid to enable you to change current spiral, start/stop the current spiral and lock/unlock the current spiral.
on the bottom row the left 4 pads change the current spiral, the right most pad starts or stops the current spiral and one in from the right locks and unlocks the current spiral.
the top 6 rows fill up as notes play - the bottom right most lit pad is the most recent note.
press two pads to lock the current spiral to loop between those notes.
Changelog
20210206:
Added options screen
Added ability to lock the sequence to the last X number of notes
Added ability to change root note with a midi input device
Added ability to overlay the available notes
When resetting the pattern, don’t reset the angle to 0, continue from the last angle
20210208:
Added chord mode for midi and audio output
Minor bug fixes and display improvements
20210210:
Added lfo for rotation parameter
20210217:
Added support for multiple spirals! Currently 4 with just the first one playing by default. Some changes to buttons to allow play/stop. There’s a good chance I broke something moving everything around so let me know if you find anything.
20210220:
If you have mx.samples installed it can now be used as the audio engine. Change the audio engine parameter and then select an instrument for each spiral. Make sure mx.samples is up to date before using it. If you don’t have it installed, restart after installing to ensure everything goes smoothly. Massive thanks to @infinitedigits for the library and help.
20210221:
Added fractional step divisions (.5, .25, .125) for notes every other beat, 4 beats or 8 beats
Added rests - set the number of rests and they are spread around the circle in a euclidean style
Fixed midi note off
20210226:
Added icons to show if currently spiral is playing or stopped and if it is locked
20210420:
Don’t enable mx.samples if there are no instruments available
That’s great! Would it be possible to make 2 spirals? With different tempos and maybe scales too? Or - the ability to switch notes to chords? Just thinking out loud
Ok added a chord mode for midi and engine output. I’m not too sure about crow but if someone has an example or wants to send a pull request then I’ll add it.
It’s just adding the 3rd and 5th in the current scale which I think is right but my music theory knowledge is almost non-existent so let me know if I’ve done something stupid .
Multiple spirals might have to wait until I have a bit more time. Just started working on something new
Sounds great! I’ve added an lfo for the rotation parameter, you select the frequency for it to run at and every time I place a new point/note its value is added to the rotation setting. There’s also an ‘lfo amount’ which restricts the range of the lfo - at 1.0 the lfo runs from -1 to 1, at 0.5 its -0.5 to 0.5 etc. I think the lfo would be better if it could run slower but having parameters to three decimal places doesn’t seem straight forward.
Let me know what you think.
The yin and yang configuration? (rotation 0.5, lfo 0.1, 0.2Hz)
hiya, not sure if others have the same problem but I can’t seem to select above ‘midi in device’ in the options page for this. The encoder gets stuck? So can’t change midi out channel or midi out device. Have tried reinstalling the script but persists. Am on the latest update. thanks!
had a quick look and i think its a problem with having mx.samples installed but no instruments downloaded. Can you try downloading an instrument or uninstalling mx.samples? I’ll have a look at cleaning that up later.
If that isn’t the case can you grab the matron output from maiden (connect to the norns in a browser)
Hello! So I think this may be an issue with Mx. Samples. But I’m not entirely sure. When I try and load Spirals I get this error
Code
### SCRIPT ERROR: init
/home/we/dust/code/mx.samples/lib/mx.samples.lua:180: attempt to call a nil value (field 'mxsamples_delay_feedback')
stack traceback:
/home/we/norns/lua/core/norns.lua:145: in field 'mxsamples_delay_feedback'
/home/we/dust/code/mx.samples/lib/mx.samples.lua:180: in field 'action'
/home/we/norns/lua/core/params/control.lua:105: in function 'core/params/control.bang'
/home/we/norns/lua/core/paramset.lua:448: in function 'core/paramset.bang'
/home/we/norns/lua/core/paramset.lua:441: in function 'core/paramset.default'
/home/we/dust/code/spirals/spirals.lua:116: in global 'init'
/home/we/norns/lua/core/script.lua:109: in function 'core/script.init'
[C]: in function 'xpcall'
/home/we/norns/lua/core/norns.lua:146: in field 'try'
/home/we/norns/lua/core/engine.lua:91: in function </home/we/norns/lua/core/engine.lua:89>
lua:
/home/we/norns/lua/core/clock.lua:65: /home/we/dust/code/spirals/lib/spiral.lua:270: attempt to compare number with nil
stack traceback:
[C]: in function 'error'
/home/we/norns/lua/core/clock.lua:65: in function 'core/clock.resume'
Any ideas what edits I should make to the Mx.Samples or Spirals scripts?
I’m away from my norns this week but if you’ve updated mx.samples and haven’t restarted since then that might be it. Looks like a mismatch between the library and the loaded supercollider engine.
Have you tried turning it off and on again?
If that doesn’t help let me know and I’ll check it out at the weekend. Don’t think I’ve updated mx.samples in forever.
@PedalsandChill, @xmacex looks like there was an mx.samples change which is causing problems with being able to switch between engines in spirals. I’ve made a change so there are 2 scripts in spirals now - a standard one and an mx.samples one. You should get that if you update in maiden.
sorry about that! I found the problem - mx.samples was getting parameter banged and asking for a nonexistent engine function. I just pushed a fix for it which works still with spirals commit fbfb6f.