Results 1 to 10 of 10

Thread: Best laser software for beat synced shows?

  1. #1
    Join Date
    Nov 2019
    Posts
    26

    Default Best laser software for beat synced shows?

    I thought I posted a related thread about this a while back but can't find it. I'm coming up short trying to figure out what I need to do what I want.

    Long story short I want to program a laser show in Ableton Live, which will output MIDI commands to some kind of laser software to trigger clips. It can also output a MIDI beat clock to keep the timing locked. The clips I want to play are almost all beat synced. I've figured out how to bridge the MIDI output of Ableton into other software on the same computer so that's all set.

    I've tried LaserShow Xpress but aside from difficulty getting the software to work and very slow support time, it doesn't look like it really does beat synced effects. It got super frustrating and I gave up.

    I've more or less gotten QuickShow to do what I want in a hacky way but it's pretty limited. Basically I can configure it to accept a MIDI note as the tempo tap input which sluggishly and awkwardly gets its internal beat clock to sync up with the timing in Ableton. Not terrible but not ideal. Then I can use MIDI notes to trigger different clips in the timeline but I'm limited to the number available on one page and I need to make a ton more clips. It also seems to not start the clip at the beginning some of the time, which I really need. On the plus side it does seem like I can make pretty cool beat synced effects in QS, but they're just not synced exactly to the song at the right location.

    I haven't tried Beyond but I'm starting to think it might be my only option, but open to other suggestions. This is for a nonprofit so cost is a factor and Beyond ain't cheap.

    Any insights appreciated! I feel like I'm close and really want to produce some tightly controlled shows...

  2. #2
    Join Date
    Jan 2006
    Location
    Charleston, SC
    Posts
    2,147,489,446

    Default

    The short answer is that Pangolin's Beyond will do exactly what you want, and more. It's got great MIDI support (both in and out) and it also has built-in maps for the APC-40 and a few other controllers. (Since you mentioned using Ableton I suspect you have a MIDI surface of some sort.) Personally I love using the APC-40 for live laser shows - it really makes things easy! But if you use a different MIDI controller you can easily map the MIDI events from that surface directly to cues in Beyond.

    Another advantage of Beyond is Pango-script. That allows you to trigger all sorts of complex commands (or sequences of commands) with a single MIDI event. Anything that you can't configure directly using the MIDI-mapping editor can be accomplished by adding a snippet of Pango-script to the cue, which means that pretty much anything you can do in the main interface with your mouse can be linked to a cue and triggered via MIDI.

    But yes, Beyond is not cheap. In this case you get what you pay for.

    That being said, I think you can do most of what you want to accomplish using either Quickshow or LSX, if you're willing to spend the time to tweak things. MIDI-triggered cues are pretty straightforward in either package. As for the single-page of cues limit, see if there is a way to assign a "next page" command to a MIDI input. I don't use Quickshow, so I don't know if this is a Beyond-only feature or not. Likewise I'm not sure if LSX supports it or not, but it seems like a simple enough command. Worst case, you could keep the keyboard close by and use keyboard shortcuts to swap cue pages...

    The key is the beat clock, and yes, tap-sync is not the best option. However, I've seen people build custom work spaces in LSX where there are 3 or 4 copies of the same grid of cues, but each page has the cues synced to a different BPM. So you have a 120 BPM page, a 150 BPM page, and a 180 BPM page, for example. Then you map one of the faders (or knobs) on your MIDI surface to the animation speed control and use that to fine-tune the BPM. Then use the re-synchronize button to re-start the cue and line up the timing. I'm sure you could do the same thing in Quickshow. Not ideal, granted, but it is a work-around.

    I've always wanted to build an external BPM monitor with it's own microphone and link it to Beyond via MIDI but I've never gotten serious about the project. The hardware to build something like this would be dirt-cheap and I'm sure it wouldn't be too hard to assemble, but for now it's one of those "rainy-day" ideas. Something like this might also be possible with LSX or Quickshow, but again I'm not familiar enough with either package to know if it has an input for a steady BPM clock.

    One final piece of advice: As laserists we are our own worst critics. We strive for absolutely perfect timing and we beat ourselves up every time we notice that the timing is even slightly off. What you need to remember is that the audience is not nearly so picky. There's nothing wrong with striving for perfection, but realize that even if you miss your mark the show will still look very good to the un-trained eye. (Within reason, of course!) Also, if you add some clockwise rotation to a beam cue it will often mask slight timing errors.

    Adam

  3. #3
    Join Date
    Nov 2019
    Posts
    26

    Default

    Adam thanks for the thoughtful response. There are some good ideas in there and it does sound like Beyond would be ideal. Your advice about perfectionism is spot on but in fact what I'm attempting here is to make something very much next level in terms of the tightness of integration between music and lighting.

    Using a MIDI command to select the page in Quickshow is a great idea and just might get me going with Quickshow at least for a full featured first test run. I checked and it looks like I can map individual pages to F1-F12 keys, then I can use Bome's MIDI Translator to map certain MIDI notes to the F keys. It will be a hack but probably can be made to work.

    For background on my project, BPM variation is actually not a big deal since this will be used strictly with house and techno, which almost never has a discontinuity in the beat grid and fits squarely in the range of 118-128 BPM. What's actually going to happen is that I plan to use software called Beat Link Trigger to capture the timecode and track playing information from Pioneer CDJ players and send that to Ableton to trigger programmed cues in Quickshow. It will all be automatic and nothing (or very little) will be controlled by a hands-on MIDI controller.

    What about LSX? Seems like a more full featured option but I could not for the life of me figure out how to make beat synced shows with it. I found some old threads where someone had come up with a system for hacking it by making regular time-based shows and somehow calculating scaling factors for each BPM. It sounded cumbersome and prone to lots of error.

  4. #4
    swamidog's Avatar
    swamidog is online now Jr. Woodchuckington Janitor III, Esq.
    Join Date
    Nov 2006
    Location
    santa fe, nm
    Posts
    1,545,751

    Default

    Yes. Absolutely you can do midi triggered cues with LSX. You can also use midi data as an input to any expression function or effect ( size / rotation / position / speed, etc).

    It's all in the LSX Living document, or any number of people here are happy to help.

    Quote Originally Posted by buffo View Post
    The short answer is that Pangolin's Beyond will do exactly what you want, and more. It's got great MIDI support (both in and out) and it also has built-in maps for the APC-40 and a few other controllers. (Since you mentioned using Ableton I suspect you have a MIDI surface of some sort.) Personally I love using the APC-40 for live laser shows - it really makes things easy! But if you use a different MIDI controller you can easily map the MIDI events from that surface directly to cues in Beyond.

    Another advantage of Beyond is Pango-script. That allows you to trigger all sorts of complex commands (or sequences of commands) with a single MIDI event. Anything that you can't configure directly using the MIDI-mapping editor can be accomplished by adding a snippet of Pango-script to the cue, which means that pretty much anything you can do in the main interface with your mouse can be linked to a cue and triggered via MIDI.

    But yes, Beyond is not cheap. In this case you get what you pay for.

    That being said, I think you can do most of what you want to accomplish using either Quickshow or LSX, if you're willing to spend the time to tweak things. MIDI-triggered cues are pretty straightforward in either package. As for the single-page of cues limit, see if there is a way to assign a "next page" command to a MIDI input. I don't use Quickshow, so I don't know if this is a Beyond-only feature or not. Likewise I'm not sure if LSX supports it or not, but it seems like a simple enough command. Worst case, you could keep the keyboard close by and use keyboard shortcuts to swap cue pages...

    The key is the beat clock, and yes, tap-sync is not the best option. However, I've seen people build custom work spaces in LSX where there are 3 or 4 copies of the same grid of cues, but each page has the cues synced to a different BPM. So you have a 120 BPM page, a 150 BPM page, and a 180 BPM page, for example. Then you map one of the faders (or knobs) on your MIDI surface to the animation speed control and use that to fine-tune the BPM. Then use the re-synchronize button to re-start the cue and line up the timing. I'm sure you could do the same thing in Quickshow. Not ideal, granted, but it is a work-around.

    I've always wanted to build an external BPM monitor with it's own microphone and link it to Beyond via MIDI but I've never gotten serious about the project. The hardware to build something like this would be dirt-cheap and I'm sure it wouldn't be too hard to assemble, but for now it's one of those "rainy-day" ideas. Something like this might also be possible with LSX or Quickshow, but again I'm not familiar enough with either package to know if it has an input for a steady BPM clock.

    One final piece of advice: As laserists we are our own worst critics. We strive for absolutely perfect timing and we beat ourselves up every time we notice that the timing is even slightly off. What you need to remember is that the audience is not nearly so picky. There's nothing wrong with striving for perfection, but realize that even if you miss your mark the show will still look very good to the un-trained eye. (Within reason, of course!) Also, if you add some clockwise rotation to a beam cue it will often mask slight timing errors.

    Adam
    suppose you're thinkin' about a plate o' shrimp. Suddenly someone'll say, like, plate, or shrimp, or plate o' shrimp out of the blue, no explanation. No point in lookin' for one, either. It's all part of a cosmic unconciousness.

  5. #5
    Join Date
    Nov 2019
    Posts
    26

    Default

    Quote Originally Posted by swamidog View Post
    Yes. Absolutely you can do midi triggered cues with LSX. You can also use midi data as an input to any expression function or effect ( size / rotation / position / speed, etc).

    It's all in the LSX Living document, or any number of people here are happy to help.
    What I couldn't figure out with LSX is not the MIDI stuff but how to make beat synced shows. I mentioned above that I found some old threads where someone had come up with a system for hacking it by making regular time-based shows and somehow calculating scaling factors for each BPM. It sounded cumbersome and prone to lots of error. I just want to make beat synced shows like Quickshow has and play them on MIDI cues. If I'm missing something there I'd appreciate a correction. I've exhausted myself looking for documentation and tinkering with the software.

  6. #6
    swamidog's Avatar
    swamidog is online now Jr. Woodchuckington Janitor III, Esq.
    Join Date
    Nov 2006
    Location
    santa fe, nm
    Posts
    1,545,751

    Default

    So, I'm not entirely sure what you mean by "beat synched shows". If if you just want to trigger cues based on bpm of your music, Quickshow is probably the easiest and cheapest way to go. You can do it with LSX (cmb is probably the best user to help with that), but it will be more complex then QS. There is a live cue grid in LSX, but I haven't worked with it much as the majority of my LSX work is timeline shows programmed to music.

    If you're interested in programming shows to music, LSX is a huge bang per buck. Or, do you want to use an external midi sequencer to trigger cues?

    Quote Originally Posted by nmaddix View Post
    What I couldn't figure out with LSX is not the MIDI stuff but how to make beat synced shows. I mentioned above that I found some old threads where someone had come up with a system for hacking it by making regular time-based shows and somehow calculating scaling factors for each BPM. It sounded cumbersome and prone to lots of error. I just want to make beat synced shows like Quickshow has and play them on MIDI cues. If I'm missing something there I'd appreciate a correction. I've exhausted myself looking for documentation and tinkering with the software.
    suppose you're thinkin' about a plate o' shrimp. Suddenly someone'll say, like, plate, or shrimp, or plate o' shrimp out of the blue, no explanation. No point in lookin' for one, either. It's all part of a cosmic unconciousness.

  7. #7
    Join Date
    Nov 2019
    Posts
    26

    Default

    Quote Originally Posted by swamidog View Post
    So, I'm not entirely sure what you mean by "beat synched shows". If if you just want to trigger cues based on bpm of your music, Quickshow is probably the easiest and cheapest way to go. You can do it with LSX (cmb is probably the best user to help with that), but it will be more complex then QS. There is a live cue grid in LSX, but I haven't worked with it much as the majority of my LSX work is timeline shows programmed to music.

    If you're interested in programming shows to music, LSX is a huge bang per buck. Or, do you want to use an external midi sequencer to trigger cues?
    Sorry if my terminology is off. What I'm trying to do is make the laser do things in sync to a beat-based timeline (1, 2, 3, 4...) from an external source (ableton live as I mentioned). I don't want the laser movement synced to a time-based timeline (0:01, 0:02, 0:03...), which is the only thing that seems to be available in LSX.

    So for example on beat 1, the laser shows a red dot. On beat 2, the red dot moves to the left a few degrees, on beat 3, it moves to the left a few more degrees. All in time with the music and exactly on the beat.

    In a time-based animation this is not possible. I can use MIDI notes to start different animations on the beat, yes, but the animations themselves do not relate to the music at all. I hope that's more clear.

    In Quickshow this is called a "Beat based animation"

    Click image for larger version. 

Name:	Screen Shot 2020-08-04 at 00.47.05.png 
Views:	3 
Size:	48.9 KB 
ID:	56884
    Attached Thumbnails Attached Thumbnails Screen Shot 2020-08-04 at 00.36.36.png  


  8. #8
    swamidog's Avatar
    swamidog is online now Jr. Woodchuckington Janitor III, Esq.
    Join Date
    Nov 2006
    Location
    santa fe, nm
    Posts
    1,545,751

    Default

    ok sure.

    you want to tell the software to use a specific BPM (beat per minute) and have cues change and play back with at rates that relate to that speed.

    if i were doing that in LSX, i would read a midi value into one of the global system environmental variables (invar) and then use a fraction of that value to control the number of loops inside of a SFX module.

    i'm without any midi gear at the moment, but i'll ping cmb and ask him to respond to this thread.


    Quote Originally Posted by nmaddix View Post
    Sorry if my terminology is off. What I'm trying to do is make the laser do things in sync to a beat-based timeline (1, 2, 3, 4...) from an external source (ableton live as I mentioned). I don't want the laser movement synced to a time-based timeline (0:01, 0:02, 0:03...), which is the only thing that seems to be available in LSX.

    So for example on beat 1, the laser shows a red dot. On beat 2, the red dot moves to the left a few degrees, on beat 3, it moves to the left a few more degrees. All in time with the music and exactly on the beat.

    In a time-based animation this is not possible. I can use MIDI notes to start different animations on the beat, yes, but the animations themselves do not relate to the music at all. I hope that's more clear.

    In Quickshow this is called a "Beat based animation"

    Click image for larger version. 

Name:	Screen Shot 2020-08-04 at 00.47.05.png 
Views:	3 
Size:	48.9 KB 
ID:	56884
    suppose you're thinkin' about a plate o' shrimp. Suddenly someone'll say, like, plate, or shrimp, or plate o' shrimp out of the blue, no explanation. No point in lookin' for one, either. It's all part of a cosmic unconciousness.

  9. #9
    Join Date
    Jul 2008
    Location
    My momentum is too precisely determined :S
    Posts
    1,777

    Default

    I got pinged by the doge to shed some light on this topic.

    Yes it's possible to do that in LSX, but as you have come to realise, it requires quite a lot of custom scripting in expressions which is certainly off-putting. It does require a lot of effort. I've done quite some work on this over the years. Here are some hints. I'm happy to elaborate on any of them.

    • The concept of a timeline, as you understood correctly, does not work well with externally triggered effects. LSX has a built in live tool that divides the timeline into segments, and you can activate a segment with MIDI. Using the well-hidden SetTimeSpeed event (and the timecode set to live), you can also adjust the playback speed. By default, the auto-generated segments are one second long. So, in the SetTimeSpeed event you could have an expression that changes the playback speed to a value that you can set with MIDI or OSC. This works to some extent, but has two major flaws: 1. it's not BPM-based, and 2. you can only trigger one effect at a time. I managed to make an expression that calculated the bpm by measuring the time between two incoming beat signals (from midi, keyboard, and even using the built-in audio spectroscopy expression). But you can only activate one event at a time, and the builit-in cue selection procedure uses the midi "key" (or note on/off) messages, both of which are showstoppers for me.


    • The If-event can do two major things: change the position of the time cursor on the timeline based on a midi/osc message, and deactivate events. So typically my timelines are grouped in clumps of effects that go well together that I can turn on and off at the same time. I can also select which effect clump I have active at a time. To use this paradigm, create some if-events and stretch them out across the whole timeline. Set each of them to activate a different time (eg. first second, second second, etc). Set it to use the animator, and open the animation window. Say you want to use OSC variable 1 to select the time, then you can use an expression like
      Code:
      equals(oscinvar(1), 1)
      in one if-event and
      Code:
      equals(oscinvar(1), 2)
      in another. Then when you send the OSC message "LSX_0/InVar1" with value "1" then the time cursor should jump to the first time, and when you send value 2 it jumps to position 2. Of course you can also use hotkeys or midi messages, or a combination. Just modify the expression.

      Similarly, if-events can be placed above other events on the timeline that belong to an effect. Set the if event to "skip the next N lines" and set the number to the amount of lines that the effect uses. Then you can do something like
      Code:
      1-equals(oscinvar(2), 1)
      as the expression. Note that you need to use 1-*condition* here since the if event disables lines below it, so if you want it to enable lines then the condition needs to be inverted. Now sending value 1 to "LSX_0/InVar2" will activate the lines below this if-event. You can repeat this with other variables (InVar3, InVar4, ...) and then you have polyphonic effect support!


    • Typically, I have the show playing but paused so the time cursor remains static at the selected time. This means I can no longer rely on any of the simple built-in time dependent effects. This means I have to cook up my own timing scheme. This is actually an advantage, as that means I can control additional parameters: speed, fade time, smoothness, heck even an ADSR scheme if you really want to go crazy. This also means that the timing of the components of an effect can be split up. For example, you can have an effect which moves slowly but changes colour rapidly and the next second, reverse two midi sliders and have it move fast and change colour slowly.

      The big trick here is to use the global variables with the SetVar events on the timeline, and using var(xx) in expressions. When designing an effect, chop up components into coupled parameters (mini-timelines that can be independent from each other). When a beat occurs in the music, what do you want to happen? Maybe you want a shape to fade in and simultaneously grow in size, then fade back out. Then, intensity and size are related and they can use the same timing variable. To achieve this, place a SetVar event on the timeline and set it to (for example) variable 1. Then in your effect, place an intensity and a size event, and set them to expresssion var(1). Then both size and intensity will be controlled by the value of variable 1, which you can set to accept a midi or osc or keyboard input. To make the effect fade out again, you can adjust the expression in the intensity event to
      Code:
      -cos(var(1)*pi*2)*0.5+0.5
      .

      Independently from the size/intensity effects, which might be beat-controlled, you can add a rotation effect that uses another timing alltogether. Instead of variable 1, use a SetVar event set to variable 2, and use the expression var(2) in your rotation effect. Now, you can set the rotation speed independently from the size/intensity. You could have a riser/sweep start to play in Ableton across many beats, and the effect starts with no rotation and then rotates faster and faster in sync with the rise for example.

      A large benefit of using the SetVar paradigm, it's quite easy to remap inputs without having to go into all of your effects one by one. It's a good idea to keep some consistency into the SetVar events, so the behaviour is the same across all effects. For example, var(1) can always be the beat, var(2) slow beat-independent effects, var(3) slightly faster effects, var(4) a manual trigger for stuff, and so on. It's a good idea to stretch the SetVar events across the whole timeline, so all effects always use the same variable, for easy remapping. If you need a different timing behaviour for a particular effect, try to solve it with expressions inside the effect (like the sinusoidal intensity example above).


    • Trigger expressions. This is a large one. I did not yet tell you what needs to go into the SetVar expressions. You have some choices here. You can use a direct MIDI input here (like midi(1) which would be the first MIDI CC parameter). Then you can control that parameter with a slider on your MIDI controller, or an envelope in your DAW. But there is an expression that I like to use a lot that detects when a midi input has changed, and then runs from 0 to 1 with a selectable speed (which is typically controlled with another SetVar event). This is the expression:
      Code:
      in = midi(1);  // change this to whatever trigger signal you want (midi, osc, keyboard, audio, ...)
      if( in*bnot(equal(in, check)),
         assign(out, 0) 
       & assign(running, 1)
      ,0);
      check = in;
      if(running,
          assign(out, out + var(10))
      , 0);
      if(running*above(out, 1), //remove this if-statement if you want the output to keep on increasing forever instead of going back to 0
         assign(out, 0)
       & assign(running, false)
      ,0);
      result = out;
      If you convince Ableton to send a MIDI CC value of 127 at a beat on to parameter 1, *and* a MIDI CC value of 0 between beats, then this will trigger the check in the code and the variable that uses this code will go from 0 to 1 (and then latch back to 0 once it's finished). SetVar 10 controls the ramp speed.


    • Custom timing. Maybe you want timing that is not triggered by some incoming signal, but you still want to control the speed (like that riser effect). Then you can adjust the expression like this:
      Code:
      out = out + var(11);
      if( above(out, 1),
         assign(out, 0)
      ,0);
      result = out;


    That's the gist of custom timing and BPM in LSX. You could extend it and have an LSX expression generate the beat for you but that does not seem to be what you want.

    All of that is a ridiculous amount of work, but if you get the hang of it, it's incredibly powerful. Though, it's a lot of extra work that I wish was already included in the program by default. Maybe one day...

    There's tons more of advanced tricks that you can do like assigning random values to variables when a beat occurs (works great with x/y values), doing crazy stuff with loops, use damping to smoothen things out, ... but this post is already getting huge. Good luck!

  10. #10
    Join Date
    Nov 2019
    Posts
    26

    Default

    Thanks a million for this. It both shows how flexible LSX is and also that I think it's going to be too much work to do what I want. Glad to hear it from someone who has investigated so deeply.

    I think I'll tinker with Quickshow a bit more to see if I can do what I want using page select and if not, spend the $ for Beyond.

    Thanks @swamidog and @cmb!

    Quote Originally Posted by colouredmirrorball View Post
    I got pinged by the doge to shed some light on this topic....

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •