Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/joht/speclet

Audio Spectrum Analyzer using Fourier- and Wavelet-Transformation
https://github.com/joht/speclet

analyzer audio dsp fourier juce spectrum uncertainty-principle vst vst3 wavelet

Last synced: 2 months ago
JSON representation

Audio Spectrum Analyzer using Fourier- and Wavelet-Transformation

Awesome Lists containing this project

README

        

# Speclet

VST Audio Spectrum Analyzer Plugin using Fourier- and Wavelet-Transformation.

- (c)2011 by Johannes Troppacher (Austria)
- For graduation at [Hochschule Mittweida - University of Applied Science](https://www.hs-mittweida.de/en) (Germany)
- Paper (german): [Echtzeitspektralanalyse auf Basis der Fourier- und Wavelet-Transformation implementiert als VST-Plugin](https://monami.hs-mittweida.de/frontdoor/deliver/index/docId/3216/file/J.Troppacher_2011_Diplomarbeit.pdf)
- License: [GNU GENERAL PUBLIC LICENSE v3](./LICENSE)
- For prototyping and experimentation without programming visit [JoWa Wavelet Library in Native Instruments Reaktor User Library](https://www.native-instruments.com/en/reaktor-community/reaktor-user-library/entry/show/11541)

## 🖥 User Interface

## 📖 User Guide
Have a look at the [User Guide](./USERGUIDE.md) for further screenshots and to get started using the analyzer.

## 🏗 Build the Project

### Prerequisites
- [Installing GIT](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- [Installing CMake](https://cmake.org/install/)
- [Download Ninja](https://github.com/ninja-build/ninja/releases)
- (Windows only) [Install Visual Studio Build Tools](https://visualstudio.microsoft.com/de/downloads/?q=build+tools) with Visual Studio Installer, select Desktop Development for C++ and add all optional "Clang" components
- (Optional) [Download Visual Studio Code](https://code.visualstudio.com/download)

### Clone
Download the project as [zip](https://github.com/JohT/speclet/archive/refs/heads/main.zip)
or clone it using GIT:
```shell
git clone https://github.com/JohT/speclet.git
```

### Command Line

See [COMMANDS.md](./COMMANDS.md) if you prefer to use the command line.

### Visual Studio Code (MacOS)
- [Using Clang in Visual Studio Code](https://code.visualstudio.com/docs/cpp/config-clang-mac)
- Install recommended extensions specified in [speclet.code-workspace](./speclet.code-workspace)
- Select the kit that fits to your machine (`STRG+SHIFT+P`, Type "CMAKE kit")

### Visual Studio Code (Windows)
- Install [Visual Studio Build Tools](https://visualstudio.microsoft.com/de/downloads/?q=build+tools) with Visual Studio Installer, select Desktop Development for C++ and add all optional Clang Features
- Install recommended extensions specified in [speclet.code-workspace](./speclet.code-workspace)
- Select the kit that fits your machine (e.g. amd64) (`STRG+SHIFT+P`, Type "CMAKE kit").
Successfully tested with "Visual Studio Build Tools 2022 Release - amd64".

## 🩺 Testing

### Run Unit Tests within your command line interface (CLI):
```shell
ctest --test-dir build/test
```

### Run Unit Tests in Visual Studio Code
Build the project and use extension "matepek.vscode-catch2-test-adapter" to show all the Catch2 CTest cases
under "Testing" (left "activity bar", below extensions button).

### Build AudioPluginHost for exploratory testing
```shell
cmake.exe --build build --config Debug --target AudioPluginHost
```

## 🛠 Used Tools

Modernized 2022 using the following tools:

- [The LLVM Compiler Infrastructure](https://github.com/llvm/llvm-project)
- [Ninja](https://github.com/ninja-build/ninja)
- [CMake](https://gitlab.kitware.com/cmake/cmake)
- [Setup-free CMake dependency management](https://github.com/cpm-cmake/CPM.cmake)
- [Plugin Validator](https://github.com/Tracktion/pluginval)

This version is not ready yet.
It contains the code from back then, that doesn't compile any more.
It also contains the plugin made with the tutorial [Learn Modern C++ by Building an Audio Plugin (w/ JUCE Framework) - Full Course YouTube](https://www.youtube.com/watch?v=i_Iq4_Kd7Rc&list=PLi4rQ_T_X31Gd4pyUbvPltTVSyw8v_yYT&index=5&t=1051s)
as a template to start the modernization.

## 📚 Used Libraries

This plugin was made in 2011 (modernized 2022) using the following frameworks and libraries:

- VST SDK 2.4 rev2 (2011)
by Steinberg
http://www.steinberg.net/en/company/developer.html
visit the link above for licensing

- VST 3 Audio Plug-Ins SDK (2022)
by Steinberg
http://www.steinberg.net/en/company/developer.html
visit the link above for licensing

- JUCE
by Raw Material Software (2011)
http://www.rawmaterialsoftware.com/juce (2011)
License: https://github.com/juce-framework/JUCE/blob/master/LICENSE.md (2022)

- FFTW
by MIT (Matteo Frigo and Steven G. Johnson)
http://www.fftw.org
GNU General Public License

- WAVE++
by Ryerson Computrational Signal Analysis Group
(c) 1999 by S. E. Ferrando, L. A. Kolasa and N. Kovacevic
https://math.ryerson.ca/~lkolasa/CppWavelet.html
"
Permission is granted for anyone to copy, use, or modify these
programs and documents for purposes of research or education,
provided this copyright notice is retained, and note is made of
any changes that have been made. Use for commercial applications is only
allowed by permission of the copyright holders.
"

- Implementation of C++20's std::span for older compilers
(c) 2019 by Tristan Brindle
https://github.com/tcbrindle/span
Boost Software License 1.0

## Trademarks

- Steinberg is a registered trademarks of Steinberg Media Technologies GmbH.

## 🔎 References

### Digital Signal Processing
- [⭐ Window Functions and Their Applications in Signal Processing (PDF)](https://library.oapen.org/handle/20.500.12657/41686)
- [Understanding FFT Windows (PDF, 2013)](https://www.egr.msu.edu/classes/me451/me451_labs/Fall_2013/Understanding_FFT_Windows.pdf)
- [Comparison of Matching Pursuit Algorithm with Other Signal Processing Techniques for Computation of the Time-Frequency Power Spectrum of Brain Signals](https://www.jneurosci.org/content/36/12/3399)
- [Fourier uncertainty principle](https://www.johndcook.com/blog/2021/03/17/fourier-uncertainty-principle)
- [JoWa Wavelet Library in Native Instruments Reaktor User Library](https://www.native-instruments.com/en/reaktor-community/reaktor-user-library/entry/show/11541)

### Templates and Examples
- [⭐ Pamplejuce](https://github.com/sudara/pamplejuce)
- [Cross-platform CI for JUCE audio plugins with Github Actions](https://github.com/maxwellpollack/juce-plugin-ci)
- [JUCE CMake Repo Prototype](https://github.com/eyalamirmusic/JUCECmakeRepoPrototype/blob/master/CMakeLists.txt)
- [Example using CPM package manager with JUCE](https://github.com/robbert-vdh/diopser/blob/master/CMakeLists.txt)
- [CLAP CLever Audio Plugin](https://github.com/free-audio/clap)
- [Integration of Catch, CMake and CMake CodeCoverage](https://github.com/fkromer/catch_cmake_coverage)
- [The Stochas Sequencer](https://github.com/surge-synthesizer/stochas)
- [JUCE 6 Preview - Demo Project](https://github.com/tobanteAudio/juce-6-demo)

### Performance Tracing/Logging (Profiling, Instrumentation)
- [Google Chrome Browser Trace Log Viewer](chrome://tracing/)
- [The Cherno - VISUAL BENCHMARKING in C++ (YouTube)](https://www.youtube.com/watch?v=xlAH4dbMVnU&t=197s)
- [⭐ Instrumentor.h (Code Snippet)](https://gist.github.com/TheCherno/31f135eea6ee729ab5f26a6908eb3a5e)
- [Instrumentor.h David Churchill Mod (Code Snippet)](https://pastebin.com/qw5Neq4U)
- [Instrumentor.h Mattias Aronsson Mod](https://gist.github.com/maronsson/073840bf94e4d6df94c5f294a6e96e03)

### Testing
- [⭐ CMake's CTest](https://cmake.org/cmake/help/latest/manual/ctest.1.html)
- [⭐ Catch2 CMake Integration](https://github.com/catchorg/Catch2/blob/devel/docs/cmake-integration.md)
- [⭐ Plugin Validator](https://github.com/Tracktion/pluginval)
- [Catch2 Data Generators](https://github.com/catchorg/Catch2/blob/devel/docs/generators.md)
- [Coverage for tests with cmake and catch2](https://stackoverflow.com/questions/65603144/how-to-get-coverage-for-tests-with-cmake-and-catch2)
- [Findcodecov.cmake](https://github.com/catchorg/Catch2/blob/devel/CMake/Findcodecov.cmake)

### Windows Build
- [Visual Studio Build Tools Download](https://visualstudio.microsoft.com/de/downloads/?q=build+tools)

### Installation
- [VST plug-in locations on Windows](https://helpcenter.steinberg.de/hc/en-us/articles/115000177084-VST-plug-in-locations-on-Windows)
- [VST plug-in locations on Mac OS X and macOS](https://helpcenter.steinberg.de/hc/en-us/articles/115000171310-VST-plug-in-locations-on-Mac-OS-X-and-macOS)
- [Where are third-party Audio Units plug-ins installed on Mac?](https://support.apple.com/en-al/HT201532)

### Other
- [⭐ std::span implementation for C++11 and later](https://github.com/tcbrindle/span)
- [C++ Singleton](https://stackoverflow.com/questions/1008019/c-singleton-design-pattern)
- [10 Cmake Tips & Tricks](https://medium.com/codex/10-cmake-tips-tricks-7f00d407923d)
- [Reference to non-static member function must be called](https://stackoverflow.com/questions/26331628/reference-to-non-static-member-function-must-be-called)
- [Pointer-to-Member Function](http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm)
- [Commit Message Guidelines](https://gist.github.com/robertpainsi/b632364184e70900af4ab688decf6f53)
- [Undefined symbol _kIOMainPortDefault](https://forum.juce.com/t/juce-6-1-3-undefined-symbol-kiomainportdefault/49335/9)
- [CheckTypeSize (FFTW failed for multiple architectures)](https://cmake.org/cmake/help/latest/module/CheckTypeSize.html)
- [Article CMake Ninja Combo: The Gist](https://www.incredibuild.com/blog/cmake-ninja-combo-the-gist)