Shruthi Wave Upload & Editor Tool

To make the brilliant Shruthi (thanks so much Olivier!) even more versatile, I’ve decided to develop an application to prepare, generate, modify and upload user waves to the Shruthi and while doing so I’ve come across an inconsistency:

The Shruthi docu states for the waveform transfer a sys ex header like this:
F0 00 21 02 00 02 03
but the sys ex files with User Waves found here on the forum all have the following header:
F0 00 20 77 00 02 03

My ShruthiXT appears to swallow both without complains, but I’d like to be shure to use the correct form in my application.

Can anyone help me out on this?

Cheers, badtidude

Good initiative ! :slight_smile:

cool, i had no idea this was possible.
i’m quite happy with the existing waveforms.
but i like the idea. :slight_smile:

> Can anyone help me out on this?

When I started the shruthi project, I just used an unassigned SysEx ID (20 77).

When I realized that maybe I would be selling more than 50 of these, I registered with the MIDI Manufacturer association and got my own Sys Ex ID (21 02).

So I recommend you to use 21 02. The Shruthi still receives data with 20 77, though…

ive wanted this for a long time!

@badtidude cool- looking forward to seeing this!


Yes! The one feature that even I have trouble using on the Shruthi! I need it.

@ Olivier: Thank you for that good background info! Then I’ve already choosen the right one ;).
@all: thanks for the interest, I’ll post it here soon, after some more testing. But as a teaser, have a look at the attached screenshot… Be warned, it’s a pretty technical tone tweaking tool ;).

I see your mac interface and raise you one question. Is it also Windows compatible? Could it run on an old Gumdrop Mac? I think I have one tucked away somewhere…

Yes sir! Go for it - that’s the real spirit of a open source community

@audiohoarder: Well, if you don’t have objections against installing the Java (7+) runtime, it should work for you on windows as well (the application is developed in Java) ;). I’ve devd it on a fairly fast Mac, but a short test on my vintage MacBookPro didn’t look too bad.

@badtidude: Thanks for the fast response!

No problem. I do JAVA coding too. You are a brave soul to tackle any project with the default JAVA GUI commands.
The Mac question was more of a Power PC vs Intel issue, but as it is JAVA that can stay in storage for now. :slight_smile:

@audiohoarder: For another tool of mine, I’ve replaced most of Javas components with my own ones, which I found pretty costly timewise ;). So this time I decided to stick mostly with the out of the box stuff, knowing that that wouldn’t yield the prettiest UI… Hope that will be not too off-putting ;).
Java is quite some ambivalent Language for me - very convenient and efficient to program, but very quirky when it comes to naming and implementing certain functionalities.

Yeah, one of those “quirky” features to me was always the default GUI libraries. I don’t care if it looks cool. This is a tool for nerdy synthesis after all, haha.

Yes, indeed - the Java GUI has some naughty surprises in store with it’s sometimes erratic multithreaded update handling… :wink:

Woah, this looks great! I’ve been messing around with SPEAR recently (, deconstructing instrument samples into partials. Some interesting wavetables could probably be made using the two pieces of software (and a wave editor).

@SirPrimalform: You can try out Audio Term to make wavetables in a few formats. I will definitely see what Spear can do later.

Thanks for the tip! SPEAR is not directly related to making wavetables, it’s an FFT analysis/resynthesis tool which just seems like it might be useful for getting loopable single cycles to use in a wavetable although I haven’t actually got as far as trying that yet.

Ok here it comes (the following text is included in the zip file as well - no real manual, but some basic hints):

ShruthiWaveGen basic instructions and hints

01) ShruthiWaveGen is provided for free and as is, without any guarantees, promises, liabilities and obligations. It has been tested on OS X Mavericks and Snow Leopard as well as on Windows 7 and Mint Linux 12. It should work on any System able running Java JRE7+, but depending on your hardware/driver/OS configuration you may discover issues. Besides that, it has some known limitations, which will be addressed further down the line.

02) ShruthiWaveGen comes in a zip achieve containing executables for Mac OS X, Windows and Linux, which you’ll find in their respective sub-folders. You may delete the sub-folders with OS editions which you don’t need. The application folder should be placed at a location for which you have write access rights, since ShruthiWaveGen will store its data next to itself to stay portable. On windows this unfortunately means you have to place it on your data drive or in your documents folder, due to write access restrictions in the program folder. As ShruthiWaveGen is a Java Application you need to have a Java Runtime Environment (JRE) installed. Preferably JRE7 or later, though it might work with JRE6, too. Mac OS X came with a preinstalled Java in older (Snow Leopard, etc.) OS X versions, newer OS versions may require you to download and install an OS X compatible JRE via AppStore or manually from the Java / Oracle website. Depending on your OS some OS specific functions like file selectors may differ in their feature set and behavior. All 3 OS editions came with a launcher for convenience. On Windows 7 I recognized dangling java processes after a couple of launches of ShruthiWaveGen though, so you might want to have an eye on that in the process explorer or launch it or launch the *.jar with Java directly. On OS X the CMD-Q key-command bypasses the Java quit handling, so no preferences get saved automatically - please use either the quit button of ShruthiWaveGen or press “save global defs” before hitting CMD-Q. On Windows this same issue applies to pressing the window close button. On Linux you may have to flag the executable as such by Right-Click->Properties->Permissions Tab->Set the Execute: “Allow executing file as program” Flag.

Ok - enough of the legal and technical blah, let’s get into the application!

03) The original screen resolution of ShruthiWaveGen is 1920x1200, but it is still fairly usable down to 1366x768, since it scales all components. Most Buttons have a key-command, please check out the title bar of ShruthiWaveGen for the explanation of the key shortcuts. There is a bit of mathematics under the hood, but the selection and number of controls has been chosen to have maximum effect with a minimum of interface elements. Some sliders change there function depending on the value of others sliders - play with them and discover ;).

04) ShruthiWaveGen is not a sample editor, but intended to generate, manipulate and adjust one cycle wav files to be used as wave table sounds for your Shruthi. So please use the DAW of your choice to trim down your audio file to a single cycle / period of the wave you want to play with your Shruthi before loading it into ShruthiWaveGen. Therefor ShruthiWaveGen just loads wav files smaller than 48000 samples. ShruthiWaveGen ignores the original sample rate of the wav file (you may use any you want) and plays back everything at 48kHz. Due to the way Java handles audio output buffering there is unfortunately a short lag between changing a parameter / pressing a button and hearing the result in the played audio. At least it doesn’t seem to generate glitches with the current solution. (Hint: When preparing your one cycle wav files you may discover an issue of your DAW… E.g. Logic Pro X despite it’s overall maturity isn’t able to properly play back short loops of audio in its sample editor. Therefor you may need to do a few copies of your wave one after the other to be able to listen to it without glitches.)

05) ShruthiWaveGen has 8 sectors with the following jobs (from left to right and top to bottom):

5a) A list of single cycle/period wav files, which are the source of the following manipulations; use the 4 buttons below to add to, remove from, save or load the file list.

5b) The waveform display of the selected of the loaded waves.

5c) The frequency spectrum display of the selected of the loaded waves.

5d) The waveform of the selected of the loaded waves after all manipulations and the adaption on Shruthi’s sample size (128).

5e) Here you can generate loads of new waveforms with frequency domain synthesis and choose some options how to adapt and manipulate the loaded and selected wave (controls below the “play generated” and “mute audio” buttons). Additionally you can save and load the generating parameters here (please note, that in random mode you won’t get the same wave again, but just one with similar properties, so please save with “save generated wave” or inside a “wave set” in this case.) “Save global defs” saves things like window position, size, loaded files, etc.

5f) The display of the frequency spectrum of the generated wave form and also the frequency shape which may be imposed on the adapted wave via the “Filter adapted with gen spectrum slider” (only available in DFT mode).

5g) The display of the generated wave form

5h) Here you can add the adapted and / or generated wave to a wave set, which you may then save, load, export or send. Please note that Shruthi supports a wave set of 8 waves. If you add less to the wave set, the rest of the 8 waves get filled with chopped versions of the last wave in the wave set list. If the wave list contains more than 8 waves, only the 1st 8 waves get transmitted to your Shruthi or saved into a .mid or.syx file. To keep the whole list, please save it with “save wave set”. If you have a massive amount of MIDI Ins&Outs, the “midi port scan” may take quite a while. Please wait until the light of the button goes off ;). Please note that there are some MIDI interfaces / drivers which lack reliability when it comes to sending SysEx bulk data. So if you encounter problems here, please try a different Interface 1st, before you blame ShruthiWaveGen. Setting the “export / send dithered 8bit” flag adds a simple LSB/2 FS/2 dither signal to the adapted / generated wave before it gets truncated to 8bit and exported / sent. This slightly reduces the audible effect of the 8bits quantization. If you love it gritty, just leave it off ;). With the "send .syx file" button you can send any previously saved or somewhere downloaded.syx file to the selected MIDI port.

I hope the rest of this little tool application is pretty self-explaining and you have a lot of fun with it, while creating crazy new waves for your Shruthi!


And the best at last :wink: :

Awefuckingsome !