Workaround: How to trigger samples via MIDI with PinkyVST

For discussion on the topic of Ms Pinky's "Pinky VST" plugin
Post Reply
mastahlee
Posts:13
Joined:Wed Nov 19, 2008 10:00 pm
Workaround: How to trigger samples via MIDI with PinkyVST

Post by mastahlee » Sun Nov 23, 2008 4:53 pm

Introduction
PinkyVST is a great plugin for integrating vinyl control into your workflow for things like scratching samples while performing an Ableton Live set. However, the biggest feature missing is a way to load which sample to control via MIDI, like what you can do with the Reactor ensemble Ammobox. Apparently, MIDI control was attempted for the PinkyVST but constant problems resulted which kept the capability from being included in the release. This is a guide for a workaround I developed in order to hack in the capability. Due to the method in which samples are loaded (drag and drop), it isn't the cleanest method but it works very well and with little overhead. Unfortunately, this hack is MAC ONLY due to the tools used, but the same steps should work on a PC if you can find the right tools.

What You'll Need
PinkyVST
MidiStroke (A MIDI-to-Keystroke converter)
Quicksilver (For its ability to bind shell script execution to keystrokes)
Click (This is a custom app I wrote to perform the drag and drop)

Overview
Looking over the requirements list you might have figured it out, but basically what you'll be doing is creating a workflow to bind the execution of an app that performs the drag and drop necessary to load a sample in PinkyVST to a keystroke, and then binding that keystroke to a MIDI note. If you want you can stop right after the keystroke step is that is all you need, but for full-on MIDI triggering goodness I'd suggest going all the way.

Step 1: Setting up the Click App
Download the click application and put it wherever you find convenient (I put mine in my Documents folder). The application takes two arguments as its input: the X coordinate and the Y coordinate of where you want the click to occur. It takes these inputs and performs a downclick at that location, and then it drags 15 pixels to the right and then releases the button to perform the drop. So if you wanted it to do this action at 1200 pixels to the right and 390 pixels down from the top-left corner of your screen, you'd run the program like so:

./click -x 1200 -y 390

To try this out, just open up the Terminal application, navigate to where the click app is stored, and type out the command above and hit enter.
Image
You should see your mouse jump to the right side of the screen. Pretty simple right? You can test out this command, changing up the X and Y parameters, with the PinkVST window open and in the location you'd want it to be in and figure out the exact XY inputs for triggering each loop on the list. I found the XY coordinates for a list of 8 samples with the window on the far right of my screen and came up with these inputs:

./click -x 1200 -y 370
./click -x 1200 -y 390
./click -x 1200 -y 410
./click -x 1200 -y 430
./click -x 1200 -y 450
./click -x 1200 -y 470
./click -x 1200 -y 490
./click -x 1200 -y 510

As you can see, each item is 20 pixels apart from the next. You can do this to figure out any number of samples to trigger as long as the whole list fits on the screen. Once you've figured this out, its time to bind the execution of the click application with a set of parameters to a keystroke.

Step 2: Setting Up Quicksilver
Quicksilver is a great little application for launching programs and executing commands. Its a must-have app for OS X powerusers so if you don't have it now this could be a good reason to learn how to use it, as it does have a bit of a learning curve. For our purposes, though, we'll just be using it bind different keystrokes to each way we'll execute the click application. Download and install Quicksilver, and run through the setup. On the recommended plugins screen make sure to check the Terminal plugin.

After setup is finished, use the command you setup to invoke Quicksilver (default is control + spacebar) and you should get a popup on your screen. Start typing "click" and the click application should show up. If it doesn't press the down arrow and scroll through the available documents until you find it. Then hit TAB. You should now have the second window highlighted, which should hopefully say Run [...]. If it doesn't, press down and scroll through the commands to until you find it. If you can't find it, you did not install the Terminal plugin correctly. Go to the dropdown menu at the top-right of the window and go to Plugins. In the resulting preference pane go to recommended plugins and ensure the Terminal plugin is checked.
Image

If the Run [...] command comes up for you, then hit TAB once more to go to the third pane. Here you enter in the arguments for running click, so put in something like -x 1200 -y 390 . It should look like this when you've got it right.
Image

If you hit enter or click execute, your mouse should leap to the position just like executing from the terminal. Now that you've figured out how to execute the command with Quicksilver, now you have to bind it to a trigger. Invoke the Quicksilver window (control + spacebar) and then click the button at the top-right of the window, and on the resulting drop-down select Triggers. You'll be presented with the Triggers preference pane.
Image

As you can see, I have 8 triggers defined, one for each set of parameters I want to be able to invoke via keystroke. To create your own trigger, click the plus button on the bottom bar and select Hotkey. If everything goes well, the resulting window should have the first two panes already filled out with the click app and Run [...] command and all you need to do is fill in the third pane. If not, just set up the panes the same way you did on the normal quicksilver screen. It should end up looking something like this.
Image

Once you've got that setup, hit save and the trigger should appear on the screen. To bind a keystroke to it, click the (i) icon on the bottom-right side of the window and a slide-out should appear. Go to the hotkey field and enter in the keystroke combination you want to use (I chose to use control + option + a number as my template as it is uncommon and hard to invoke accidentally). After that deselect On Press and select On Release (trust me, it works better). The preference pane should look something like this.
Image

Now, when you hit your key combination (like control + option + 1 if you followed my template) the mouse should jump to the correct position. Repeat these steps for the rest of your triggers and you should be able to switch samples on the PinkyVST with just the keystrokes! Now, for the final step.

Step 3: Setup MidiStroke for MIDI-to-Keystroke Translation
The final step uses Dan Rodney's excellent and lightweight MidiStroke app in order to bind those newly-created keystroke combos you made to actual MIDI notes. Download and install the MidiStroke app to your machine and then open it up. You should see a simple screen that looks like this:
Image

First thing, make sure to select the source of your MIDI data on the drop down at the bottom of the window. Then, click the plus button on the left side of the window to add a new MIDI control. As you can see from the screenshot, I started with a num 0 on channel 1, which is the C-2 note on the keyboard. Once you pick a MIDI control, go to the right-side pane and hit the plus button to add a new keystroke to bind to it. Just select the checkboxes that apply for the key modifiers you used and add the keystroke. You can add as many keystrokes to a MIDI control that you want, but for our purposes you should only need to add one. Repeat these steps for the rest of your triggers and you should have a fully-functional MIDI-triggered sample loading macro!

Conclusion & Request for the PinkyVST Developers
As I noted at the beginning of this how-to, this workaround is a bit of a sloppy hack. It gets the job done, but in a really roundabout way that isn't without its caveats:

1. Obviously, the PinkyVST window must be the topmost window at all times you want to trigger a sample change. Otherwise the macro will just drag & drop whatever is topmost in the position you set it to execute.

2. You can only setup triggers for as many samples that you can display on the PinkyVST file menu at one times. There is a way to setup groups of samples and switch between them like banks, though, and I might append this how-to with those details later.

PinkyVST Devs: Please, please, PLEASE add a keystroke command within PinkyVST to load a sample. I know MIDI triggering is giving you problems but this should really not be an issue to implement. A simple Return, control + L, or even control + shift + command + ~, whatever! This workaround would be 90% shorter and then the PC users could join in on the fun as well. I'll gladly rewrite this how-to on the event that you do this. I love all the work you've done and PinkyVST is a great plugin, but there is so much potential waiting to be tapped!

I hope this how-to helps those people looking for a way to shoe-horn midi triggering into the current PinkyVST build. If you have any questions, suggestions or problems, just ask and I'll see if I can help. Good luck!
Mudo
Posts:340
Joined:Tue Jun 08, 2004 9:22 pm
Location:...Barcelona...

Post by Mudo » Sun Nov 23, 2008 5:30 pm

...
First of all Thanks for your supporting and help.

we supose that you need 8 or 16 or infinite (dream is still free) samples to scratch and want to change them triught midi cc or note.

I see two different ways to realize it:

1- cue points inside a big waveform with all these samples.
2- one channel pinky vst with each sample for sample.

Let me explain the second one.

If you want to have 8 diferent samples ready to switch one to other with a click (or pedal) just put one instance of pinky vst in each channel and load in each channel all these samples.

Then put i/o equal for each channel.

Finally map mute buttons.

It is a lot of cpu consumption but is farless too simple than midi and keystroking (I make live looping with ableton and use keystroking)

...

another way is DIY programming developments with Ms. Pinky SDK or trying to get any source code from the supported software (like neuromixer that is more midi flexible) obviously talking with developers.

If Ableton done the homework we will not need all of this features.
Simply get vector velocity asignable to a clip and then with one midi button...

hop! you could scratch anything inside Live...


Check my post about sending Midi velocity signal and understand why nathan ramella missed the train with his ammobox and liveapi...

Ever is a simplest way to do the most flexibility possibility but in this case the only thing that we could do is send midi signal from (and into it for vci users) turntable to external world.

Think on it, it is true powerful and a few programming...

;)

...
...

Mudo means mute person.


Researching new interface paradigms
...
nathan ramella
Posts:2
Joined:Fri Dec 26, 2008 1:45 am

Happy New Year!

Post by nathan ramella » Thu Jan 01, 2009 3:08 am

Mudo wrote:...

If Ableton done the homework we will not need all of this features.
Simply get vector velocity asignable to a clip and then with one midi button...

hop! you could scratch anything inside Live...
I think Ableton did their homework, they've spent a lot of time making Live a solid performer such that realtime sample reversing/convolution isn't part of their agenda (yet?)

Clearly it's an idea who's time has come and with the Serato team-up they announced it might even be in the works. But I think that 'up to now' before the abundance of multi-core processors their model made a lot of sense. Threaded DSP applications on a single processor are a different beast entirely than threaded on multi-core / multi-cpu. (i.e. more options out of the box these days in terms of maintaining signal throughput rates)
Mudo wrote:...
Check my post about sending Midi velocity signal and understand why nathan ramella missed the train with his ammobox and liveapi...

Ever is a simplest way to do the most flexibility possibility but in this case the only thing that we could do is send midi signal from (and into it for vci users) turntable to external world.

Think on it, it is true powerful and a few programming...

;)

...
Hey Mudo, I looked around for your post regarding MIDI velocity / signal and I'm not sure exactly what you're referencing in terms of me missing. Digital vinyl stuff is just a hobby for me so if I've missed anything I wouldn't be surprised -- however if you enlighten me it'll make my future projects stronger if I can fill the gaps in my knowledge.

I look forward to your input!

-Nathan
Mudo
Posts:340
Joined:Tue Jun 08, 2004 9:22 pm
Location:...Barcelona...

Post by Mudo » Sun Jan 04, 2009 6:43 am

...
Dear Nathan,
I said missed as terms in "MonkeyGod" expectatives...
You were so close to the "really" user dream but you missed try to make understand the users and believing that your solution was the only and the best...

but I'm very happy to see you working with more people and giving us the precious present of your partner and friendship(s).

I will be very happy if you become the person which create some translator for control these scrubb features into Live based in PD or Processing (because they are opensource and Linux portable)

The features wishlist: (I posted a few millions time more or less...xD)

Scratch clips
Scratch entire song
Relative Mode (you are right it is the most important but...)
Vinyl cueing trigger playlist scenes (I have an idea how to)

I'm not sure if I miss something...

Don't be angry with me, I'm trying to give some enlighment to you... cleaning some karma from my own selfstuff egoism in jelaosy way and frustration... working altogether seems the better way to washing up my dirty soul...

;)

God Bless You (and Peter Kirn hehe)

...
...

Mudo means mute person.


Researching new interface paradigms
...
Mudo
Posts:340
Joined:Tue Jun 08, 2004 9:22 pm
Location:...Barcelona...

Post by Mudo » Sun Jan 04, 2009 6:46 am

...
And forget Ableton Api success... they seem a bit confused about the future and visionaries like you could become sadly people when they think that nobody is listening or understanding but maybe this is the opportunity to "show and enlight" others with your work (and help some others like me)

Thanks Nathan you are doing a great job.
David

...
...

Mudo means mute person.


Researching new interface paradigms
...
Post Reply