diff --git a/doc/4-instrument/bifurcator.md b/doc/4-instrument/bifurcator.md new file mode 100644 index 000000000..c3521d52d --- /dev/null +++ b/doc/4-instrument/bifurcator.md @@ -0,0 +1,38 @@ +# Bifurcator instrument editor + +Bifurcator instrument editor consists of these macros: + +- **Volume**: volume sequence. +- **Arpeggio**: pitch sequence. +- **Parametet**: set parameter of logistic map function. +- **Panning (left)**: output level for left channel. +- **Panning (right)**: output level for right channel. +- **Pitch**: fine pitch. +- **Load Value**: changes the current output value. + +## audio generation description + +Bifurcator uses logistic map iterations for sound generation. +basically it runs the following function over and over: + +``` +r = (1 + (p / 65536)) * 2 +x = (r * x) * (1 - x) +``` + +where `x` is the current output value and `p` is the "parameter". + +by varying the parameter, the value of x may change drastically, producing a variety of sounds. +the higher the parameter, the more "chaos" is present, effectively yielding noise. + +the default parameter is `47360`, which results in a square wave. + +if the parameter is set to 0, there's no sound at all. +as the parameter approaches 32768, a decaying square wave is produced. +the square wave stops decaying past 32768 and becomes louder until the parameter hits ~47496 (`r = 1 + sqrt(6)`). +a second square wave one octave lower then starts appearing, until the parameter reaches ~51443 (`r ≈ 3.56995`). this is where chaos begins. +anything higher results in a total mess. + +## the importance of loading the value + +you must load a value that isn't 0 in order to get sound. otherwise the function will always output 0. diff --git a/doc/7-systems/bifurcator.md b/doc/7-systems/bifurcator.md index bb1465a92..df056f17d 100644 --- a/doc/7-systems/bifurcator.md +++ b/doc/7-systems/bifurcator.md @@ -1,3 +1,14 @@ # Bifurcator +this is a fantasy sound chip which uses a unique sound generation method: logistic map iterations. +## effects + +- `10xx`: **set low byte of channel sample state.** +- `11xx`: **set high byte of channel sample state.** +- `12xx`: **set parameter low byte.** +- `13xx`: **set parameter high byte.** + +## info + +this chip uses the [Bifurcator](../4-instrument/bifurcator.md) instrument editor.