3D Spectrogram Visualizer

Option FlagDefault ValueDescription--helpDisplays help message--fft_size1024Sets the size of the FFT window--fft_overlap0Sets the number of sample overlap for sequential FFT windows--fft_window_typerectangleSets the window function for the FFT, can be "rectangle" or "hanning" currently--display_compression1.0Compresses the display of the FFT. Sets a hard cieling on spectral energy at this value times the max energy at any bin in the frequency-time domain. Other values are linearly scaled towards this cieling.--spectrum_display_percent1.0Changes the amount of frequency bins to display to this value times the number of FFT output bins. Useful for creating better visualizations in a linear scale. Will be less useful once logarithmic frequency axis functionality is implemented.--vertex_shader_file_pathREQUIREDPath to the GLSL file to use as the vertex shader--fragment_shader_file_pathREQUIREDPath to the GLSL file to use as the fragment shader--audio_file_pathREQUIREDPath to the audio file to play/visualize (currently must be a WAV file)

Summary of Accomplishments

Used OpenGL and other technologies to create a synchronized, scrolling 3D spectrogram to visualize an audio file. Created command line interface to change various visualization options. Learned loads about scientific computing using OpenGL, knowledge that will be extremely useful for my research efforts in the future.

Known Issues and Future Work

When the texture representing the spectral energy is scrolling, the spectral history (which should be static) seems to jump around and vary. I am not entirely sure what is causing this, but I am looking into it and it will be fixed in a later release. Additionally, I am looking in to support for logarithmic frequency axis and different input audio formats. Eventually I would like this software to be able to visualize FFT data of real-time audio input for use as a plug-in for digitial audio workstations. Finally, this software is currently only tested on Linux.

Artifact

Used TechSmith Jing to capture a short, (low FPS) video of my spectrogram visualizer playing the Aphex Twin track Pulsewidth.


Links and References

Source Code (github)
JUCE Home Page
Kiss FFT
OpenGL Scientific Programming Tutorial

ncG1vNJzZmirY2LCtHnWnqqtZWJjrq6t2ailmq%2BjY7CwuY6wnJtloKS%2FtbLOpaCoZaOprrW1wminmp%2BVqHx0sNKpnJysoqR8qrrDnq9noKSiuQ%3D%3D

 Share!