shithub: neindaw

ref: 663bc67e12efaccd4109068b05f8e6d671b7bd23
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](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`.