All Projects → austensatterlee → VOSIMSynth

austensatterlee / VOSIMSynth

Licence: GPL-3.0 License
Modular VST environment for building synthesizers and audio processors.

Programming Languages

C++
36643 projects - #6 most used programming language
c
50402 projects - #5 most used programming language
Objective-C++
1391 projects
python
139335 projects - #7 most used programming language
PHP
23972 projects - #3 most used programming language
CMake
9771 projects

Projects that are alternatives of or similar to VOSIMSynth

Andes
Sound synthesiser based on Perlin noise
Stars: ✭ 69 (+68.29%)
Mutual labels:  synthesizer, vst
Webaudiofont
Use full GM set of musical instruments to play MIDI and single sounds or effects. Support for reverberation and equaliser. No plugins, no Flash. Pure HTML5 implementation compatible with desktop and mobile browser. See live examples.
Stars: ✭ 600 (+1363.41%)
Mutual labels:  instrument, synthesizer
Adlplug
FM Chip Synthesizer — OPL & OPN — VST/LV2/Standalone
Stars: ✭ 249 (+507.32%)
Mutual labels:  synthesizer, vst
Amsynth
Analog Modelling Synthesizer
Stars: ✭ 313 (+663.41%)
Mutual labels:  synthesizer, vst
AtomSynth
A modular synthesizer built using the juce api.
Stars: ✭ 20 (-51.22%)
Mutual labels:  synthesizer, vst
Audiobench
Open source modular synthesizer
Stars: ✭ 63 (+53.66%)
Mutual labels:  synthesizer, vst
Dx7 Supercollider
My accurate Yamaha DX-7 clone. Programmed in Supercollider.
Stars: ✭ 395 (+863.41%)
Mutual labels:  instrument, synthesizer
Axiom
A powerful realtime node-based audio synthesizer.
Stars: ✭ 599 (+1360.98%)
Mutual labels:  synthesizer, vst
aeolus plugin
Pipe organ synthesizer (VST plugin)
Stars: ✭ 38 (-7.32%)
Mutual labels:  synthesizer, vst
Sonic Pi
Code. Music. Live.
Stars: ✭ 8,736 (+21207.32%)
Mutual labels:  instrument, synthesizer
Awesome Music Production
A curated list of software, services and resources to create and distribute music.
Stars: ✭ 340 (+729.27%)
Mutual labels:  instrument, synthesizer
Main-Supercollider-Files
my supercollider codes, version history is at the branches
Stars: ✭ 21 (-48.78%)
Mutual labels:  instrument, synthesizer
Jssynth
Make music in your browser with this synthesizer and sequencer
Stars: ✭ 25 (-39.02%)
Mutual labels:  instrument, synthesizer
Kickmess
Kickmess - A kick drum synthesizer plugin
Stars: ✭ 33 (-19.51%)
Mutual labels:  synthesizer, vst
glicol
(Audio) graph-oriented live coding language and music DSP library written in Rust
Stars: ✭ 853 (+1980.49%)
Mutual labels:  instrument, synthesizer
lingot
Musical instrument tuner
Stars: ✭ 54 (+31.71%)
Mutual labels:  instrument
prototracker-modular
A modular synth tracker
Stars: ✭ 44 (+7.32%)
Mutual labels:  synthesizer
tsunami
A simple but powerful audio editor
Stars: ✭ 41 (+0%)
Mutual labels:  synthesizer
AudioPlugSharp
Easily create VST (VST3) audio plugins in C# .NET
Stars: ✭ 32 (-21.95%)
Mutual labels:  vst
vult
Vult is a transcompiler well suited to write high-performance DSP code
Stars: ✭ 316 (+670.73%)
Mutual labels:  synthesizer

VOSIMSynth

Find latest builds using the below AppVeyor badge
Build status

VOSIMSynth is a fully modular audio synthesizer with a focus on speed, audio quality, and ease of use.

Design Goals

  • Speed. The real-time audio code includes very few dynamic memory allocations (including usage of STL containers), and no dynamic memory allocations in the hot path. Communication with the GUI even uses lock-free queues to minimize the chance of latency spikes. Benchmarking code is included for many of the real-time audio components.
  • Audio Quality. Band-limited waveforms are generated during compilation and are resampled on-the-fly using massively oversampled sinc kernels to preserve fidelity at different pitches. To keep things speedy, the waveforms are first resampled to each octave during initialization. When playing a note, the waveform closest in size is used for further resampling to minimize convolution length.
  • Flexibility. Any output may be connected to any input. Even feedback loops are permissible as long as a the unit delay is inserted somewhere in the loop.
  • Extensibility. New units can be easily created by deriving from the Unit class. Macros are used to achieve a certain degree of reflection to automate things like voice cloning and serialization.

GUI Features

  • Automatic wire routing. Wires route themselves to their destination with the objective of minimizing their length and avoiding overlap with other wires.
  • Style customization. The styling of most GUI components may be customized in the settings menu.
  • Resizable. The GUI generated with vector graphics, and so the window may be freely resized.

VOSIMSynth's UI strives to make the common use case simple (and default) while allowing flexibility to those who want to delve into the details.

For example, by default, an envelope's attack phase is triggered by a MIDI noteOn event, and their release phase by a MIDI noteOff event. However, an arbitrary signal can be hooked up to the envelope's "gate" input in order to override that behavior. The envelope will automatically detect rising and falling edges of the gate signal in order to trigger an attack and release phases. This allows envelopes to be triggered and released by LFO's, MIDI CC values, other envelopes, or any other signal you feel like using.

Directory Structure

The VOSIMLib directory contains the core code for the real-time audio thread. It creates and maintains the signal flow graph and contains all of the DSP code for each unit. It has no dependency on the VOSIMSynth directory, so it may be compiled independently and used in other projects to quickly create processing graphs that may be edited during run-time.

The VOSIMSynth directory contains the application/VST code, including the GUI.

Compatibility

Due to a small chunk of platform-specific GUI code, VOSIMSynth is only compatible with Windows, at least for the moment. The rest of the code has been written with platform independence in mind, and porting to other environments is planned.

Dependencies

Most of the dependencies are included in the repository. Be sure to grab all the submodules, either by cloning the repo recursively, or running:

git submodule update --init --recursive

The dependencies that you are responsible for (i.e. not included in the repo) are listed below.

Boost

VOSIMSynth depends on some components of the Boost library. Prior to running CMake, set the BOOST_ROOT environment variable to the location where Boost lives, or simply run cmake-gui . in the build directory and configure the build options graphically.

Python + NumPy + SciPy

VOSIMSynth requires some wavetables to be pre-generated before being built. These are massively oversampled windowed sinc filters that are used to perform interpolation, filtering, and resampling during runtime.

A python script will be executed automatically during the build phase in order to generate this data. You must have numpy and scipy installed in order to execute the script.

If you are having trouble installing these dependencies on Windows, check out Christoph Gohlke's awesome collection of windows binaries. Download the appropriate versions of NumPy and SciPy for your system, then install them with pip install <path_to_whl_file>.

Build

VOSIMSynth uses CMake to generate build scripts. It has been tested with Visual Studio 2015 and Visual Studio 2017.

For example, to generate the x86 project files for Visual Studio 2015 inside a folder named "_build32":

mkdir _build32 
cd _build32
cmake .. -G "Visual Studio 14 2015"

To configure the build (e.g. to set up the directories your dependencies live in), run

cmake-gui .

You can also pre-configure the build using environment variables.

After successfully generating the project files, you may open the solution using Visual Studio and work normally, ignoring CMake ever existed,

Alternatively, build directly from the command line:

cmake --build . --config Release
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].