Giter VIP home page Giter VIP logo

austensatterlee / vosimsynth Goto Github PK

View Code? Open in Web Editor NEW
45.0 4.0 4.0 35.32 MB

Modular VST environment for building synthesizers and audio processors.

License: GNU General Public License v3.0

C++ 65.91% C 30.72% Python 0.20% CMake 0.14% Objective-C 0.12% Objective-C++ 2.49% R 0.03% Makefile 0.02% PHP 0.17% Lex 0.02% Yacc 0.05% Batchfile 0.01% Shell 0.01% Vim Script 0.11%
processing-graph synthesizer vst audio instrument opengl

vosimsynth's Introduction

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

vosimsynth's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

vosimsynth's Issues

vst crashes my DAW

Hello.

I wanted to try VOSIMSynth but it crashes both of my DAWs (Studio One & Tracktion Waveform) as the title already mentions. I tried both versions, the 32bit as well as 64bit. I did not build it myself but instead downloaded the latest (.dll) releases. Is this project still maintained somehow because I saw that it wasnt updated in almost 3 years if I m not mistaken.

Are there any working releases somewhere?

Regards,
Michael

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.