Noatikl User Guide


Scripting: Noatikl as a Hyperinstrument

< back | next >

Noatikl can be used as a customisable hyperinstrument.

You might also want to refer to the scripting overview and the scripting reference.

What is a hyperinstrument?

A hyperinstrument can be defined as being an instrument that can have extraordinary, semi-automated response to relatively simple real-time inputs.

Noatikl is a hyperinstrument in many ways. For example from simple interaction in real-time through mouse and keyboard, you can have it generate extraordinary, ever-changing music that responds to your inputs. Noatikl also directly responds to any real-time MIDI note data fed into it, for example from a MIDI keyboard or other MIDI controller; where you feed MIDI data into Noatikl, you will find that Noatikl automatically harmonises its voices with all incoming MIDI note data. You can also configure Noatikl to respond in many advanced ways to both MIDI note events and MIDI control events (otherwise known as "MIDI CCs").

So, Noatikl is a hyperinstrument for a number of reasons; Noatikl directly harmonises with incoming MIDI note events, and noatikl's generative engine is an instrument that creates hugely more than the sum of your direct inputs with keyboard, mouse, and MIDI. In other words, noatikl's generative engine, MIDI control, scripting and direct MIDI input harmonisation all work together to make Noatikl itself greater than the sum of its parts; a customisable generative hyperinstrument!

See the Noatikl Hyperinstrument - Quick Start if you want to get started quickly!

How does Noatikl work as a hyperinstrument?

You can respond to any incoming MIDI CC however you want; for example, to change the current scale or adjust a harmony rule in real-time in response to incoming MIDI CC events!

You can also respond to any incoming MIDI Note on/off event however you want; for example, you could use some notes (such as accidentals in a scale) to change parameter values, and pass-through the others to the Noatikl engine. In other words, you can use certain specific notes to trigger various complex responses by Noatikl, for example; or to enable/disable the chording properties only for certain notes (immediately that a note is triggered!); or to 'fix' "invalid" notes; or to change scale; or pretty much whatever you can imagine!

All note on/off events received by Noatikl via the MIDI input device (or plug-in input) are normally passed through automatically to the destination MIDI output device (or plug-in output); with the exception that where you have a Listening voice with a Note On trigger script, the note on/off events for that voice's MIDI channel are not immediately passed-through by noatikl; in this case, the only way to get them out is via a call to noatikl_Trigger_EmitListeningNote within the nt_trigger_midiin_note trigger script for a voice! Note that the noatikl_Trigger_EmitListeningNote will work only if your voices is a Listening voice, and if Listen? is ticked.

To re-iterate, for lines that are not being listened to with a voice that has a Note Trigger Script: the any note on/off events effectively bypass noatikl's internal engine and are passed-on with minimum latency (though the Noatikl engine does harmonize against them). On lines that are marked as listening voice type, and where there is a note trigger script with embedded, then you'd need to have a call to this function within that script:

  noatikl_Trigger_EmitListeningNote(noteon, pitch, velocity)
  

which results in note on/off events on that line being sent via noatikl's internal composition engine.

Here is real, working example of a Voice MIDI In Note trigger script that you could use in your own Noatikl piece. Note that the call to noatikl_Trigger_EmitListeningNote will have an effect only if the voice is a Listening voice:

  function nt_trigger_midiin_note(noteon, channel, pitch, velocity)
    if (channel == noatikl_Trigger_GetChannel())
    then
      -- Simply pass-through all notes to the listening voice.
      -- If we wanted to, we could respond to certain pitches to do different
      -- things!
      noatikl_Trigger_EmitListeningNote(noteon, pitch, velocity)
    end
  end
  

When you call this function, this causes the note to be emitted as though the listening voice were "following" that note in accordance with the "following voice" parameters. So, if you want the exact note to be passed through, then using the follows strategy of semitone shift and set the offset to be zero.

The note emitted by Noatikl after it applys the "following" rules, is auto-chorded (if you have this set-up); and any Noatikl voice that you have configured to follow this listening voice, will follow that note.

The above comments apply if you play into the listening voice with a monophonic feed. If you're supplying a polyphonic feed, then slightly more complex rules apply. In this case, only the first note in any ongoing chord from the controller is treated with the following voice parameters by noatikl; all other notes active in any chord are harmonised with, and passed out directly to the MIDI stream. So as you play solo/chords on your controller, the system caters for that polyphony in a good way; the first active note in the chord is processed by Noatikl (and auto-chorded or followed as required), and all other notes in the chord are passed straight through with minimal latency (and are, of course, harmonized with by noatikl!).

Note: we recommend use of noatikl_Trigger_EmitListeningNote with the Standalone version of noatikl: some sequencer hosts can too much latency to make this mode effective with the plug-in (Reaper is effective!). And note, that if using this mode with the plug-in, it is likely to work best when getting input from a MIDI port or direct from the device, and outputting data to a port (e.g. MIDI Yoke or IAC port). If you find otherwise, please let us know!

Note that the MIDI input could come from MIDI backing track, in sequencer, instead of course; depending on what routing options are available to you in your host sequencer.

Noatikl Hyperinstrument - Quick Start

To have a voice  "listen" to incoming MIDI data, you need to follow the instructions below.

Note: you can simply select File -> New and select Standard Templates -> Hyperinstrument, to automatically create a new file which contains the following settings; you'll first have to change the MIDI output/input devices to suit your requirements. The created ppiece assumes your instrument is on MIDI channel 1; the first voice is a listening voice set to auto-chord the first note of any chord you play on your MIDI input device; having first applied any pitch shift required through the following voice parameters. It also has a couple of extra voices to harmonize along with your input.

  • define a MIDI input device
  • tick the Listen? checkbox (please follow the link and read the comments about MIDI feedback!)
  • set a Noatikl voice to be the one to "listen" to your guitar by setting the voice type to Listening (this makes it a "Listening Voice")
  • select Voice - Scripts
  • set this to be your voice's MIDI In Note trigger script:
    function nt_trigger_midiin_note(noteon, channel, pitch, velocity)
      if (channel == noatikl_Trigger_GetChannel()) 
      then   
        -- Simply pass-through all notes to the listening voice.         
        -- If we wanted to, we could respond to certain pitches
        -- to do different things!
        noatikl_Trigger_EmitListeningNote(noteon, pitch, velocity)  
      end
    end
     

Harmonising with a MIDI file - an example using Cubase SE 3

The following example (tested with Cubase SE 3 on Windows) shows how to use Noatikl standalone to harmonise with a MIDI file held in Cubase SE 3.

Cubase

  1. Start Cubase
  2. Select File -> Import -> MIDI File, and select a a "type 0" MIDI file (which will load all data into one track), as that is by far the easiest to work with.
  3. Set the "in:" to be "Not Connected" ... this is to prevent MIDI feedback, which would crash Cubase!
  4. Set the the "out:" to be MIDI Yoke NT: 2 (for example)
  5. Ensure that your MIDI Sync options are to emit MIDI Sync on MID Yoke NT 2. (Transport -> Sync Setup)
  6. Press play; you should hear nothing as the MIDI data isn't going to any synth. Press Stop, and move on to prepare your Noatikl piece for MIDI harmonisation!

noatikl

  1. Start noatikl
  2. Create a simple piece, maybe with just 1 voice to start with (or as many as you want, I guess). You probably want to assign to MIDI channels not used by your MIDI file.
  3. Set MIDI output to Microsoft GM Wavetable Synth
  4. Set MIDI input to MIDI Yoke 2
  5. Tick both "Sync?" and "Listen?"
  6. Press Play (Noatikl will then wait for you to press the Cubase play button)

Cubase

  1. Press the play button on the transport control - Noatikl will start playing all the data from the MIDI file, and merge-in its own composed data that harmonises with the incoming MIDI file. Excellent!

noatikl

  1. While it is all playing, go back to Noatikl and look at the "Harmony Rule" view, just to show visually that Noatikl is harmonising with the MIDI input data from the MIDI file.

Cubase - crashes on saving/re-opening the project

If I save this Cubase project and re-open it, the "in:" setting is not saved by Cubase. If I try changing this, my copy of cubase always crashes(!), presumably as it has caused itself someway to suffer from MIDI feedback; we hope this doesn't happen with your copy of Cubase!

See Also

© 2008 Intermorphic Ltd. All rights reserved.