Mech
Visitor
|
Macros and Scripting... - 2005/03/28 17:47
Here's an idea I've unabashedly ripped from Jeff Larson's Mobius VST. Still, it's a good idea, IMNSHO...
With any effect, one eventually finds an instance when they just don't have enough fingers (or feet -- for those of us using foot controllers) to hit a button sequence in the proper order as quickly as we'd like. This is especially poignant with most software and VST's, since the interface is usually through a mouse and computer screen. Credit where credit is due, Musolomo does a great(!) job of opening itself up for external control, but nothing's perfect.
If it were possible to code macros -- multiple commands linked to a single keystroke or trigger -- then things get a lot easier.
Now, I do think there's already a possibility to kludge this in a very basic way using existing functionality, by assigning multiple functions to a single external controller. However, the real fun starts if you put together a scripting function inside these "macros".
Let's say that you want a loop to repeat three times forward, then reverse itself for one iteration and start again. That wouldn't be impossible using keypresses, but would be complex enough to be a real pain. Instead, you might put together a script that looks something like (code comments are between "*/" and "/*"):
macroname="reverse4thbar"; */define the macro/* [ul]function {get $keypress}; */assign samples as they are played/* foreach $keypress; [ul]while noteon=1{; */repeat this pattern as long as the sample plays/* [ul]loop iterations=3; */play the loop three times/* reverse; */reverse the loop/* loop iterations=1; */play the reversed loop one time/* reverse;} */reverse the loop back to normal/* end; [/ul][/ul][/ul][/ul]So here, as I said before, you'd fire off the macro, then any sample you triggered afterward would repeat as normal 3 times, then would loop reversed once, then 3 times normal, then reverse, etc., etc. I'd also imagine that there would be another function to affect only the first keypress after the macro fires, rather than all of them.
(Aside: sorry for the kludgy C-like syntax. I never actually got much beyond printf{"Hello World!"}. Hopefully you get the idea, though.)
Or, here's another example, using a hypothetical argument for "duration". If we assume 24ppqn (parts per quarter note) for a sequencer resolution on the host, we can then beat-sync the following functions.
macroname="triggergate"; */this section is pretty much same as above/* [ul]function {get $keypress}; foreach $keypress; [ul]while noteon=1{; [ul]quantize on; */sync actions to beat or bar/* play duration=24; */remember, 24ppqn=1 quarter note/* mute duration=24; */mute for one quarter note/* unmute duration=24; */unmute for one quarter note/* mute duration=24;} */mute for one quarter note/* end; [/ul][/ul][/ul][/ul]In this one, the sample starts, plays for a quarter note, mutes for a quarter note, plays, mutes, plays, etc., etc. So, you've got beat-synced trigger gating self contained within Musolomo itself. Similarly, you could sequence entire strings of functions in time with the host sequencer.
I'm fully aware that the syntax (not to mention the coding) of the examples I've given is buggy, to say the least. However, I hope it gets my point across that a macro function and, even more important, a *scripting* function would add tons of extra features to Musolomo that the users could then code all on their own. In addition, it would allow you to open up a user area where fans of Musolomo could post pre-canned scripts for different functions. The userbase itself could help expand the functionality of the product, and those users who didn't wish to code their own scripts would have a resource to easily pick-and-choose which functions would work in their own environments.
|