ref: fea33a2fc4eca3b9a84ec8c549f37ad99a55c2ef
dir: /piper/README.md/
# piper WIP. Piper reads human-readable commands from stdin, controls neindaw to produce sounds, mixes those together and writes the result to `/dev/audio`. It's recommended to avoid using `mixfs` with piper since it causes timings to go wrong. Synth instances are created by piper automatically, automatic mixing is enabled by default unless `-m` is passed. Running it with [orca](https://git.sr.ht/~ft/orca) is pretty simple: ``` daw/ay -s ay -m /n/ay daw/kick_drum -s kick -m /n/kick games/orca -u /fd/3 |[3] daw/piper /n/ay /n/kick ``` Note that the order of "groups" (`/n/ay` and `/n/kick`) matters with the command language since the groups are addressed by their index. See [examples](examples/). ## Commands Piper accepts simple commands like so: ``` 00C4d8 ``` `00` is first instance of the first group (`/n/kick/0`), `C4` is the note, `d` is velocity (`g == 1.0`), `8` is duration (the higher, the less). Duration depends on the current bpm that can be set with a `bpm120` command, for example. Notes for the same instances can be connected with `:` like so: ``` 00C4d8:!C2df ``` In this case the second note is for the `B` oscillator of the kick drum, and `!` is a way to "negate" the frequency value, so in fact it's `C2` *negative*. Commands can be separated with `;`. To change the global volume use `vol100` to set it to `1.0`.