shithub: neindaw

ref: 47e3e64e946867e16b1e81f68e97ea05dc562887
dir: /README.md/

View raw version
# neindaw

Some kind of DAW for 9front? An ongoing effort.

The right way to say the name is "NEIN! dough".

At this moment the effort is mostly on getting tooling powered by
[Faust](https://faust.grame.fr) to beep beep boop. Here, watch this:

![code](kick.jpg) → ![result](cfg.png)

Wow.

## Installing

Clone the repo, run `mk install`, check out `ls /bin/daw`.

## Testing

So far two instruments are provided, which is a kick drum synth and AY-3-8910.

```
daw/kick_drum -m /n/kick
cd /n/kick
```

Allocate one instance.
```
cd `{cat clone}
cd K*
```

Check the A oscillator frequency, the order is `type value initial min max step`.
It's different for different UI elements.
```
cat A/Frequency/ctl
vslider	100	100	10	200	5
```

Raise frequency to 160Hz.
```
echo 160 > A/F*/ctl
```

Pipe sound to /dev/audio in background.
```
audio/pcmconv -i f32c1r44100 < ../data > /dev/audio &
```

Set B oscillator parameters and enable it.
```
echo 400 > B/Frequency/ctl
echo 0.001 > B/Attack/ctl
echo 1 > B/Enable/ctl
```

Do a kick.
```
echo clear > ../ctl
echo 1 > Control/Gate/ctl
```

Run `cfg` to configure the kick drum in a GUI.
```
daw/cfg /n/kick
```

## TODO and random notes

 * add input proccessing
 * buffer computated data if `data` is opened more than once so every reader
   gets the same data at its own pace?
 * use llvm-generated object or asm instead of C? that would be having to
   add Plan 9 target to llc I guess, or some kind of conversion tool for asm
 * renaming/removal of instance IDs and controls via Twstat and Tremove
 * ~~GUI needs to support various styles like knobs, drop down menus,
   radio buttons etc~~ see #2
 * ~~`<ui>/value`~~ `<fs>/watch` to watch the changes, add frame offset as well
   to know when it actually changed
 * optional frame offsets for all commands, running and stopping computations
   at specific offsets will make it possible to apply changes correctly
 * `reset` command for groups
 * writable `metadata`: allow adding new key/values to `metadata`
 * add some way to read and write the whole configuration of an instance
   in an easy way, so instances can be cloned, or configs saved to disk
   as presets
 * make all of that compile and run on ~~Linux~~OpenBSD as well?
 * "sampler" that can be used to buffer generated audio in memory/files
   to be reused without running computations every single time
 * slicer
 * ~~some kind of pipefs (that's a bad name)~~`<id>/from` and `<id>/to` to
   connect all the objects together, should be controllable through daw/cfg.
   ~~microui will need a lot of work~~see #2
 * ~~polyphonyfs~~~~`<id>/clone` to manage master/voices automatically for any DSP~~
 * mixerfs with channels
 * full MIDI support
 * OSC support
 * ~~port Orca to Plan 9 and use it for testing neindaw~~ *DONE*
   https://git.sr.ht/~ft/orca
 * changes of controls can be monitored through a 2D plot in GUI
 * every control can be used as an input of another control