Welcome to our multifunctional synthesizer written entirely in Java! This was a project originally done by Kyle Wade, Delvin Bajoua, Jerry Qiao, and Youssef Georgy. After mathematically learning about Fourier Transforms one class, we thought it would be interesting to create a synthesizer to experience Fourier Transforms in real time through audio and visual representation. Audio Synthesizers appear in the world of music production and more, as they can be used for modeling sounds from real-world applications and even creating automation tools for speech recognition programs. This application provides an intuitive way of visualizing waveforms using amplification and attenuation of four different oscillators consisting of sine, square, saw, and triangle waveforms! Read this write up to find a demo of the app and a tutorial on how to set it up.
User-friendly interface
Frequency Adjuster
Amplitude Adjuster
Signal Visualization graph in time domain
Signal Visualization graph in frequency domain (Fourier Transform)
Wave Selection Drop Down (Sine, Square, Triangle, and Saw)
Mute Capability
Key Visualizer
If we add multiple waves together, then the waves are added together in the time domain. However, while it is easy to add waves in the time domain, it is nearly impossible to deconstruct the wave through just its time domain graph. The Fourier Transform solves this issue through taking a signal in the time domain and transforming into its frequency domain counterpart. This is so when multiple waves are combined, it is still possible to extract the waves through their Fourier coefficient peaks in their Fourier series. Higher frequencies result in Fourier coefficients moving more to the right, and lower frequencies result in Fourier coefficients moving more to the left. The Fourier Transform graph featured in this audio synthesizer is the result of a function of each oscillator’s amplitude and pitch. When the frequency becomes higher, the Fourier coefficient moves more to the right on the frequency domain graph, and when the amplitude becomes higher, the Fourier coefficient becomes larger, resulting in a higher peak in the frequency domain graph. Similarly, when the frequency becomes lower, the Fourier coefficient moves more to the left on the frequency domain graph, and when the amplitude becomes lower, the Fourier coefficient becomes lower, resulting in a lower peak in the frequency domain graph. Because of this, it becomes much easier to deconstruct the waveform into its different wave components.
https://www.youtube.com/watch?v=Y9EVM5ODyVc
DOWNLOAD THE SYNTHESIZER FILE HERE: https://www.dropbox.com/sh/idttyvt6gaukmj4/AABYpMo82biC7avYnSQZpHdXa?dl=0
Make sure to extract the jar files to your Desktop and have Java installed on your computer! If you are using Windows, run the ECE45Windows.jar file. If you are using MacOS, run the ECE45MacOS.jar file. On MacOS if you get an unidentified developer error, simply click ok. Next highlight the Jar File then click open from the dropdown, it will now open successfully.
You can also build the project yourself by cloning the repository and constructing a .jar file, but it is highly advised to just simply download the .jar files above.
To play a sound:
Select Q, W, E, R, T, Y, U, I, O, P, [, or ] to play different requencies.
You can hold a note while changing your oscillators (wave-form, frequency, and amplitude).
To change Wave type:
Select the drop-down in the box of choice.
Click on your desired wave-form.
To change Frequency / Pitch:
While clicking the pitch box, drag your mouse up or down to your desired value.
To change Amplitude:
While clicking the amplitude box, drag your mouse up or down to your desired value.
To mute a signal:
Click the mute button located inside the signal box of your choice.
To unmute a signal:
Increase the amplitude of the signal of choice to unmute.
Thank you to “G223 Productions” for helping with the project framework as well as libraries and functionality:
https://www.youtube.com/channel/UCjGTOnMHKk73DC9BTsf2c9Q
Thank you to LWJGl Library used within the project:
Specifications: Zip bundle version 3.1.6, Contents: OpenAL
https://www.lwjgl.org/customize
Helpful Conceptual Review:
https://learningsynths.ableton.com/en/playground
Sound Synthesis Theory Conceptual Article:
https://en.wikibooks.org/wiki/Sound_Synthesis_Theory/Introduction
Enjoy!