Skip to content

March 2017: Maximilian Roadmap

Simon Katan edited this page Mar 29, 2017 · 21 revisions

Repository management

  • factor out core code to be included in "main" and "ofx" repositories.
  • remove any binary files from the repository (🔵 adding today)
  • Is it possible to merge the "fish police" branch (🔴 No)
  • Using cmake would expedite inclusion in other libraries (eg Rapid-Mix, 🔴 No)

New features

  • Apparently there is some code on gitorious with a less permissive license. Can we merge that, or include it as a submodule?
  • Integrate biquad into maxi functions? (🔵 adding today)

MaxiLib aka maximJS

  • What is the name of this library?
  • Why are there two versions on CodeCircle?
  • Adjust Emscripten compile to set Modularize=1.
  • Add date/version output to MaxiLib
  • Integrate audio input into maxi functions.
  • Is it possible to have the C++ and JS versions share a code base?
  • Maxilib issues from gitlab

Simon's notes on maximJs

Code consistency & syntax

maxiEnvelope, maxiEnv
  • combine into a single object
  • remove inconsistent implementation (eg. set methods for adsr but not others, trigger and release methods)
  • attack, decay and release times as seconds not coefficients or milliseconds
maxiTimestretch
  • use camel casing like the other objects
maxiPitchStretch
  • This has bothered me for years. Please can we call it either maxiPitchTime or maxiShiftStretch ? Please ?
convert, maxiTools
  • These feel like they should be static functions not methods
maxiDelayline
  • Camel casing for consistency
  • Currently uses milliseconds where all other objects are using seconds

Missing/broken Features

maxiSample
  • Can’t access the length of the sample (returns undefined)
  • Can’t access the current playback position
  • I suggest copying maxiPitchStretch nomenclature setPosition, getPosition, getNormalisedPosition, getNumSamples
  • Why load the sample from the audio context ? Is there a way to avoid this
  • Strange behaviour when loading samples in both JS and C++
  • Playback rate is affected by start and end points - this is pretty counterintuitive
  • No start and end positions for playOnce
  • .setSample - does this work ? does it take the file address ?
  • Stereo samples - make clear in dcoumentation
  • Reverse rates don't work properly. Plays correctly then produces a load of noise. Probably some minor logic with the counter
maxiPitchStretch, maxiTimestretch, maxiPitchShift
  • No consistency of methods between these three objects.
MaxiPitchShift:

.play .setSample

MaxiTimestretch:

.getNormalisedPosition .getPosition .play .play2 - ??? .setPosition .setSample

MaxiPitchStretch:

.getNormalisedPosition .getPosition .play .setLoopEnd .setLoopStart .setPosition .setSample

maxiGrainPlayer

Can we have a grainPlayer that takes the following arguments

  • trigger
  • grainDur
  • rate
  • pos

I always end up reconstructing this from the maxiGrain object which is annoying.

Ideally I would love an inheritable player class where I could write my own playback functions processing the sample with other maxiLib objects as well.

maxiMix

Is there any way around the vector double issue ? Really weird that pan goes from 0 to 1 not -1 to 1

Reverb
Filters

The biquad filters don’t seem to work - let’s have Butterworth LPF, HPF and BPF

Convert

We have .mtof now let’s have

.ftom .atodb .dbtoa

Simple envelope types

Line Xline AttackRelease AttackSustainRelease OnePole

Envelope Follower

The name is there but it’s undefined

Javascript/student friendly

Could we write a wrapper class for maxiLib. How much overhead is in an extra function call ? This way users can easily read the source code / use the console to discern functions ? Ideally maxiLib would be organised into readable wrapper code and stripped down sound engine.

Documentation

JS Examples

Consider adjusting the volume ! Use more variables and improve comments to make it clear what the arguments are Lots of variants on sequencing - why not use clock all the way through ?

  • Counting 2 has an error
  • Poor code formatting in Counting 3
  • Counting 4 - improve readability
  • Envelope - implicitly adds a property called trigger to myEnvelope - very confusing
  • Filter Example - horrible code formatting for conditional / could we start with a more straightforward filter before this version
  • FiltersSVF - doesn’t appear to do much
  • Advanced filters - this isn’t really an example as none of these filters are included in maxiLIb
  • Monosynth - yet another variation on sequencing
  • Polysynth - displayed code is incomplete (it works fine on chrome)
  • Replicant - still has cout in it !
  • Compressor not sure why the commented out code is there
  • Additive Synth - incorrectly labelled. Should be one of the earlier examples
  • Analysis - it might be useful to have a simple canvas drawing wrapper as an addon / part of maxiLib ?
  • Granular Synthesis - not what I think of when I hear the term. The comments are confusing. There aren’t enough comments and the output is pretty boring.
  • Sample Example - surely goes ahead of grains and drumMachine. Why the sine player
API
  • improve on the current API docs
  • how about a processing style reference page ?

Go through issues here and on gitlab to find other bugs and feature requests