Tag Archive: bpm


DMX Sequencer Module…

Yes, it’s been a little quiet on the blog front lately, so I though I’d give you a little teaser of what’s in development…

DMX Sequencer V1.0The new DMX sequencer, which is very lovely. Can sequence up to 512 channels with 2 levels of brightness. Uses the timecode protocol for the clock signal so requires either Gener8 or the Timecode module to run, which is great because this means you’ll also be able to sync it to midi clock.

Great for working with L.E.D.

 

Available in the online library already : )

 

In the brewing is an updated version which allows for full RGB output, and a more refined UI. I will give full instructions and perhaps a video when it’s available. : )DMX Sequencer RGB

Advertisements

Gener8 LFO Tutorial

As promised, here’s a little tutorial on the new LFO feature in the Launchpad module 😀

This Tutorial goes through some of the ways to implement LFOs into your compositions by effecting controllers and settings in the (at) Filter module.

 

Gener8 Upd8 0.62

Today is the day for the latest incarnation of Gener8. Exciting new features. Bugs defeated. What more can you possibly want.

LFO 2 Full

NEW FEATURES 0.62

  • LFO generator integrated into the Launchpad module.
  • DMX input & output triggers from the Launchpad.
  • Novation Launchpad S Support.
  • Novation Launchpad Mini Support.
  • New media select mode behaviour in Novation Launchpad. Now changes media of ‘selected’ Clips, rather than ‘active’. Active Clips can now have their media changes quantised by using the Novation Launchpad’s media mode.

 

FIXED BUGS

  • Korg NanoKontrol2 issue fixed – (I hope, cannot test yet – please feedback if this re-occurs. The Nano2 is not yet supported, but should not cause problems as did with version 0.60-0.61.)
  • MIDI clock now produces timecode correctly in Loop mode.
  • Zero Division Error’ in Editor module corrected. Mostly – there may be more situations which cause this.
  • Duplicating Clips problem fixed. Copy / Paste of Clips now works correctly again.
  • Loading Clips from the library issue causing scrambled Clip data fixed.
  • Probably some other fixes I forget…

 

Tutorials of the new features to follow…

It’s about time for a new update to Gener8!

In the following week (if all goes well), I will be publishing version 0.62.

Things to look forward to in 0.62:

  • LFO Generator within the Launchpad module. (3 LFO’s – 6 Waveform types, and an extended range to the BPM LFO)

LFO 2 Full

LFO CONTROLS FROM WITHIN THE LAUNCHPAD MODULE

LFO BPM out

 

APPLYING LFO VALUES TO CONTROLLERS IN THE EDITOR MODULE

LFO Input

 

  • Send and receive DMX triggers from Clips.

DMX TriggerIN

 

  • Novation Launchpad 2 & Launchpad Mini support.
  • New media selection behaviour from Novation Launchpad. Alter media of non-active Clips, and quantise the media changes of active Clips!
  • More bug fixes!

I will of course be giving a more thorough explanation of these new features when the update is ready…

Follow1

One of the powerful but hidden delights of Gener8 is a sequencing method which can quickly produce small Clip sequences in a live situation: Follow Actions

So, here’s a short tutorial to help you master it.

Some salient points to remember:

  • Each Clip can have its own ‘Follow Action‘.
  • A Clip’s ‘Follow Action‘ will occur a set number of beats after that Clip has been triggered.
  • There are a number of different types of ‘Follow Actions‘ which can be applied: Increment, Random, Other, etc.

Step 1 – Prepare your Clips

To do any kind of sequence of Clips, we’re going to need some Clips to sequence. So let’s get started:

  1. Spark up Modul8, make sure you have a ‘New Project’ so things don’t get confusing.
  2. Open up the Gener8 Launchpad and Editor modules (these are the core modules and you’ll need to run these together).
  3. Once the Launchpad is ready, create yourself a few Clips on the 1st layer. To do this simply click on the preview panels on the empty Clip holders. NOTE: It’ll be useful for the sake of this tutorial to create your Clips in the same clip-slots as the image below.

Follow2

Step 2 – Assign Media to your Clips

You can skip this step, but the final result will obviously be more effective with media!

  1. Chuck some of your favourite media in your Media Panel. (select a few files from a Finder window and drag/drop them into the Media Panel)Follow3
  2. Activate a Gener8 Clip.Follow4
  3. Select a media for that Clip from the Media Panel.Follow5
  4. Activate the next Gener8 Clip (make sure the Clip trigger has stopped flashing – a useful tip when you are assigning a lot of media’s is to turn off the quantise to speed the process up)Follow6
  5. Select the next media for the second Clip. 🙂
  6. And so on, repeat until all your Clips have media assigned to them.

Tip: You can also change the media assigned to a Clip in the Clip Inspector (top left – Trig pane). There is a value for ‘Media’ number there.

Step 3 – Create a Follow Actions

As I mentioned before, there are quite a few different types of Follow Actions, but first we will have a play with the ‘Increment’ action.

  1. Select the topmost Clip by clicking on the media preview of the Clip in the Launchpad (it doesn’t need to be active, you can do this on the sly during your performance.)  Selected Clips have an orange square around them.
  2. Okay, the Clip Inspector will now be open on the top left of the Gener8 Launchpad, and will be displaying the properties of the selected clip. Select the ‘TRIG’ pane to view the Follow Actions settings.Follow7
  3. Next, set the Follow Actions menu to ‘Increment’. You will see a further setting appear, we’ll leave this at the default setting of ‘1’ for now. Time for some explanations…Follow8

How Does a ‘Follow Action’ Work?

Okay, now we have a Follow Action in place (in the above instance it’s an ‘Increment’ action), the next time this Clip is triggered, it will send out a secondary trigger which will occur a set number of beats after the initial Clip is triggered. You have options for which Clip is triggered next, and how many beats will occur before the ‘follow trigger’ happens.

You can only:

  • Trigger Clips in the same layer.
  • Delay triggers by whole beats.

Everything else is pretty much game, but remember – changes to a Clip’s Follow Actions settings will not take effect until that Clip is re-triggered.

Step 4 – Let’s make a Follow Loop.

We have an Increment action on our 1st Clip, let’s see if we can make a simple sequence which works in a loop.

  1. Select Clip 2 and make a further ‘Increment’ action for this Clip, only this time let’s set the ‘INCR.’ value to ‘2’.Follow9
  2. Now select Clip 4 and again make another ‘Increment’ action. This time we will set our ‘INCR.’ value to ‘-3’.
  3. Re-trigger Clip 1 and sit back while you sequence plays…Follow10

So, how is this working?

Our 1st Clip has an increment value of 1, which means it will trigger the Clip ‘1’ space below it, which is ‘Clip 2’.

Clip 2 has an increment value of ‘2’, so it will trigger the Clip ‘2’ spaces below it: ‘Clip 4’.

Clip 4 has an increment value of ‘-3’, so it will trigger the Clip 3 spaces above it: ‘Clip 1’.

Clip 1 has an increment value of ‘1’, so…. are you getting the idea?

Positive incremental value trigger Clips below the current Clip. Negative incremental values trigger Clips above the current Clip. Zero values simply re-trigger the same Clip.

Play around with the settings.

The most enjoyable way to learn something is through play, so have a go at changing the values until you’re happy with how they behave.

  • Change the ‘beats’ value to adjust the timing of the Follow Action.
  • Change the style of Action to get familiar with the different results.
  • Make sure you make some other pages to see how far this can go.

What are all these settings?

Okay, explanation time again. Here’s a little run through all the options.

  • Increment – Triggers to a specific Clip by using a numeric value (positive = move down, negative = move up, zero = re-trigger).
  • Random (All) – Triggers any Clip on the layer, on any page.
  • Random (Page) – Triggers any Clip on the same page.
  • Other (All) – Triggers any Clip on any page except itself.
  • Other (Page) – Triggers any Clip on the same page except itself.

One of the things I get asked fairly regularly about is how to sync Gener8 to other audio applications (Ableton, Traktor, Logic, Reason, etc.) via MIDI clock. So I thought I’d put this simple tutorial together to explain the basics.

I don’t intend to get into the nitty gritty of producing MIDI clock signals from each and every DAW out there (there’s plenty of info on the web for that, or in your favourite software’s manual, which if you haven’t already read it cover to cover I suggest you do as you’ll be surprised by some key features that are hidden away in there). And I don’t want to delve too far into getting MIDI signals into MODUL8 itself either, but I will say a little bit:

MODUL8 receives MIDI through the IAC (Inter Application Communication) Driver, so make sure you are sending your MIDI clock signals to IAC.

Also, be sure to check the IAC driver is enabled before starting up MODUL8. You can access your system MIDI settings with the ‘Audio MIDI Setup’ OSX app.

So then, we’ll begin by assuming you can get a MIDI clock signal into MODUL8. Okay then, let’s get this going…

STEP 1

Open up MODUL8, and get your GENER8 modules running. You’ll need a minimum of the Launchpad and Editor modules. (In this tutorial, we’ll be using the 0.53 version of GENER8)

Do not open any BPM module, and if you have one running, close it! – You won’t need it while running GENER8, and it will likely clash and may cause it to bug out. GENER8 has its own clock signal, which can also be accessed by other modules (info here for developers).

STEP 2

Start your MIDI clock running in your Audio app, and output it to the IAC driver.

STEP 3

Now is the time to check if we are receiving a MIDI clock in GENER8.

The Launchpad module has its Clock section to the top right. If all is good and well, it should be looking something like this:

Clock

You’ll notice the ‘MIDI CLOCK’ button. This toggles between external MIDI clock and GENER8’s internal Timecode.

Set the ‘MIDI CLOCK’ to the on position. Your clock section will now look like one of the following:

NoClockIn this image, the Launchpad is listening for incoming MIDI clock signals, but cannot find any, and gives the ‘PAUSED’ message. If you see this message, double check you are sending your MIDI clock correctly, and if in doubt: Restart MODUL8.

NoSyncQuantIn this image, the Launchpad has found a MIDI clock signal and tells us that its running at ‘BPM : 120.00’. If you see this, all is good. But we are still paused.

One more step…

STEP 4

A MIDI clock consists of 2 messages, the CLOCK message (which runs at 24 counts per beat), and the START/STOP message. So, although GENER8 is receiving a MIDI clock signal, it’s still waiting to be told when to Start.

Before you restart your DAW’s clock, now is a good time to check your Time Signature is correct.

The Time Signature of a piece of music is defined by the number of beats played in each bar. In most modern dance and western music this will likely be 4 beats per bar (Gener8’s default value), but if you happen to be performing to a Waltz you’ll want to adjust your ‘BAR BEATS’ value to ‘3’ (for 3/4 time).

Adjusting the Bar Beats value will also adjust your possible Quantize values too.

So, when you’re quite happy, restart the Clock in your audio app. Once this is done, GENER8’s clock should now look like this:

Synch-NoQuant

You may notice small fluctuations in the incoming BPM, but do not despair – GENER8 will even this out to give you a steady beat.

So, your performance should now be in perfect Sync with your audio app. Also note that any Clips using the Editors ‘Auto-Loop’ function will magically adjust to any changes made to the clock timing from your audio app. Good times. Lovely!

And while I’m at it, the ‘LINK MASTER’ option is to control Modul8’s Master Speed with the BPM. That’s this guy:-

M8 Master Speed

So then people, get creative!

Nice tutorial…

I happened across this interesting tutorial the other day, which explains (among many other things) the use of a few of my modules, so I thought I’d share it here.

There’s even some clever techniques I hadn’t thought of myself! You’ve gotta love that…

Making of the Drop Box from HaijakArt.

So here we have the new ‘(at) LFO to DMX (DMX)’ module for Modul8.

It’s basically a router for applying the Global LFO output (from my LFO Global module) to DMX channels. Much like the other LFO routers I have written for Modul8 keywords/controllers.

LFOtoDMX

For those of you who don’t know the LFO module and a still using the BPM router, it has 2 Low Frequency Oscillators (one of which can feed back into the other), and 1 BPM controlled waveform. All oscillators can produce a number of different waveforms (sine / tri / ramp / cut / square / random), and output the result through the sharedDictionary to other modules such as this new ‘LFO to DMX’ one. There’s even a version of the Filter module which accepts Global LFO inputs, so you can keep your whole composition synced to the same oscillations!

Now, I’m not a big (or small) user of DMX gear, and I don’t actually have any to hand (so I’m not even sure why I spent the afternoon putting this thing together). Therefore, I haven’t actually tested it on any proper lighting rig – but that said, I’m pretty confident it’s gonna do the job, as all the maths tests out okay. Just seemed like it should exist, so I made it. It would be pretty cool to get some feedback though, so if you fancy having a play around, please do let me know how it goes!

Going back sometime last year, I had the fortune of being passed one of the new Faderfox controllers by Boris Edelstein (creator of Modul8). The controller is Boris’s own design and is being manufactured by Faderfox. For my part I was asked to come up with some modules for the device. Which I have done.

IMG_1292

User1Map

And here is a screenshot of the mod I have made.

For those of you on the ball you will know that with the release of M8 2.7 there is some simple integration of for the controller itself (including feedback for the LED’s etc).

What my module does is go much further, allowing full control of all your maps, some system set-ups for useful & complex procedures (media selection, syphon sources, colour swatches, sequencing), and allows you to easily produce an an infinite amount of patches, which can then be exported to XML.

For those of you interested you can download the manual.

The module will be available in the online modules library (through the app itself under the Modules menu).

Network Timecode

I recently got to thinking about running multiple systems of Gener8 modules in sync, and the potential power that could be achieved for large scale projection etc.

While this is perfectly feasible within the current program (using MIDI clock over a local area network), someone handed me the idea of putting out the Timecode across the network and syncing to that.

At first I had my doubts. Any Timecode produced through the modules in Modul8 is subject to the resolution of the modules scripts, which is at a rate of 1 cycle per frame.

I had previously considered the generation a MIDI clock through the modules scripts, and then abandoned the idea due to this low resolution (as it would limit the range to something like 200bpm).

However, a clock for MIDI data, and a clock for video are two different beasts. Who needs to clock video faster than the output frame rate anyway?

So, I dug out the old Garagecube ‘Network’ module and started hacking away at the code, and after a couple of bleary-eyed late nights, I have a pair of Gener8 Launchpad modules locked into perfect sync.

Now, this is all very much on the rough side, and it’s a fairly long road before I’ll have something ready for everyone to play with, but it seems that the concept is sound, and I think this is quite big news.

Multiple projector set-ups with network synced video on a small budget are only a few steps away from here.

And a few more bleary-eyed late nights I think…

I will keep you all posted.

So it seems, from the number of communications I have had, that people are unclear about the use of the BPM module, and are still using it along side the Gener8 modules.

This is bad.

Gener8’s Launchpad module has all the functions of the BPM module built in, and also generates the more advanced Timecode.

Aside from this, it appears that when running both along side each other, nasty errors start occurring!

So, if you are using Gener8 – Turn off the BPM (global) module. Simple.

On the flip side, the BPM module runs on a much smaller memory footprint. So, if you do not require any of Gener8’s other functions, then you’d probably be better off working with the BPM (global) module rather than the Gener8 Launchpad. Just don’t run the two together…

I have just uploaded a Gener8 compatible version of the popular and most useful Gargecube module ‘BPM Router’

20120803-155455.jpg

You may also notice I have included a new waveform – Random.

All modulations made with this module are Clip specific, and their data will be saved into the Clip Library.

Ensure the Gener8 Launchpad is running when saving your projects to correctly save any BPM Router data.

This module is not available from the online library as it requires Gener8 to work completely.

Download it here.

Place into the ‘Modules’ folder, located in the same place as your Modul8 app.

Timecode Protocols

I have now finalised the Timecode protocol for the Gener8 modules. If you are developing your own module(s) and wish to access this data, here’s a brief explanation of how it works.

I have tried to ‘future-proof’ the Timecode, giving it a full spectrum of possible data types. And although I have made changes to it with this last release of Gener8 (0.52), I promise not to meddle with it further (at least not too much).

The Timecode data is output from the Gener8 Launchpad module, and is available through the sharedDict library as:
sharedDict[‘TIMECODE’]

The Timecode is of data type Dictionary, and contains the following values:

sharedDict[‘TIMECODE’][‘BPM’] – The number of beats per minute.

sharedDict[‘TIMECODE’][‘BAR_BEATS’] – The number of beats in a bar.

sharedDict[‘TIMECODE’][‘BEATS’] – The number of elapsed beats. This value is in the form of a list with values for Bar, Beat, Percent of Beat. (ie, sharedDict[‘TIMECODE’][‘BEATS’][0] = Bars, sharedDict[‘TIMECODE’][‘BEATS’][1] = Beats, sharedDict[‘TIMECODE’][‘BEATS’][2] = Cents,)

sharedDict[‘TIMECODE’][‘SEC’] – Elapsed time in Seconds (This could be used to calculate SMPTE values if required).

sharedDict[‘TIMECODE’][‘START’] – Boolean value to indicate if Clock is running. 0 = Off

sharedDict[‘TIMECODE’][‘LOOP_ON’] – The Timecode can also work in a looped form, this is a Boolean value to indicate if the loop is in effect.

sharedDict[‘TIMECODE’][‘LOOP_START’] – An offset value for the loop in beats. Do not use values of 0, a start value of 1 indicates there is no offset.

sharedDict[‘TIMECODE’][‘LOOP_LENGTH’] – Length of the loop in beats.

Note: Timecode values will be output when clock is controlled via external Midi clock.

Okay everyone, so during the course of this beta development, I have discovered a few of the bugs in my mods were ones I’d copied from other modules, while I was getting to grips with coding in Python.

Okay, so yes, this is a bit annoying, but now that I have the solutions, I can pass them through to some of the other mods, and the world will be a much happier place. ; )

These updates mainly improve the way the module saves its data into your Modul8 project file. But there have been some other advances too, like global LFO inputs in the Filter module’s animation section, and also, most of these modules will now check for updates on start-up.

So, there we have it. I have updated the following modules:

(at) BPM (global)
(at) Filter (layer)
(at) LFO (global)
(at) LFO Router (master)
(at) LFO Router (layer)
(at) Sound Router (master)
(at) Sound Router (layer)
(at) Layer Sequence 10×16

Most of these are available from the Modul8 online library (open Modul8, click the Modules menu, then select ‘Online Library’). You will find them in the public section.

Unfortunately the (at) Filter module does not like to upload to the online library for me, so the version there is outdated.

So here is a zip file containing all the updates. Download Updates.

I’ve also included an update to garageCube’s BPM Router module in this update (again, improved saving functionality).

For further detailed information about these updates you could check out my post on the garageCube forum, which explains where we have all been going wrong. Read Forum Post.

Clip creation, Sequencing with clip follow actions, adding filters, matching loops to BPM with the Auto-Loop function.

Tutorial 1

Gener8 – Tutorial 1 (Clip Creation / Sequencing / Filters / Beat Matching)

%d bloggers like this: