contribute
how to build bambi, the rules its code is written by, and the guidelines a change is held to
bambi is free and open source, and its code is on GitHub. The first list is how to work on it: how to build and check a change, and the rules the code is written by. The second is how bambi is designed, one concept to a page, so a change fits what is already there.
working on bambi
- building and checkingTwo build trees, one command that says a change is sound.
- the working rulesSeven rules every change is held to, whoever makes it.
- where code livesThe core holds everything musical; a plugin owns its engine and its parameters, and nothing else.
- the audio threadIt computes, and nothing else: no allocation, no freeing, no locks, no waiting.
- determinismAn offline bounce equals realtime playback, in every sample, at every block size.
- testsA test names the mistake it catches, and has been seen to catch it.
- measuringEvery number about cost comes from a run, in Release, as a share of one core.
- code styleFormatted by one file, commented for the reader, and nothing kept that nothing uses.
- portabilityWritten so the core cannot become specific to one machine, one compiler or one locale.
- parameters and stateKeys are forever: append, never rename, never remove. Everything else is read by name.
how bambi is designed
- the shared systemWhat every plugin shares, and the two things each one owns.
- AmbiX and coordinatesACN ordering, SN3D normalisation, x front, y left, z up. Degrees outside, radians inside.
- modulationSources, targets and cells: one matrix, one contract, the same in every plugin.
- detection and duckingSix features anyone can predict, measured locally, and ducking as one row of the matrix.
- regionsWhere on the sphere something happens: a set of weights and an orientation, owned by one plugin.
- the sceneOne component draws the sphere in every plugin; orange is what came in, blue is what was added.
- presetsThe whole sound of one plugin, as a file of your own, loaded as one step of undo.
- the pickerChoosing what a thing is: one row of entries, and the chosen one's settings under it.
- buses, sidechain and formatsVST3 and CLAP; a fixed main input, an ambisonic output, and a sidechain on a bus of its own.
- the lookOne family: a user who knows one plugin reads the others without learning them again.