Share My Creation Mini Synth

Made a mini synth in B4J to investigate how it works with generated wave visualization.

Basically it has two oscillators (osc a and b) to generate signals according to a waveform shape of sine, pulse, saw and random noise and its frequency is determined by the music note being played. Each oscillator actually consists of two oscillators which will generate signals with a little bit different frequency, controlled by split, in order to generate more frequency components. The signals then mix together by add (osc mix) and/or multiply (ring mod). The mixed signal goes to a filter to change its frequency component, and then goes to envelope amp to change its volume.

The attack, decay, and release of the envelope amp controls that, after a key is pressed how long the volume will reach to max volume starting from zero, then how long it will decay to the sustain volume, and then how long it will decrease to zero after the key is released, respectively. The sustain means the volume level if the key is keeping pressed. Put sustain to zero will make sound release even the key is still being pressed, like a piano.

There is another oscillator (lfo) which will generate a sine wave in a very low frequency and use this sine wave to control the frequency of the two oscillators mentioned above, the cutoff of the filter, and the volume, to generate a vibrate effect.

With these limited controls, the number of sound types generated are also quite limited. However, it is interesting to see how signal changes through the visualization with limited parameters.

Right click on the knob control will reset a parameter to its default values.

Try: java -jar BxSynthMini.jar (Windows, Java 1.8)

Edit: Polyphonic version updated, see and use jar at post #11 with bug fixed and multi-input support.



  • BxSynthMini.jar
    369.4 KB · Views: 167
Last edited:


Licensed User
Longtime User

How did you implement the Filter? I have been trying to implement various IIR filters on audio files using several different code bases and have not found one yet that is convincing/glitch free. Probably due to my lack of understanding, I will keep trying, but curious how you implemented yours.
Last edited:


Active Member
Licensed User
Longtime User
@stevel05 Nothing special from conversion of all those public code, one thing to pay attention that the parameter must not be modified during processing or strange audio will be generated, better update parameters just before the processing.