Hey folks,
I recently picked up a Robertsonics WAV Trigger (Tsunami was overly capable for my needs). My goal is to build a sample player using an Arduino Nano as the main control unit for handling input and interfacing and then sending the necessary commands to the WAV trigger to play sounds. The current design I have in mind is connecting a bunch of key switches to the Nano Digital I/O pins that act as triggers for sounds. I want to avoid wiring the switches directly to the WAV Trigger so that I can implement alternative button presses (as in holding a “shift” key to access a different set of functions). However here begins my dilemma.
My initial plan was to control it using MIDI commands from the Nano so that I could take advantage of all the MIDI capabilities like Velocity, Pitch Bend, and Attack+Release control. The aforementioned key switches would trigger MIDI notes to be sent to the WAV trigger. The problem there is that although polyphonic, the WAV trigger does not support MIDI (split) bi-timbrality. The challenge this presents is that (though correct me if I’m wrong) I have to be deliberate with how I order my sounds so if I want to, for example, be able to have a drum kit on 8 switches and then dedicate the rest to playing guitar samples all the files have to be in the same bank (limit of 128 files). It would be difficult because if I want the same drum kit paired with multiple different instrument samples (say piano, synths, or guitars) I would need multiple copies of the same file floating around. That would look like files 0-8 are a drum kit and 9-128 are piano samples, 129-137 are the same drum kit and 138-255 are guitar samples. Then take into consideration that I would like to have multiple drum kits as well, that will easily add up.
The alternative control scheme would be using serial commands, but there is no simple command for Pitchbend or Attack/Release control. For Pitchbend, although not implemented in the library (https://github.com/robertsonics/WAV-Tri … al-Library) I could write a function for that myself based on the User Guide. But, for Attack/Release control, the closest approach I can see is a creative implementation of trackFade(int t, int gain, int time, bool stopFlag) to fade in/out (which is basically attack/release) but that might get messy because I have to be able to guarantee the track fades in all the way before it fades out so the call to fade out would have to be delayed by the time it takes to fade in all the way. Thankfully velocity seems straightforward to implement by relying on some mapping and the trackGain(int t, int gain) function. The main pro to using Serial commands would be that I have full access to all 4096 (I don’t think I will actually have 4096 sound files) sounds in any order I want. That way, I could set one switch to play sound file 0 and then another switch to play sound file 230.
One way to compensate for the limit of 128 sound files per bank (using the MIDI approach) that I have considered is that maybe I could just call a program change on the fly so that pressing a switch triggers both a program change and a midi note message, but I imagine that might get messy quickly as I stack more and more voices.
So I guess my questions are: have I overlooked something, is there a way to mix and match these capabilities, or how best can I compensate for the missing capabilities of choosing one of these approaches over the other?
Thanks!