A visual additive synthesizer

Screenshot of Canvas

Canvas (working title) is a visual additive synthesizer that is controlled by editing an image. Scribble on the canvas and use a variety of image filters to create new and interesting sounds. Canvas is heavily inspired by MetaSynth and Virtual ANS and aspires to offer an open source, cross-platform addition to the graphical synthesizer space.

Canvas currently uses 239 sine waves spaced at quarter tones, and offers rudimentary drawing features and several image-based audio filters such as reverb, chorus, and tremolo. Stereo is supported by using red and blue for the right and left channels, respectively. The sine waves can be morphed into other waveforms using phase distortion synthesis.

This software is built on PortAudio, libsndfile, SDL2, FFTW, stb, and NanoGUI-SDL.

Installation

For Windows, builds are provided on the Release page.

For Linux and macOS, you must build yourself using instructions below.

On Linux, you must also have the Zenity tool installed and in your PATH. Otherwise the "Browse" buttons will not work:

sudo apt install zenity  # Debian
sudo pacman -S zenity  # Arch

Building

Windows

You will need to install CMake and Visual Studio. The below instructions use VS 2019, but will likely work for older versions with appropriate minor changes. MinGW is not yet supported.

Download and unzip the following and place them somwhere safe:

  • ASIO SDK
  • FFTW3
  • libsndfile
  • Development libraries for SDL2, SDL2_image, and SDL2_ttf

The FFTW3 library needs a little preparation by generating a .lib file:

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
cd <path to FFTW3>
lib.exe /machine:x64 /def:libfftw3f-3.def

To build, run the following:

mkdir build
cd build

# For the -G option, use cmake --help and scroll down to the list of
# Visual Studio versions. Find the string that matches the one you currently
# have installed.
cmake .. -G "Visual Studio 16 2019" -A x64 \
    -DASIOSDK_ROOT_DIR=<path to ASIO SDK> \
    -DSDL2_LIBRARY=<path to SDL2>/lib/x64/SDL2.lib \
    -DSDL2_INCLUDE_DIRS=<path to SDL2>/include/ \
    -DSDL2_IMAGE_PATH=<path to SDL2_image> \
    -DSDL2_TTF_PATH=<path to SDL2_ttf> \
    -DSNDFILE_PATH=<path to libsndfile> \
-DFFTW_ROOT=<path to FFTW> \

cmake --build . --config Release

# NOTE: The following manual copies will be automated in CMake soon
cd Release
cp <path to FFTW3>/libfftw3f-3.dll .
cp <path to SDL2>/lib/x64/SDL2.dll .
cp <path to SDL2_image>/lib/x64/SDL2_image.dll .
cp <path to SDL2_image>/lib/x64/zlib1.dll .
cp <path to SDL2_ttf>/lib/x64/SDL2_ttf.dll .
cp <path to SDL2_ttf>/lib/x64/libfreetype-6.dll .
cp <path to libsndfile>/bin/sndfile.dll .

Then run ./Release/canvas.

Linux

Debian/Ubuntu:

sudo apt install build-essential cmake libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev portaudio19-dev libsndfile1-dev libfftw3-dev

Arch:

sudo pacman -S cmake sdl2 sdl2_image sdl2_ttf portaudio libsndfile fftw

Build on Linux:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..

The run ./canvas.

macOS

Install some dependencies:

brew install cmake sdl2 sdl2_image sdl2_ttf portaudio libsndfile

I had trouble with the fftw homebrew package (at least on M1), so here's how to build it yourself:

wget https://www.fftw.org/fftw-3.3.9.tar.gz
tar -xzf fftw-3.3.9.tar.gz
cd fftw-3.3.9
./configure --enable-float
make
sudo make install

To build:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make

Then run ./canvas.

Running tests

git lfs checkout
pytest tests --executable <executable>
Comments
  • Add auto-filter

    Add auto-filter

    As a user, I would like to apply a filter to audio with choice of LPF, BPF, HPF, and notch filters, with the cutoff modulated by an LFO.

    AC:

    • Auto-filter added to list.
    • Mode parameter has selection of LPF, BPF, HPF, notch.
    • Cutoff parameter
    • Resonance parameter
    • LFO rate
    • LFO depth
    • LFO shape
  • Add repeat effect

    Add repeat effect

    As a user, I would like to apply a repeat effect to audio similar to Ableton Live's Beat Repeat stock plugin (or a cruder version of it).

    AC:

    • Repeat effect popup added
    • "Length" parameter controls length of repeat
    • "Count" parameter controls number of counts
    • "Probability" parameter controls probability of repeat
  • Add basic integration pytests

    Add basic integration pytests

    • [x] Run tests in CI
    • [x] Test image to image, color should be preserved
    • [x] Test image to audio, audio should be non-silent
    • [x] Test audio to image, image should be non-blank
    • [x] Test audio to audio, audio should be non-silent
  • Add Windows CI

    Add Windows CI

    • [x] Download ASIO SDK
    • [x] Download FFTW
    • [x] Generate .lib file in FFTW
    • [x] Download libsndfile
    • [x] Download SDL2
    • [x] Download SDL2_image
    • [x] Download SDL2_ttf
    • [x] Configure CMake
    • [x] Build CMake
    • [x] Copy libraries to Release folder
    • [x] Check on a local Windows machine to ensure it runs
  • Windows support (no CI)

    Windows support (no CI)

    • [x] Fix FFTW linker issue
    • [x] Document process of running lib.exe in the README
    • [x] Fix PortAudio linker issue
    • [x] Fix other weird linker issue
    • [x] Copy DLLs into build directory post-build
  • Randomize initial phases of oscillators

    Randomize initial phases of oscillators

    As a user, I would like the initial phases of oscillators to be randomized to avoid a "laser" sound in audio export.

    Add --seed argument to turbo mode.

  • Turbo mode

    Turbo mode

    As a user, I would like a batch mode that lets me import or export sounds and images and apply filters to them.

    As a developer, I would like a command-line interface to assist with integration testing.

    Acceptance criteria:

    • [x] Refactor to separate App from loading and saving functionality
    • [x] App supports --batch command-line mode
    • [x] Batch mode supports image and sound import/export
    • [x] Batch mode supports filters via --filter argument: --filter subharmonics(0.5,0.3,0.2,0.1,true)
    • [x] Multiple filters supported: --filter reverb(0.5,0.4) --filter scale_filter(C#,harmonic_minor)
  • Load audio with FFT

    Load audio with FFT

    As a user, I would like to load audio spectrogram-style to create a replica of the input sound.

    AC:

    • [x] App::loadAudio loads audio using libsndfile
    • [x] Loaded audio is Hann-windowed by as many frames as there are pixels, and run through FFT using FFTW
    • [x] Magnitude spectrogram is converted from linear to log using triangular windows
    • [x] Log magnitude spectrogram is normalized and used as image
  • Fix double-sized window on macOS HiDPI

    Fix double-sized window on macOS HiDPI

    A macOS user on a HiDPI screen reported a window twice as large as it should be. Mouse events occur at half the coordinates of the actual mouse position, rendering the app nearly unusable.

  • Auto-speed setting in both turbo mode and GUI

    Auto-speed setting in both turbo mode and GUI

    As a GUI user, I would like audio import to have an "Auto speed" checkbox that results in the Speed slider being automatically set to match the speed of the audio.

    As a turbo mode user, I would like the absence of the -s --speed marker to indicate auto speed mode when both importing and exporting audio.

ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits
ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits

ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits. MIDI input to the plugin triggers a pulse with a parameterized size and shape. The pulse is then passed into a resonant filter which can be tuned to a specific frequency, or matched to the frequency of the incoming MIDI notes.

Sep 14, 2022
Synthesizer Modules and Audio Circuits

Dintree Synthesizer Modules and Audio Circuits 2020-07-14: You can now try Dintree modules within VCV Rack! I have created virtual versions of most mo

Sep 26, 2022
eSpeak NG is a compact open source software text-to-speech synthesizer for Linux, Windows, Android and other operating systems

eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.

Sep 29, 2022
Let’s Create a Speech Synthesizer

Speech Synthesizer Series Material for my video series about creating a peculiar English-language speech synthesizer with Finnish accent. Playlist: ht

Sep 3, 2022
Twist A node-based audio synthesizer written in C++
Twist A node-based audio synthesizer written in C++

Not maintained anymore! Twist A node-based audio synthesizer written in C++ Twist is the unexpected result of me trying to experiment with audio progr

Aug 29, 2022
Explore fractals in an audio-visual sandbox
Explore fractals in an audio-visual sandbox

Fractal Sound Explorer Explore fractals in an audio-visual sandbox Download executable on my itch.io page: https://codeparade.itch.io/fractal-sound-ex

Sep 29, 2022
A lightweight additive chiptune synthesizer (LV2 and Unity Plugin)

OvenMit Synthesizer kenakofer's first ever synthesizer! Coming initially out of BMusic's excellent tutoral series for lv2 synthesizers, the developer

Apr 18, 2022
This speech synthesizer is actually the SAM speech synthesizer in an ESP8266

SSSSAM Serial Speech Synthesizer SAM This speech synthesizer is actually the SAM speech synthesizer in an ESP8266. Where SAM was a software applicatio

Jul 30, 2022
Dataset Synthesizer - NVIDIA Deep learning Dataset Synthesizer (NDDS)
Dataset Synthesizer - NVIDIA Deep learning Dataset Synthesizer (NDDS)

NVIDIA Deep learning Dataset Synthesizer (NDDS) Overview NDDS is a UE4 plugin from NVIDIA to empower computer vision researchers to export high-qualit

Sep 30, 2022
4HP through hole version of the HAGIWO FM/additive/chord oscillator with mode switch and gain input.
4HP through hole version of the HAGIWO FM/additive/chord oscillator with mode switch and gain input.

HAGIWO 019/022/023 Triple Oscillator (FM/CHORD/ADDITIVE) 4HP through hole version of the HAGIWO FM/additive/chord oscillator with mode switch and gain

Sep 8, 2022
ORB-SLAM3 is the first real-time SLAM library able to perform Visual, Visual-Inertial and Multi-Map SLAM with monocular, stereo and RGB-D cameras, using pin-hole and fisheye lens models.
ORB-SLAM3 is the first real-time SLAM library able to perform Visual, Visual-Inertial and Multi-Map SLAM with monocular, stereo and RGB-D cameras, using pin-hole and fisheye lens models.

Just to test for my research, and I add coordinate transformation to evaluate the ORB_SLAM3. Only applied in research, and respect the authors' all work.

Jul 11, 2022
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.
RRxIO - Robust Radar Visual/Thermal Inertial Odometry: Robust and accurate state estimation even in challenging visual conditions.

RRxIO - Robust Radar Visual/Thermal Inertial Odometry RRxIO offers robust and accurate state estimation even in challenging visual conditions. RRxIO c

Sep 19, 2022
Visual Leak Detector for Visual C++ 2008-2015

Visual Leak Detector Introduction Visual C++ provides built-in memory leak detection, but its capabilities are minimal at best. This memory leak detec

Sep 23, 2022
Juno 60 emulation synthesizer

Hera Juno 60 emulation synthesizer, with support of MPE. About This synthesizer is considered of alpha quality currently. It can produce some decent s

Sep 22, 2022
Wasserstein Inverted Frequency Modulation Synthesizer

Wasserstein Inverted Frequency Modulation Synthesizer 発表資料: https://speakerdeck.com/fadis/wassersteinni-fmyin-yuan 発表動画: https://youtu.be/VF9VX01QYs0

May 25, 2022
ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits
ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits

ChowKick is a kick drum synthesizer plugin based on creative modelling of old-school drum machine circuits. MIDI input to the plugin triggers a pulse with a parameterized size and shape. The pulse is then passed into a resonant filter which can be tuned to a specific frequency, or matched to the frequency of the incoming MIDI notes.

Sep 14, 2022
Synthesizer Modules and Audio Circuits

Dintree Synthesizer Modules and Audio Circuits 2020-07-14: You can now try Dintree modules within VCV Rack! I have created virtual versions of most mo

Sep 26, 2022
eSpeak NG is a compact open source software text-to-speech synthesizer for Linux, Windows, Android and other operating systems

eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.

Sep 29, 2022
Lo-Fi SAMD21 based mini chip tune synthesizer - Seeed Studio - Seeeduino XIAO arduino project
Lo-Fi SAMD21 based mini chip tune synthesizer - Seeed Studio - Seeeduino XIAO arduino project

samd21_mini_synth Lo-Fi SAMD21 based mini chip tune synthesizer Seeed Studio - Seeeduino XIAO arduino project link to the video Description This time

Sep 23, 2022
A CPU implemented in an analog modular synthesizer
 A CPU implemented in an analog modular synthesizer

A CPU implemented in an analog modular synthesizer This runs in the VCV Rack eurorack simulator. I wrote a thread explaining the CPU on twitter and a

Sep 22, 2022