WAV Trigger feature requests

The WAV Trigger has been out for several months now, and I’ve already made a few tweaks to the firmware as a result of feedback. Overall, it’s pretty complete and stable, and I’m quite happy with it.

I’ve been working on a major firmware update that I’ll probably issue as a beta release in the coming weeks. In addition to an optimized mixing engine that simultaneously increases the number of voices/tracks (for the same speed microSD card) and even further reduces the track start latency, I’ve also implemented built-in programmable track faders, allowing for smooth attacks, releases, ramps and cross-fades. I’ve even added the attack and release time to the MIDI implementation making the WAV Trigger even more like a polyphonic MIDI hardware sampler. I’ll shortly add support for the track faders to the Arduino Serial library.

There are a number of additional features and enhancements that I’ve been contemplating, but I want to make sure that I’m working on things that customers will find useful, not just that I think are cool. To that end, here’s a list of features that I’ve been thinking about. Any feedback will help me decide which of these, if any, to do:

1) A serial command to return WAV track filenames. The thing that makes this non-trivial is support for long filenames, which involve multiple FAT directory entries and potentially long serial messages. Returning the 8-character DOS compatible filename would be much easier, but I’m not sure that’s what you’d want.

2) A mechanism for starting multiple tracks in sample-sync with one another. At present, it’s possible that closely spaced triggers or serial track start commands will result in the respective tracks being out of sync by one or more audio buffers. I’m not completely sold on the need for this, since if you want to play 2 tracks in sync with one another, why not just mix them down into a single WAV file? But I may be missing the point.

3) EQ on the output. Probably 3-band – low, mid, high – with gain settings set with an init file command as well as via real-time serial commands.

4) A playlist file. This would likely take the form of a file containing a list of track numbers, and a trigger option that would sequentially play the tracks from the list.


  • reply tim burns ,

    Hi Jamie,
    Thanks for making such a great product. I would vote for 2 and 3; they seem the most useful. Looking forward to the fader and cross fade support! As a novice and nubie, I’ve been looking for some resources for learning how to interface the WAV Trigger with an Arduino. Is there a direction you could point me in? I did see the serial library you’ve created but I think I’ll need something with a little more hand holding.

    Okay, thanks!

    • reply jamie@robertsonics.com ,

      Hi Tim,

      Thanks for the feedback. This will help me prioritize things.

      After I update the Arduino Serial Library with the fade functions, I’ll look into an example sketch that shows how to use the library. As with most things Arduino, help comes in the form of looking at what others have done and (hopefully) made public.

      What Arduino board are you using?

    • reply tim burns ,

      Thanks for the quick reply! I’m using the Uno R3. My goal is to have a dialogue between the Arduino and the WAV Trigger so LEDs can be turned on for the duration of when a sound file is being triggered. I’m also looking to be able to use pots to control the volume of specific tracks. I figured this would all be best done with the Arduino. Thanks for the advice, I’ll dig around and see what I find.

      • reply Matti Niinimäki ,

        Hi Jamie,

        Would it be possible to add a feature where you could tell a specific file to play by it’s name? Like in the Sparkfun MP3 player shield.

        Or another useful thing would be able to read the contents of a text file from the sd card.

        • reply jamie@robertsonics.com ,

          Hi Matti,

          Thanks for the feedback. The WAV Trigger already supports starting, stopping, pausing, resuming and looping tracks by name over the serial port – more functions than the MP3 Trigger. It’s just that the name must start with the 3-digit track number, but can otherwise be any legal filename. Please see the Serial Protocol section of the User’s Guide.

          • reply Matti Niinimäki ,

            It does? Am I missing something? I can only see the command to control a track by the number.

            Data = Track Control Code (1 byte), Track Number (2 bytes)”

            What I would really need, is the ability to play a file with any name by calling the name of it. More specifically, I’m working on a project where the WAV trigger would play sounds associated with RFID tags, and the users should have an easy way to add more sounds without touching the Arduino code. So just adding files to the SD card with the RFID tag ID code as the file name would be the easiest solution.

            Thanks for the great work. Amazing product. Just what I’ve needed for many years.

            • reply jamie@robertsonics.com ,

              My point is that since I require that all track file names start with a 3-digit number, but can otherwise be anything, starting by track number essentially is starting by track name. But I can see that this could be open to interpretation.

              The WAV Trigger is as fast as it is (<12 msec trigger response time with the latest firmware update) in part because it locates and indexes the WAV files on the microSD card on power up, and builds a table of track numbers and starting FAT entries. Once that's done, it never needs to parse through the FAT directory again. Playing tracks by name would result in a huge performance penalty because I'd have to search through the directory to find the name every time you start a track. The larger the directory, the bigger the hit. Now, you might argue that I could implement it both ways, and who cares if the "play by filename" method takes longer, and you'd have a point. But what about long filenames? Would you expect support for names longer than 8 characters?

              • Matti Niinimäki ,

                Ah, I see. I have a few projects where I would really need to be able to have more freedom in the naming of the files. Like the RFID example I mentioned above.

                I would be ok with a limitation of only 8 characters for this feature, if you could implement it. Long filenames would obviously be better, but I can find ways to get around that easier than having to deal with the numbering. And I would be ok with the slower trigger, since it would be useful for certain applications. For faster triggering you would then have to use the numbering.

                Or just the feature of returning the WAV filenames from the card like you suggested above. This would also allow me to do what I’m after.

                Or do you think it would be possible to have a serial command that could read the contents of a text file on the SD card. Then I could have the users create some kind of a simple database on a text file that would connect each RFID tag to a certain track number. I could of course have another card reader for this, but I would rather just have one card that would contain all the files. I think this might be useful for other applications also since the SD card is there.

        • reply Matti Niinimäki ,

          Oh and regarding your numbered points

          1.Not absolutely crucial, but would be a nice addition

          2. Yes, please! I think this would be really really useful for any sample-based multitrack work, if it would be possible. I would find tons of uses for this feature. For example, 8 channels of audio playing in sync and having some Arduino-based controller for controlling the volume of each track. Something that normally requires a computer.

          3. Would be cool, but maybe not the most important thing. Are any kind of effects possible?

          4. I wouldn’t personally probably need this, but I could see this being a useful thing.

          • reply Billy Williams ,

            How can you switch between channels to have different sound banks on the trigger?

            • reply jamie@robertsonics.com ,

              At the moment, the MIDI Channel number is multiplied by 100 and added to the note number. This becomes the track number that is played. So MIDI Note number 60 on Channel 1 (which is actually channel 0) becomes track 060_xxx.wav. MIDI Note number 60 on Channel 2 (which is actually channel 1) is 160_xxx.wav. So each channel plays a separate set of track numbers offset by 100, allowing you to change sound banks by changing MIDI channels.

            • reply billy williams ,

              Thanks for the reply! I am understanding the 000.wav 100.wav etc for storing the different channels. What I dont is how can I switch between the different stored channels on the sd card with a midi keyboard? Is there a way to program one of the 16 triggers, while the midi is set on, to flip through the different channels? Also, this is for vintage organ samples, requiring the velocity to be 100 percent hard. Is there a way to program the wav trigger to have velocity to max all the time? Thanks

              • reply jamie@robertsonics.com ,

                Pretty much every MIDI keyboard I’ve ever come across let’s you easily change the MIDI Channel it’s transmitting on, from 1 to 16 (keeping in mind that the actual channel numbers transmitted are 0 – 15). So that’s a function of the keyboard itself.

                Unless your keyboard also allows you to scale all note event velocities to max, I’d have to make a (small) change to the WAV Trigger firmware to remove the velocity scaling. Please contact me directly at info(at)robertsonics(dot)com.

              • reply Alvin Barber ,

                Hi Jamie,

                Just ordered a WAV Trigger. Feature #4 above would be useful for my project. Thanks!

                • reply Mark Montgomery ,

                  Would it be possible to include a feature where the tempo of a playing track can be dynamically adjusted, without altering the pitch, or vice versa? The VS10XX chips have feature like this. My apologies as it’s not on your list and if its an absurd request. Thanks.

                  • reply jamie@robertsonics.com ,

                    I’m pretty sure that the VS-10XX devices only do this when rendering MIDI files, since changing speed of audio without changing pitch is extremely processor intensive. I don’t believe that they can do this for MP3 audio. This would be very difficult to do in the WAV Trigger. I have considered doing pitch change to support mapping a single track over a number of MIDI notes, but the method I would use would also change the playback speed/time.

                    • reply Rich ,

                      Hi I would love to be able to manipulate the play back speed of an individual file, something similar to this: https://www.youtube.com/watch?v=1XdsvWMa7-M

                      I think it uses ISD1820 Voice Sound Board, I would love to be able to change the playback speed and pitch at the same time on your wav trigger. Being able to decrease/increase pitch would be extremely beneficial.

                      I’ve had a look at the code on github, would it be possible to adapt from that, or is there firmware on the chip you’d need to change?

                  • reply Dan ,

                    Hi Jamie

                    Sparkfun has had this product out-of-stock for aWHILE so this Fall when they finally got ~20 more, I jumped on it hard. Then they stocked several more & now with the newer 12897 model, –I’m very glad to see a healthy demand for this truly fantastic product. It’s pretty liberating stuff.

                    Okay: So as I’m also learning the workings of another product, the LoL Shield, I might’ve happened upon what feels like an almost clever & possibly overlooked idea.. The LoL Shield can be programmed to display a UV meter (http://vimeo.com/25165683). Typically splitting one line-out signal w/ Y-adapters to feed two inputs will divide the amplitude of those levels, a reduction. In this example, let’s say to feed both a small speaker off the WAV Trigger & the LoL Shield.. couldn’t you simply run the Right channel off the WAV Trigger’s small speaker out & the other Left channel to the LoL Shield..? You’d then add a neat visual feedback feature to your small project on the cheap, right? It’s probably no longer necessary to then incorporate yet another audio amplifier to re-boost the divided audio signal, etc. I’m certain this likely isn’t a very common thing to do but on the journey of finding ways to save coin for easy features on those projects.. Just a thought, anyway

                    —in writing this, I immediately realized that “probably not” if the amplified speaker-out on the WAV Trigger disables the line-out.. (does it?), hmm.. ..well shucks.. the idea is there but maybe the method’s not as clever as I had thought. l:1

                    Well anyhoo, I’m in absolute love with the fact that the WAV Trigger can allow any button to Randomize files between ### – ###. As a producer of music *mostly* electronica, the ability to make a randomly pulled audio snippet or sample, short-fire, bar-by-bar, potentially triggered to a bpm, from an 8gb card with several hundred WAVS, ..is just super amusing to me. Again, liberatingly cool.

                    Could you maybe achieve automating those triggers w/ a 555 Timer or would you recommend incorporating a relay to close the desired contact on the WAV Trigger..?

                    Truth be told I got the WAV Trigger for a puzzle circuit I’m making, basically a game. With the WAV Trigger, the arcade buttons & toggle switches will have sound effects, etc –but after exploring the finer details & features, I’ll certainly be investing in a couple more boards in the next week or so.

                    Please pardon the rant. Just needed to vent my praises for the WAV Trigger as a whole. /:)
                    Thanks again! -d_.

                    • reply Dan ,

                      VU meter, not UV meter -.-;

                    • reply Sandor ,

                      Hi Jamie,

                      First of all, thanks for this amazing product! I have a project idea with Arduino and feature #1 would be necessary to make it properly. Is there any plan to implement it in the future? Thanks!

                      • reply jamie@robertsonics.com ,

                        As I mentioned in the post, this is problematic because of long filenames. Only returning the 8-character DOS filename means that after accounting for the 3 or 4-digit track number and the special character for the long filename, there are only 3 useful characters – hardly enough to be descriptive. Returning full long filenames requires messages of unknown length.

                        I just haven’t come up with a good way to implement this.

                      • reply Sandor ,

                        Actually for my project this 3 – 4 (with short name) extra character is perfectly enough. If I can get the file list with Arduino I have 17000+ combination from only 3 character to identify the type of the effect. For example:

                        0001pno.wav -> pno = piano -> “0001 piano”
                        0002drm.wav -> drm = drum -> “0002 drum”
                        0003gtr.wav -> gtr = guitar -> “0003 guitar”
                        0004vln.wav -> vln = violin -> “0004 violin”
                        0005gtr.wav -> gtr = guitar -> “0005 guitar”

                        2048vce.wav -> vce = voice -> “2048 voice”

                        So 3 character enough for this or any basic project with the Wav Trigger I think. I know it’s not like have the full name of the sound file, but fairly informative to know which file we want to trigger even after we changed them on the SD card.

                        • reply Fabrizio ,

                          Hi Jamie,
                          I’m trying to build a Mellotron module (I play in a prog rock band) using the Waw Trigger and Arduino.
                          About feature #3, the EQ… should be possible in the future to implement a low pass filter? The M400 has it, and I think it should be useful also for Synth emulation projects.
                          Thank you for your wonderful projects!

                          • reply jamie@robertsonics.com ,

                            I was thinking about a 3-band boost/cut EQ with preset Low, Mid and High ranges – like you would find on a small mixer. Would that suffice?

                            • reply Fabrizio ,

                              Yes, actually a low pass filter isn’t the same but is very similar to a High eq control. I don’t know how many db/oct the M400 filter is, I’ve searched on the internet for a long time without result. But…really a high eq control, especially if with some simple parameters, should be enough. Thank you!

                          Leave a comment