nmMelodyMagic

nmMelodyMagic

A tribute to Ken Stone’s Infinite Melody and Modulo Magic 4U CGS Serge CV generator and processor modules, now optimized for MIDI input and output.

You can find expandable development diary entries at the bottom of this post.

nmMelodyMagic_art1

nmMelodyMagic_01

nmMelodyMagic_02

nmMelodyMagic_03

nmMelodyMagic_gates

Requirements

  • Norns
  • PolyPerc
  • MIDI Output (optional, but highly recommended)
  • MIDI Input (optional)
  • Crow CV in & out (optional, still needs testing)

Documentation

nmMelodyMagic is a MIDI note and CC sequencer, synced to Norn’s clock. Connect it to your favorite synth and generate infinite melodies! A very basic PolyPerc audio engine sound is available as well for easier testing and learning.

My guides for the original 4U CGS Serge modules on GitHub, which will help you understand nmMelodyMagic better, while I haven’t finished the in-script manual yet:

Controls:

K1: Hold for in-script manual
K2: Clock pulse
K3: Advance pulse

K1+K2: MIDI Panic (all notes off)
K1+K3: Save state (auto-loaded on startup)

E1: Switch page
E2: Select parameter
E3: Change parameter

Check out the EDIT menu “MIDI output settings”, where you can assign each of the script’s output values an individual MIDI channel and select between note or CC generation!

Quickstart

Go to the EDIT menu, scroll down and choose your MIDI output device.
nmMelodyMagic_Edit1

Scroll down further, go into MIDI Output Settings and set “DAC1 Proc. Out” to Note and choose a MIDI channel for your connected synth (Default: 1).
nmMelodyMagic_Edit3

Now go out of the menu, back to the Infinite Melody screen, which you saw on startup. The default values will let you experiment manually with nmMelodyMagic, before diving into clock-synced chaos.

nmMelodyMagic_qsIM

On the Infinite Melody page, press K2 and K3 to watch the shift registers fill up and see what happens to the output values at the bottom. The (processed) D1 number is the note that will be sent to your synth. Later then, change Clock and Adv. to positive (faster) or negative (slower) values to automate melody generation, synced to Norns’ clock.

nmMelodyMagic_qsDC

On the Diatonic Converter page, turn E2 and watch the shift register fill and generate octaves and notes. Later, change the Input to something other than Manual to automate note generation. You may go back to the MIDI output settings and assign note or CC output and a MIDI channel to “Dia Out” to sequence an external synth.

nmMelodyMagic_qsMM

On the Modulo Magic page, turn E2 and watch the input bar on the left rise to Initiation threshold markers and see what happens to the output bar. Again, choose an Input other than Manual to process another signal from the script. You may go back to the MIDI output settings and assign a channel to “Modulo Out” to sequence an external synth.

Infinite Melody

The digital shift register “DSR In” is populated with ones and zeros on every Clock pulse, indicated by the left pointing arrow. The value depends on a comparator output, of which the threshold is set with the Sense parameter. By default, an internal noise generator is fed to the comparator. Is the noise value above the Sense threshold, the value is one (indicated by a small square next to the Sense label). If below, it’s zero.

On each Advance clock pulse, the DSR In values are pushed downwards to DSR 1, 2, 3 and Mix. DSR1-3 run through digital analog converters (DAC1-3) which output values between 0 and 127.

The lowest row DSR bits are multiplied by a value between 0 and 127 each (m1-6) and summed together at the Mix output. This lets you set up and combine half note steps, for example, which will not change all over the place, like with the DAC1-3 outputs. A little square next to the m1-6 labels indicates when that value is being multiplied by one. No square means multiplication by zero. Again, this corresponds to the lowest row of DSR bits on the left side.

Diatonic Converter

Converts binary input values (from DSRs) into an octave number and a diatonic scale note number. Root offsets the output. Scale selects between major or minor output. Scaling lets your reduce the output range, which will also shift the output away from strict major or minor scales. Bits 5 and 6 can be disabled to reduce the octave range from eight to two.

Modulo Magic

Processes an integer input value, which may range from 0 to 127. When the input level reaches the Initiation value, the Step Size value will be added or subtracted. This may happen up to eight times, as set with the Steps value. Add and Subtract let you modulate the Step Size value. Offset shifts the Initiation threshold up.

Note On/Off Triggers

nmMelodyMagic_gates

On page 7 or in the EDIT menu, you’ll find a “MIDI Note Settings” menu. There, you may set which DSR bit will start and which bit will stop a certain output note. For example whenever DAC1’s bit 1 is high, it could start the note generated by DAC3-p. If DAC2’s bit 4 is high, it would stop the note. Like this you can achieve not only infinite melodies, but also infinite rhythms :smiley:

Modulation

nmMelodyMagic_mod

Use E1 to scroll to the right until you reach the “Modulation” page. There you have three modulation slots, each with source, amount and target. This lets you create internal modulation and feedback paths, For example you could modulate the Infinite Melody’s Advance rate with DAC2’s output, to create even less static note generation. Or you can modulate the Diatonic Converter’s Root note to offset its melodies.

Modern Art

nmMelodyMagic_art2

Scroll all the way to the right with E1 to reach a screen saver thing, generating modern art, based on you settings and rhythms.


To Do:

  • Maybe rename parameters to be more descriptive or offer an option to choose between the current, original module parameter names and new ones
  • Implement a note quantizer feature to nudge MIDI note outputs into traditionally musical scales
  • Maybe tweak MIDI Panic feature to send only necessary note off commands
  • More testing

Known Issues:

  • Changing a MIDI output setting from note to CC will probably make the current note get stuck. If that happens, or if other notes should get stuck, hold K1 and press K2 to send an “all notes off” signal.

Version History & Download

v0.5.0 - Initial release for further testing and feedback :slight_smile:
v0.5.1 - MIDI panic implementation, tweaks and new default values
v0.5.2 - Notes will be cut off by DSR In bits now (see Gate Length EDIT menu)
v.0.5.3 - Added setting to set which DSR bits start and stop MIDI Notes, added internal modulation/feedback page
v0.6.0 - Added PolyPerc audio output, a UI for gate length setup and a Modern Art page
v0.6.3 - Added saving+loading, in-script manual (hold K1) and tweaked some stuff
v0.6.8 - Added a first try at Monome Crow CV in & out support
v0.6.9 - Another Crow test release, with added gate output and (hopefully) analog clock sync
v0.6.9.1 - Crow functionality code restructuring to make it run independently from MIDI
v0.7.0 - Added MIDI Clock output, made Modern Art more persistent and tweaked some bits and pieces

gitHub ZIP download

Installation

Via the community library in Maiden, or manually via the REPL command:

;install https://github.com/TuesdayNightMachines/nmMelodyMagic/

Development Diary

I’ve posted this thread before the script is released to share my process and thoughts with you and to encourage discussion. Expand the diary entries below to read on :slight_smile:

2021-05-02 Hello and welcome to infinite melodies!

When I still had my “Best of CGS” Serge modular synthesizer in 2018, I went on a quest to fully understand its more complex (seeming) modules, specifically Ken Stone’s Infinite Melody and Modulo Magic. Due to little documentation, this meant having to understand the actual analog circuitry diagrams, which was a wonderful learning experience for me, as a synth DIY novice back then.

I shared my findings in text form, supported by hand-scribbled images, in threads on Modwiggler and also as .md files on my GitHub:

Before I continue, here’s a generative CGS Serge Modular synth jam I posted a while back, which is centered around melody CVs generated with a combination of both modules:

CGS Serge Modular Synthesizer - Infinite Melody Music (w/ patch notes) #TTNM - YouTube

A few days ago, fellow synth nerd @gnome666 suggested that I should create a Norns port of the Infinite Melody module - a challenge which I happily accepted. And since the Infinite Melody goes so well together with the Modulo Magic, I (foolishly?) set my goal even higher, to create both modules and more in one script! The nmMelodyMagic!

The core functionality of the Infinite Melody was coded in Lua surprisingly quickly and I’ve got a working prototype script now, which is doing exactly what the module does, but optimized for MIDI instead of analog CV, meaning that parameter and output ranges are set to 0 to 127. It does not actually output MIDI yet, but I hope that this will be trivial to implement.

Again, my screenshot from above:
nmMelodyMagic_preview01

You can see the parameters from the module’s front panel, its DAC1-3 and Mix output values on the bottom and even a little grid visualization of the internal digital shift registers (DSRs), similar to my expertly painted drawings from the above mentioned guides:

My goals for this script: (in order of priority)

  • simulate the Infinite Melody, Diatonic Converter and Modulo Magic functionalities as faithfully as possible
  • add visualizations for what’s happening inside the virtual chips and wires
  • optimize their inputs and outputs for a 7 bit MIDI value range (0 to 127)
  • option for each individual output to send MIDI notes or CC
  • additional “voltage processors” for each output to attenuate and offset the signals
  • additional note quantizers for relevant outputs to tame the chaos even more

I look forward to share more of this project as it develops. In the meantime, let me know your thoughts and wishes and if you haven’t already, do check out those guides for an insight into Ken Stone’s brain :wink:

2021-05-04 Tackling the magic

Development continues very smoothly. Too smoothly? We’ll see! I still haven’t implemented an actual MIDI output, but I coded up the Diatonic Converter, a value processing screen and the Modulo Magic functionality and the output values (optimized for the MIDI range 0…127) seem correct.

Diatonic Converter
Preview image:
nmMelodyMagic_dc_

The Diatonic Converter was an add on circuit for the Infinite Melody. It receives a 6 bit input from the Infinite Melody, splits it in two groups and derives an octave and note number from each 3 bit group:

This is very cool, as it provided a diatonic 1V/Oct CV output, which is more traditionally musical than the other CV outputs of the Infinite Melody. A modification of the Diatonic Converter also allowed to disable the 2nd and 3rd bits of the octave selection, to reduce the octave range from 8 to only 2. I’ve included this modification as well in my script and I also plan to let the user choose the input, which was usually hard-wired to an Infinite Melody DSR output. It might be fun to wire it to the input DSR too for example (the pink one from my guide drawings), or even to an external MIDI CC signal converted to binary!

Modulo Magic
Preview image:
nmMelodyMagic_mm

This thing was coded surprisingly quickly. Either it is just that simple, or I am getting better at nornsing :stuck_out_tongue_winking_eye:

Here’s another drawing from my guide just for fun:

Since the Modulo Magic is a standalone module, I implemented input selection from the get go. So the user may choose any Infinite Melody/Diatonic Converter output or a “Manual” parameter, which of course can be mapped to an external MIDI CC source! This means you can use the module stand-alone and not just in combination with the Infinite Melody.

More thoughts
It occurred to me that I’m actually not sure if there are any people here who know what I’m talking about :sweat_smile: CGS Serge modular synths are a niche within a niche already and the modules I’m porting are certainly of the more obscure kind. So my plan is to add some kind of “live manual” to the script, making it easier for newcomers to learn to use it.

At the moment I’m not using any buttons, so I thought while holding K1, the display would show a screen telling you about the currently selected module or even the currently selected parameter. This shouldn’t be difficult to code.

Before that though, I want to add some visualizations to the Diatonic Converter and Modulo Magic screens too. The Infinite Melody screen already has the animated DSR grid, which is very helpful in my opinion and the other modules need something like this as well.

2021-05-05 Optimzations and Parameter Naming

Progress

  • Included an internal noise generator as a signal source for the Infinite Melody. Alternatively, the user may select a “Manual” MIDI CC input to be used for noise generation through the IM’s comparator.

  • Improved the update rate of the three ported modules Infinite Melody, Diatonic Converter and Modulo Magic, so it runs smoothly and properly in sync to the Norns master clock.

  • Started with the animated visualizations for the inner workings of the DC and MM. Some binary counting knowledge will probably still be required by the user, but even if there is absolutely none, I believe that it will still be fun.

  • Added input selection to the Diatonic Converter, so now it runs stand-alone and the user may even choose a “Manual” or MIDI CC source to be processed and turned into diatonic notes.

  • Added routing options for all outputs to MIDI Note or CC# with individual channel selection. No actual MIDI output yet though :wink:

Parameter Naming
I always felt that some of the parameters on the original modular synth modules had slightly misleading names - at least in the context I read them.

For example on the Infinite Melody, there is an input called “Clock”. This however is the clock source for the comparator/noise generator input, which populates the first DSR with bits and has nothing to do with rhythm or note output. So feeding a clock signal into that socket will not generate anything at the module outputs. Instead, the “Advance” input requires a typical clock signal to make the module generate melodies and the “Clock” input should actually be rather fast, even audio rate, to generate very random values.

So I’m a bit torn wether to stick to the original parameter names from the modules or to choose new, maybe more fitting, ones. Since I assume that few people will actually have experience with the original modules, this might not be a bad thing.

2021-05-06 v0.5.0 First release

I got the MIDI note and CC output working all of a sudden, so I thought it would be a good time to present a first version of the script to this forum to gather some feedback. MIDI Note output is still very rudimentary though. Just one note playing at a time per output, lasting the whole clock subdivision length. So a gate length feature is needed and I also need to check for conditions in which notes get stuck, one of which I found already :wink:

I also finished the visualizations for the three modules and hope they help.

2021-05-08 v0.5.3 Feature creep and a surprise

With the functionality of the original 4U CGS Serge modules being completely coded, it’s now time to think about where this script should actually be heading in terms of scope and usability.
I feel like I’m my own worst enemy when it comes to feature creep :smiley: Norns scripting being so fun and easy as it is, I keep having feature ideas for which I already know most of the code structure in my head, so implementing them is not that hard at all so far. But this of course makes the script even more complex for the end user than it already would be, with only those weird original CGS Serge modules being ported to simply output MIDI.

But - much to my surprise - MIDI is quite a different beast than CV. You cannot only have a “note pitch” output with MIDI apparently, like when a modular synth outputs 1V/Oct pitch CV. No, with MIDI you also need to generate a gate start and stop signal every time you want your connected synth to make a sound or go silent. But the original CGS Serge modules I ported were not meant for this. They are only used to output pitch CV melodies and process incoming CV. Gating and rhythm signals needed to be generated with something else in the rack.

So I definitely needed to expand my script here beyond infinite melodies, to infinite gates/rhythms too. Staying true to the spirit of the modules, I thought that I could use the many bits in the digital shift registers (DSRs), to create note start and stop signals. The user can simply select a bit for note on and another one for note off commands. When the bits go high then, the command is sent, making sure that only one note can sound at once. So a note needs to be stopped in order for a new one to be generated. Since there are 12 signal outputs in total, one can still achieve polyphony, by routing those outputs to the same MIDI channel.

I feel like this will be a fun way of handling the gate situation, although it does add another layer of complexity to the script, especially for users who are not yet familiar with the original module functionality and their many DSRs. To tackle this problem, I need to start developing the promised in-script manual ASAP and also think about some additional user interface pages and data visualizations. Hopefully before even more features creep in.

2021-05-10 v0.6.8 Krah!

OMG! What a ride this project is! I can’t imagine I wrote 2717 lines of code already!!! Well, okay, 2717 of very spaciously formatted and heavily redundant code. But still :smiley:

I fell like I’m at a point now where I should do some research and learn about programming best practices and how to structure code properly. Also, I need to check how this whole “object oriented” thing actually works and maybe how to spread parts of my script across several .lua files, for a better overview and easier maintenance. I don’t know if that’s actually a thing or helpful at all, but it seems like it.

I also want to know how to write this cryptic Lua “shorthand” … don’t know how to describe it, but sometimes, in other scripts, people seem to get a lot done with just one line of code, which is then not that well readable to me though, compared to the usual “human readable” Lua snippets. But it seems like you can omit writing certain things in Lua and string together stuff.

Anyway, I just implemented Monome Crow CV in & out support and hope that it actually works. I don’t have a Crow myself, but maybe I should save up for that. CV is obviously really useful. Thanks again to @gnome666 for nudging me into this direction and for offering to test the functionality.

When Crow support is done and I’ve tweaked the script some more, I think I’ll need to take a little break from coding. I’ve spend several hours almost every day for over two weeks now coding Norns scripts and while I’m still totally fired up and full of ideas, I need to check wether I’m neglecting something/someone else in my life … uhm … well, yeah, I know I do and she has been totally, amazingly cool the whole time and I’m so grateful :sweat_smile: I’m still on business trips during the week, where it’s easy to code alone in hotel rooms after work, but I’m afraid I spent too much time doing this on the past weekends at home too. Whoops! Coding for fun can be so crazily addictive. It’s like brain games, where you have to build the games and puzzles yourself too before playing with them.

By the way, I’m still coding exclusively on my iPad with Textastic and while it’s not as great as Visual Studio Code or some other desktop software like that, it works surprisingly well still and I feel quite at home with it.

53 Likes

DUUUUUUUDDDDEEEE!!! This is amazing! Super impressed. Can’t wait to try it out, as well as the rest of your scripts…Now, where did i put all of that free time of mine :weary:

3 Likes

Updated the OP. At the bottom you now find expandable development diary entries :slight_smile:

4 Likes

I think this is a brilliant idea!!! Thank you again for puttin in the time and effort into this. Its truly a dream come true! :fairy: :prince: :four_leaf_clover: :rainbow: :sparkles:

the next thing is for me to figure out how to code, so that I can hook this up to Crow so that I can get some CV out and run my Serge panels with the kickass norns script!

2 Likes

I don’t have a Crow, but from the little info I picked up along the way so far, it seems trivial to make Norns talk to it. Of course all my script values are 7bit 0…127, because I didn’t think about doing CV out with Norns :grimacing: So you won’t get smooth CV from from my thing, unless I do a major rewrite at some point. I don’t know what resolution Crow outputs, but I’d assume it’s above 10bit.


EDIT: Another diary entry in the OP. No new screenshots this time, but all is working well so far. Still need to figure out the MIDI output though :smiley:


EDIT: FIRST RELEASE!!! :ghost: Check out the OP


EDIT: v0.5.1 now has new default values that let you explore the script manually before venturing into chaos. Pressing K2 and K3 will now send a manual Clock and Advance pulse. See the Quickstart in the documentation section of the OP.

MIDI Panic: Holding K1 and pressing K2 makes all MIDI notes turn off, in case you get stuck notes.

7 Likes

I’m SO freakin excited to try this! Thanks for making it! :hugs:

2 Likes

So excited for the weekend and some time to try out this beast of a script. one million thank yous!!! :muscle: :muscle: :muscle: :muscle: :muscle: :muscle: :muscle: :muscle: :muscle: :muscle: :muscle:

1 Like

Thanks a lot :blush: Looking forward to your feedback, if you have time.

Some thoughts I had when testing it this morning:
While the original CGS Serge module functionalities are all there now and that feels really good for me as the coder, the actual output is a bit different with MIDI than with the original CV of course … so this script could be one of those super high concept projects, which in reality miiiight be just a bit underwhelming :sweat_smile: I feel this is probably due to the rigid MIDI note concept, meaning that there are always just half tone steps and no weird/interesting pitches in between.

I’m currently working on a gate length feature, so that it’s not always just one held note after another at the clock rate and I hope that this will spice things up. Of course I’ll try to keep it in the spirit of the modules, so the rhythms should all be shift register based.

1 Like

I dont think this is limiting at all. At least for me, as my personal interest in a lot of use case scenarios is tonal music, I would have run the outputs in the serge through a quantizer anyway, so at least for ME, this in no way would hamper my experience.

1 Like

v.0.5.2 has been released, implementing a first test of a gate length feature. See the “gate length” EDIT menu. There you can define a bit number 1-6 from “DSR In” (the top one on the Infinite Melody page), which will cut off an output’s note. It’s difficult to explain for me right now, but the default settings are set up in a way that each output is cut off by another bit, so there should be variable length notes now.

Okay, great! I have also wished for a quantizer module in my Serge rack back then multiple times actually. But now that I have this super quantized software here, I wasn’t sure.


EDIT:
Just played with it some more and the gate length thing actually works quite nicely. Also, what’s possible with the script now is polyphony! Since there are twelve outputs, you can send multiple ones to the same synth to make it play chords.

I will need to write a rest and/or note start feature though. Making the notes end separately is fun, but they shouldn’t always start at the same time.


EDIT:
v0.5.3 is out!

  • In the EDIT menu there’s a new “MIDI Note Settings” group, in which you can specify which bits will start and stop a note. So for example you can have DAC1 bit 1 start a note and have DAC3 bit 5 end a note. I need to build a UI for this still.
  • There’s a new page to the very right called “Modulation”, where you can set up a tiny mod matrix. So you could, for example, use DAC1 to modulate the clock speed.
  • New default values will hopefully make learning the script easier. For example the processed output of DAC1, called DAC1-p, is now set to output MIDI notes with an offset. So when you connect a synth and follow the Quickstart section in the OP, you should start to hear sounds too without much setup.

Also added a new diary entry at the bottom of the OP.


EDIT:
v0.6.0 whoop!

  • Added simple PolyPerc audio output! So you don’t need to connect a MIDI device in order to test and learn the script. It doesn’t react to MIDI note off events, but it starts at the correct time, when a MIDI note on event is triggered.
  • Added a UI page for MIDI note on and off setup, with a DSR visualization of the start and stop bits.
  • Added a screen saver page (scroll to the right with E1), which generates modern art, loosely based on your settings :wink:
  • Updated the OP with more screenshots too!

I really feel like this is a proper script now! So next up, I will focus on the in-script manual.

1 Like

trying to get this installed today but my f$*&%ng norns/wifi/maiden is acting all buggy today. hopefully will get a chance to test it out by the weekend…thanks again for your dillignet hard work!!!

EDIT: SUCCESS!!! I can aready tell the visualizations are going to be super helpful in wrapping my head around this :muscle: :muscle: :muscle: :muscle: :muscle:

IMG_7092
IMG_7091

It’s also available via the community library in Maiden :slight_smile:

EDIT:

Yay!!!

1 Like

I dont know sh*t about MIDI, or totally grasp infinite melody yet, but here is real world proof of concept that this norns script works controlling my Perfourmer run through some fx. Obviously very rough, still need to deep dive and get the tones and scales I like but a huge hats off to Felix for this one. Thanks again for making this one come alive… :pray:

EDIT: Felix, if you have an IG account, please let me know so I can tag you :slight_smile:

2 Likes

Sweet! Thanks for posting this video :slight_smile:

I think a not-so-obvious, but important setup procedure is assigning the different module outputs to MIDI notes and channels in the EDIT menu’s “MIDI Output Settings”:
nmMelodyMagic_Edit2

For example DAC 1 is the output of the first row of DSR bits (below the vertical Adv. arrows):
nmMelodyMagic_01

nmMelodyMagic_Edit3

Diatonic Out is the Diatonic Converter output. Etc.

“Proc” or “-p” outputs are ones that are being processed on the Output Processing pages, where you can scale and offset the signals. These get separate MIDI notes/CCs/channels for extra fun. So for example Diatonic Out could play its melodies on channel 1 and Diatonic Proc Out could be offset by 12 semitones to play the same melodies one octave higher on a different synth (or the same synth, if it’s polyphonic).
nmMelodyMagic_proc

EDIT:

I do: https://www.instagram.com/tuesdaynightmachines/ It has been inactive for a while due to social media detox, but feel free to tag me nevertheless :slight_smile: Thanks!


EDIT: v0.6.3 is out!

  • Hold K1 to read a description of the currently selected page/parameter! Let me know if you have ideas for better texts or if there are issues with my wording.
  • Hold K1 and press K3 at any time to save your settings to the laststate.pset file. This will be loaded automatically on startup to let you pick up from where you left off.
  • A default.pset file can be loaded via the EDIT menu to reset all settings to the Quickstart parameters in the OP.
  • When an output is set up to send MIDI notes, then the script will display the note name now (e.g. C1). Like this you can easily see wether an output sends notes or CC.

Phew! This was an important update I think :slight_smile:

4 Likes

What is this madness! :exploding_head: My NTS-1 is on fire :fire:

Amazing work, I have a most strange feeling of somehow understanding what this Byzantine contraption does. Surely it must be an illusion.

9 Likes

v0.6.8 - Monome Crow support … hopefully :wink:

I don’t have a Crow so I can’t try it myself. @gnome666 (and anyone else who’d like to) it would be awesome if you could test the following:

CV Outputs
Go the the EDIT menu, scroll down to “Load Default Settings” and press K3.

Scroll down further and enter “Crow I/O Settings”:
nmMelodyMagic_crowtest1

By default, each Crow CV output should already be assigned to an Infinite Melody output, like DAC1-p:
nmMelodyMagic_crowtest2

Make sure that the Infinite Melody is running, i.e. Clock and Advance are both > 0:
nmMelodyMagic_01

Hopefully, there should be quantized 1V/Oct CV at all four CV outputs now. So a properly tracking VCO should play chromatic scale notes.

If that should indeed work (I doubt it, but I’m crossing my fingers), you could go back into the EDIT → “Crow I/O Settings” menu and test slew, scaling and offset for each CV output.

CV Inputs
Connect a voltage source (e.g. manual CV or LFO) to both Crow CV Inputs, go to the Modulation page and select Crow In 1 and 2 as sources.
nmMelodyMagic_crowtest3

Ideally, there should be values displayed at the bottom of the screen that correspond to the input CV, mapped/clamped to 0-127.

Then you could also set amounts and targets and see if you can in fact modulate something inside the script with CV.

If anything goes wrong, it would be great if you could send me the Maiden REPL output, where you should find an error message.


Wow! Thanks so much for the video! So cool that it works with the NTS-1! Are you also modulating values via MIDI CC from the script?

2 Likes

I’m on the case! will give it a spin tonight (as long as the kids have mercy on my soul when I get back from work)… :metal:

1 Like

I am indeed, just one (a bit of oscillator shape) to try to keep my head straight learning to understand this chaos madness confusion wonder thing called nmMelodyMagic. The NTS-1 MIDI CC “API” covers NTS-1 functionality very well, which is wonderful for CC stuff like this one, and I’ve low-key made an NTS-1 companion library for my own live-coding/zombie-coding (=not quite live, not quite dead coding) fun. Being able to sequence CC is a whole area of wonderful things to happen, besides notes. NTS-1 is a great investment, and your work is basically money in my bank right now. Thank you!

3 Likes

So, gave it a go, and so far things seem to work well, CONGRATS!. So far, I got 4 quantized CV’s out of the 4 crow outputs (see attached videos to see the mordax scope. Also, kudos on adding the feature like slew, and scaling features, definitely big pluses on taming the wild swings in octaves that can happen with the 0-10 V range inherent here.

one request though, at least for my use case: It would be great to sync whats going on in the norns with the rest of my modular, and also, synch the note changes with an envelope. With other crow scripts, typically, one of the inputs is reserved for a clock input that can be used to clock the script rather than the internal clock. that way a user can choose to clock externally with the modular or other synth or the internal clock. also, the four outputs have with other scripts been thought of as 2 voice pairs so the top 2 outputs are one voice with a 1 v/oct out and a gate/trig out and the bottom 2 outputs are another voice pair. Now, it doesnt have to be this way, but especially with a complex script like this, it may be helpful to have the crow be abke o generate a trigger to fire of an envelope in sync with the v/oct change. Just a thought. some people might prefer having more v/oct sources though…i didn’t get a chnace to test the CV input feature yet…

excellent work though. thanks again.

1 Like

Yesss! Phew :smiley: Thanks so much for testing!!! :metal: :metal: :metal:

Yes, those were easy to do :slight_smile: However, scaling and offset were not part of the original CGS Serge Infinite Melody module (only on the Diatonic Converter), which is why the Mix output with the six attenuators (m1-6) and Modulo Magic are so useful to get some control over range.

On the Modulo Magic module, set Initiation for example to 12 and Step Size to -12. This will keep the output range inside 0-12, i.e. one octave. The original note spacings of the input signal stay intact, as it’s a modulus operation and not scaling!

Additionally, you can scale and offset each output further on the “Output Processor” screens.

I believe that syncing the script to your modular should already be possible, unless I misunderstood something or somehow have hogged the inputs with my script. What happens when you go to EDIT → Clock and choose Crow as an external clock source?

That’s a good idea! I’ll do that. Should be easy to let the user choose any pitch/gate CV output combination actually.


EDIT: Infinite ambient noises from @SPIKE :pray:

3 Likes