R-Banner301

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.

jamie@robertsonics.com

  • 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!
    tim

    • 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.

            “CONTROL_TRACK
            [...]
            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!

                Leave a comment