Norns: dust

you can edit the deeper params in the PARAMETERS menu

enjoyed a quick run with the engine, sounds great! curious to come up with more UI ideas for config

2 Likes

yeah spotted that

does sound wonderful - just basically sitting playing it at the moment …

1 Like

I wanna make a preset system next, which would make it easy to add the 32 ā€œofficialā€ algorithms from the DX7. A second page for the UI that shows the graphics could be a cool addition.

6 Likes

you’re in luck! a ā€œpresetā€ system is built-in to the parameter system.

hold KEY1 when in the param menu. you can save/load pset files. they’re human-readable, so you could potentially make a quick text-scrub script to convert the factory presets

2 Likes

Apologies for the newbie question, how would i install this FM7 engine into norns?

1 Like

oh my, that seems almost too easy.

I think operator envelopes would be a good next thing along with presets.

1 Like

Depends if you want to get your hands dirty with Linux stuff. If you do, you can track the master branch on the device.

  • enable wifi
  • ssh to the device ssh we@norns.local password sleep
  • backup dust folder mv ~/dust ~/dust.bak
  • clone git repo git clone https://github.com/monome/dust.git
  • reboot device sudo halt followed by long press to turn on

If you aren’t comfortable doing this, you can wait for an update to the device and use the built-in update system.

this has the drawback of removing any custom work you’ve done through the Maiden IDE. You will have to move those files back by hand. I don’t really know a way around this until the OS on the device is updated to not save artifacts like audio recordings and presets to the folder tracked by git.

4 Likes

ya - and if you want ā€œclassicā€ dx7ish behavior then you want a pitch envelope which can be arbitrarily applied to each osc.

1 Like

Oops, looks like I labeled the phase mod params backwards. Currently the param that says ā€œOsc1 Phase Mod Osc6ā€ actually sends oscillator 6 to modulate oscillator 1.

PR to fix mod params

There’s some cruft in there from my repo getting out of sync with master…I’ll help get this in order if someone can review the diff.

Thanks - need to get a little more comfortable first - still getting used to code structure, lua in general

The preset thing was quite simple after I fixed the backwards mod parameter matrix. Pull from master to make the mod params actually do what the labels say. I saved all 32 DX7 algorithms into my local presets.

I’m going to experiment with a different UI that has 32 pages, each with the drawing of the algorithm, its number and on the backend recalls the preset.

I have 10 more days until I start the new day job (getting back on the old block and chain) so I’d like to make the most of them. Whatd’ya think, is this a good idea? I’m typically bad at UI design so critique welcome.

6 Likes

This sounds awesome. Love the algorithm diagram idea :raised_hands:

1 Like

check out @markeats lua drawing libs, they are incredible and might be of use

3 Likes

Def useful. I was gonna make a Pages class myself, lol.

The Graph class isn’t exactly what I want. Reading through the implementation it seems only one point can connect to one and only one other point, drawing a line. The DX7 stuff has feedback and one-to-many point connections. Imma hack that myself for now.

update Whelp, that Pages class is quite easy to use. All 32 algorithms selectable with an encoder + defaults + wrap. UI isn’t done. I’m going ā€œtake a weekendā€.

4 Likes

Happy Monday!

Update from FM land…

Over the weekend I have a hacked DX7 algorithm UI that loads presets. It’s not done but that’s just because I didn’t put in the time to fully learn the drawing primitives. There are some missing connections for things like operator feedback.

This afternoon I added operator envelopes to the Engine.

Then something weird happened. I’m loading the presets as described in this branch, which I saved after manually setting the parameters and using the on-screen preset saving system.

In a different branch (not pushed because it’s broken) I added 30 more parameters, for the ADSR of all 6 operator envelopes. My previous presets are now broken. From the way it sounds, it seems like there’s some kind of offset that is stored and after adding 30 more params, a bunch of the values got moved to different keys. The only preset file that changed on disk after I added the params is data/lazzarello/fm7.pmap. This appears to have offset the params in some weird way, which shows on the screen.

Some of the params that had very obvious audible changes no longer seem to effect anything. Rebooting…

update reboot had no change. I think I encountered a known bug. It’s more severe than I expected. Adding new params disables previously existing params at what seems like a random index. For example, all params for operator 2 do nothing after I added envelope stuff.

3 Likes

pmap files are only midi mapping data, not param data. they should not any influence on the sound.

pset files are what you should be looking at, they have a format like:

"shape": 0.5
"timbre": 0.05
"noise": 0

when you use the PARAMETERS menu to save pset files (parameter set) hold KEY1 and then SAVE after rotating ENC3 for which number. a new pset file will be generated script-00.pset where script is the name of your script and 00 is the selected number.

these are readable text, so you should check the values by hand. you can even use a text editor/etc to mass import pset information if you prefer.


edit: all of those -1 in your pmap file mean ā€œunassignedā€


edit again: you may need to params:bang() after loading. this works in playfair: https://github.com/monome/dust/blob/master/scripts/tehn/playfair.lua#L186

(though, the menu param doesn’t do this, must investigate further)

2 Likes

I have an idea for a multitap delay I’d like to make on norns with grid control, and was wondering if anyone could tell me where/if I can find a list of existing engines. I guess my main question is whether I’m better off just taking my time and making an engine myself in sc or whether there’s something out there already that I could use instead, like softcut, or something else intended more as a delay engine than a looper engine. I hope this is the right thread to post in… it says questions about engines should go here in the opening post, but feel free to move it if not.

2 Likes

I’ll do another debugging run on the SynthDef. I didn’t think adding an envelope would disable some operators but I can make some guesses as to why that might happen.

update this appears to have been my problem in the SC code. Turns out multiplying at the wrong stage muted all modulators with an envelope. I’ll be exposing the params to Matron tomorrow.

That was more difficult than I expected but I pushed a branch that has operator envelopes and some DX7 presets (with a UI that is unfinished).

@zebra I could use your ( or anyone else with SC intuition) help. I’m not comfortable making a pull request for the engine changes yet because I’m doing voice freeing in a copy + paste fashion from the DX7-Supercollider code. It looks like so

https://github.com/lazzarello/dust/blob/op-envs/lib/sc/Engine_FM7.sc#L47

the envelopes do not free the node, further down the FreeSelfWhenDone and DetectSilence classes have a doneAction:2 which seems to work as I would expect.

DetectSilence seems fine here.

regarding your comments about the param defaults and DRY, it’s the typical result of a stupid process:

  • make synthdef with args and defaults
  • loop over the def’s arg names to make control busses and map them, so clever
  • oops no i’m not, i don’t want to map kr busses for gate and stuff
  • oh noes, i don’t know how to get default arg values from synthdefs, so my busses are all zeroed and You Will Not Go To Space Today
  • make another dictionary and loop over it like a troglodyte

so yea, could be tidier. on the other hand it works fine and keeping the synthdef args makes it easier to reuse in other contexts.