Engine: Thebangs

I’m still working my way through implementing all of the exposed parameters from your engine into my script “pixels”. I seem to have come across a bug or at least an inconsistent behaviour.

The engines reznoise, klangexo and klanglin do not respond to engine.pan. The other engines seem to respond just fine, but I’m getting some strange stuck results with these. Reznoise seems to respond differently to each left and right field as far as frequency response to mod1, mod2 and hz2 go. I’m actually experiencing some weirdness across the stereo field in the klang engines as well.

I’m looking into it my self and trying to learn supercollider. Just wanted to let you know.

Yep - those produce stereo signals in themselves nd I haven’t made the panning stage smart enough to really handle them

Only had a couple short sessions will the this so far, hence v0.0.x

If you want to try it, my idea would be: a conditional on the number of channels returned by the graph method, in Thebangs wrapper method

We can get away with a lot of silly stuff because arguments are only evaluated once at synthdef creation

If pan were modulated we’d need to be more careful

Eager to try this out. Tonight I installed Pixels (which uses this engine) before installing thebangs itself. After rm -rf of pixels I restarted and now I just get ‘supercollider fail’. Any ideas what went wrong here?

EDIT: I just needed an actual SLEEP rather than a ;restart from Maiden, all is fine now.

The Bangs is bundled into “pixels” itself when it is installed. No need to specifically install the engine itself. Just download “pixels” from the community and sleep the Norns.

Glad you got it rolling.

1 Like

… despite some confusing advice i’ve seen floating around here, this is never recommended except during troubleshooting (to get early output from either the SC or matron component) or development (re-launching a single component to test a specific change.)

if you are trying to get to normal functionality and don’t want to use RESET for some reason, you must issue ;restart twice: first in the “SC” tab, then in the matron tab.

more typically, use SLEEP or SYSTEM > RESET from the norns menu to restart after installing new supercollider classes.


What do I have to do have Thebangs/NewAwake and pixels both installed without getting duplicate engine error? Delete an engine?

delete one, or rename this class and this engine name in pixels

(to something like Engine_Pixelbangs and engine.name = Pixelbangs respectively)

(the Engine_foo pattern is mandatory; the capitalization of foo to Foo is just a convention-so-far)

NB that Thebangs will undergo some breaking changes. support for versioning and dependency spec is a big gap in ecosystem still, so general apologies for that. on the bright side, the manual copy + mangle makes it impossible for my updates to break your script.


Sorry @zebra! I misunderstood your directions a while back when you asked me to rename the class and not the file names. I’ll post an update soon to remedy the issue as described above. I had gone through and renamed the other classes in The Bangs, but not actually The Bangs itself. Uhg!

1 Like

Very interesting! I haven’t looked into it yet, but could this be a way to have multi-timbral synths for norns? I’d been working on an engine a few months ago that would support 6-8 timbres (“voices”) but bumped into what I suspect are hardware limitations as far as number of synth instances and grouping of the “voices” into channels.

i’m working on a voice allocator that supports multitimbral stuff

contributions welcome - this project is definitely giving me some pointers on how to better organize things

(also want to try out my own multi-algoritm nv based synth in the bangs style)

1 Like

The bangs is working for me as a multi-timbral engine in my latest (unreleased) version of “pixels”. I haven’t run into any issues yet, changing the synth type per note on six different sequences.

Cool! Polyphonic or mono sequences?

In “pixels”, you control 6 pixels that move around the display. Each one represents a single mono synth. So … six mono sequences. You can select the MIDI channel on each as well.

@catfact this library is so fantastic, its really enabling me to do what i wanted to do when i first got norns - e.g. making norns behave like the OP-1 synth engines (e.g. swappable engines, realtime editable parameters) but using my own supercollider creations.

i think i’m getting a little out-of-scope with thebangs, but i’m interested in changing mod1 while a voice is active. is there a good way to do this? or is it too out-of-scope?

i’ve tried and i’m only getting halfway. what i have works to set mod1 while a note is playing but then a new note doesn’t use the current mod1 setting. essentially mod1 is only set while the note is playing. for some reason i can’t get both mod1 to be set when a note comes on and get mod1 to get set while the note is playing.

here is what i have to get mod1 set while the note is playing: i added an argument to the function generation in thebangs.sc with a new mod1s that is initialized to the value of mod1:

then i have mod1s hooked up to do the “setting” of each voice (this is called from engine.mod1 in lua):

i’m happy with how it works to set when the note is on, but i’m really confused on why the note turning on doesn’t take its initial value from mod1 that is already set. any help would be greatly appreciated!

1 Like

I found this library while looking for a solution to limit voices in Supercollider. For testing I added the library to the Tviburar script and noticed that the Max voices parameter doesn’t work when sending a lot of engine.hz. There seems to be an upper limit. I’ve attached a modified version of Tviburar where step 1 is on a high rate, step 2-3-4 on lower rates and the Max voices can be changed in parameters.
tviburarThebangs.lua (20.8 KB)

1 Like

maybe i’m misunderstanding, but i don’t see anything in this script that attempts to set the max voice count. (e.g. by calling engine.maxVoices(..) in a parameter action.) (woops nvm.)

(ugh. i need to clean this up. it is still using the stupid compile-on-demand structure.)

@infinitedigits i’m seeing your post quite late. not sure i get the question tbh. modulating the synth params at runtime is out of scope but should work. (i would take advantage that all the voices are in a dedicated group and do group.set(\mod1, ..) or whatever.)

[ed] @ljudvagg sorry, i haven’t looked at this in a while and forgot how it worked.

i see that you used thebangs.add_voicer_params(). and that the max_voices parameter thus added has a maximum of 32. i guess i’m not clear on the issue you encountered. did you find that it limited voice count to a smaller value than you expected?

1 Like

i see that you used thebangs.add_voicer_params() . and that the max_voices parameter thus added has a maximum of 32. i guess i’m not clear on the issue you encountered. did you find that it limited voice count to a smaller value than you expected?

@zebra When running the attached script on my shield and changing Max voices to 1 in the parameter list it can only limit the voices for the slowly generated notes. When the notes are generated on a high rate it can’t limit it to 1 voice and it sounds like it’s changed to 32 voices

(sorry another misreadung. I’m distracted )

Ok thanks I’ll take a look.

hypothesis: you are maybe just noticing the fact that stolen voices are not killed instantly, but have a 10ms release?

i haven’t tested this a whole ton, but i did test it sufficiently to be convinced it was working for low voice counts and high note density.

@zebra It sounds like the release is the default value for PolyPerc

00:00-00:04 - Max voices 32
00:05 - Change Max voices to 1

Max voices 2 is working as expected

thanks, I didn’t realize at all that I could do group.set! that is so cool. still so much SuperCollider for me to learn :slight_smile:

1 Like