Coder Social home page Coder Social logo

artfwo / andes Goto Github PK

View Code? Open in Web Editor NEW
109.0 12.0 11.0 215 KB

Experimental sound synthesiser based on Perlin noise

Home Page: https://artfwo.github.io/andes/

License: GNU General Public License v3.0

C++ 66.03% Makefile 15.81% C 12.85% Objective-C++ 4.84% R 0.46%
vst juce perlin-noise gradient-noise c-plus-plus synthesizer multifractal

andes's Introduction

Build Status Build status

andes

Andes is a digital software synthesizer based on Perlin noise. It is still in early stages of development and doesn't have a lot of features yet.

The core of Andes is an original oscillator which uses a 1-dimensional version of Perlin noise to produce sound.

The oscillator design is described in the LAC 2018 paper Using Perlin noise for sound synthesis. It is not yet finalized, so please keep in mind that things may break in the future versions. Do not use this plugin in production. :)

Copyright (C) 2017 Artem Popov [email protected]

Distributed under GPLv3 license, please see LICENSE file in the top dir.

andes's People

Contributors

artfwo avatar kant avatar

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  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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

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

andes's Issues

Andes doesn't compile

% cd Builds/LinuxMakefile
% CONFIG=Release64 make -j2
Makefile:140: warning: overriding recipe for target '/'
Makefile:133: warning: ignoring old recipe for target '/'
Makefile:147: warning: overriding recipe for target '/'
Makefile:140: warning: ignoring old recipe for target '/'
mkdir: missing operand
Try 'mkdir --help' for more information.
Makefile:164: recipe for target '/AndesSlider_6859167.o' failed
make: [/AndesSlider_6859167.o] Error 1 (ignored)
mkdir: missing operand
Try 'mkdir --help' for more information.
Compiling AndesSlider.cpp
Makefile:169: recipe for target '/AndesLookAndFeel_ce944082.o' failed
make: [/AndesLookAndFeel_ce944082.o] Error 1 (ignored)
Compiling AndesLookAndFeel.cpp
In file included from ../../Source/AndesSlider.cpp:19:0:
../../Source/../JuceLibraryCode/JuceHeader.h:17:49: fatal error: juce_audio_basics/juce_audio_basics.h: No such file or directory
 #include <juce_audio_basics/juce_audio_basics.h>
                                                 ^
compilation terminated.
Makefile:164: recipe for target '/AndesSlider_6859167.o' failed
make: *** [/AndesSlider_6859167.o] Error 1
make: *** Waiting for unfinished jobs....
In file included from ../../Source/AndesLookAndFeel.h:21:0,
                 from ../../Source/AndesLookAndFeel.cpp:19:
../../Source/../JuceLibraryCode/JuceHeader.h:17:49: fatal error: juce_audio_basics/juce_audio_basics.h: No such file or directory
 #include <juce_audio_basics/juce_audio_basics.h>
                                                 ^
compilation terminated.
Makefile:169: recipe for target '/AndesLookAndFeel_ce944082.o' failed
make: *** [/AndesLookAndFeel_ce944082.o] Error 1

Yes I did git submodule update --init --recursive.

[Feature request] StudioRack integration

It's an open-source plugin manager called StudioRack:
https://github.com/studiorack

The aim of the project is to provide a free open-source way to manage plugin dependencies and their versions. It would involve the following steps:

Publish a Github release containing the plugin source along with metadata plugins.json
Tag your Github repository with studiorack-plugin so it can be discovered
Wait for the studiorack-registry to index your plugin (every 24 hours)
Check the registry feed for your plugin to appear

Unit-length waveform period (alternating signs for gradients)

Using alternating signs for even & odd gradients in the table could solve 2 problems:

  1. Cusps and distortion when the outermost gradients are either both positive or both negative.
  2. We can use only 2 gradients instead of 3 to create one whole symmetric oscillation. To keep the resulting sound loud, normalization (issue #3) should be implemented as well.

LV2 plugin

See if Andes can be built as an LV2 plugin.

.clap plugin

as you use JUCE, can you provide a clap plugin?

Output level normalization

Output level for Perlin noise / fBm is wildly different depending on synth settings. Ideally it should be constant so we always get the same volume for any X or Y.

Possible solutions to explore:

  • When regenerating seed, pre-calculate global optimums for every octave for all 4 gradient arrays using either brute force or optimization method like simulated annealing.
  • Now that Andes uses simplex noise with a better analytical derivative, peaks can be calculated precisely by solving N'(x)=0 equation and substituting the solution in the noise function.

Warping

Perlin noise looks interestingly different when the coordinates are randomly modified with a noise function. This approach, called warping or turbulence could be implemented in Andes for extra sonic possibilities.

Long-term, this can help make Andes a full-fledged multifractal sound synth. And possibly help get rid of pseudo-3D coordinate parameters currently used to alter the timbre.

Warping formula for a basic implementation could look like noise(offset + noise(offset + a)), where a is an arbitrary parameter.

Simplex noise

Explore sonic character of simplex noise and see if it fits into the synth.

Negative array indexing bug

Unfortunately I haven't figured out how to "immediately" reproduce this bug, but I believe the Noise::gen method has a math bug that is causing negative array indexing in Noise::gen1.

// line of code causing array index out of bounds
// z1 is a very large negative number (e.g. -187420688)
g1 = gradients[z1];

If you turn warping, octaves and persistence all the way up, and alternate between modulating torsion with the mouse and spam clicking on the randomize button, you'll be able to (eventually) reproduce it.

What I think could be happening is that in the loop that iterates through the octaves, there is some sort of compound "rounding" (e.g. casting float to int) issue that gets worse each time through the loop because the negative array indexing only happens after a few successful iterations through the octave loop.

Let me know if you have trouble reproducing this. I want to figure this out but... it's almost 4am ๐Ÿ˜ด

Aliasing

The sound of noise is susceptible to aliasing at higher frequencies.

Monophonic mode (legato)

Implement monophonic mode. Look into Synthesiser::findFreeVoice() for possibilities of implementing high/low/last monophonic modes.

Implement legato (glide duration) parameter.

ADSR generator

Generic ADSR envelope generator to use with volume and synth parameters modulation.

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.