Code Monkey home page Code Monkey logo

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

LV2 plugin

See if Andes can be built as an LV2 plugin.

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.

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 ๐Ÿ˜ด

ADSR generator

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

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.

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.

Simplex noise

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

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.

Monophonic mode (legato)

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

Implement legato (glide duration) parameter.

Aliasing

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

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.