shithub: neindaw

ref: 66ba98f5e0f3c5e80deb909d561dbb5b872ff72f
dir: /piper/README.md/

View raw version
# 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 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
```

`;` is for UDP message, `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 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`.