ref: 47e3e64e946867e16b1e81f68e97ea05dc562887
dir: /README.md/
# 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