From e747b343c332907110dad26e15c20daf3d7d7125 Mon Sep 17 00:00:00 2001 From: Mitya Selivanov Date: Mon, 25 Sep 2023 01:39:03 +0200 Subject: init --- README | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 README (limited to 'README') diff --git a/README b/README new file mode 100644 index 0000000..06efed4 --- /dev/null +++ b/README @@ -0,0 +1,118 @@ +Music sequencer and audio editor + + +Tech + +- kit - https://guattari.tech/kit.git +- sokol_app - https://github.com/floooh/sokol.git +- nanovg - https://github.com/memononen/nanovg.git +- miniaudio - https://github.com/mackron/miniaudio.git +- portmidi - https://github.com/PortMidi/portmidi.git + + +Algorithms + +- Cooley-Tukey FFT +- Biquad filter + + +Primary design + + +Basic UI + +- Bus list +- Bus units +- Track editor +- Sheet editor + ++---------+ +-----------------------------------+ +-[ Bus A ]-------+ +[+]Bus A ^ | [ track 1 ====== ] ^ [+] Arpeggiator ^ +|---------| | | | [x] ** *** | +[+]Bus B | | [ track 2 ============== ] | | [ ] <--> ++ | +|---------| | | |-----------------| +[+]Master v | v [+] Synth | +[+]-------+ +<--------------------------------->+ | ^ ^ ^ [ ] | + | / \ / \ / [x] | ++----[ track 2 ]--------------------------------+ | V V [o] | +|F > ^ |-----------------| +|E > x x x x x | [+] Reverb | +|D > x x x x x | | <-----> [x] [u] | +|C > x x x x x x x v | v ++--|<------------------------------------------>+ [+]---------------+ + + +Modularity + +Music and audio features will be implemented as a separate library with no external dependencies. +UI and audio devices will be distinct modules which can be replaced. + + +Sheet data + + /---------------------\ + | | + | Note | + | | + | time : i64 | + | duration : i64 | + | frequency : f64 | + | amplitude : f64 | + | flavor : f64 | + | | + \---------------------/ + +Unlike MIDI, we will allow to set any floating-point value for the note frequency. +Time is defined as a sample index and therefore is relative to the sample rate. + + +Processing + +A unit is a processing entity. + + for each unit: + output[channel, time] = eval(inputs, channel, sample_rate, time) + +Unlike VST, time for a processing routine is one of explicit parameters. +The processing routine can access any samples of inputs. +This approach allows to evaluate samples non-sequentially, and even do some tricks like time-reverse effects. +Changing the sample rate is also quite simple. + + +Global matrix + + /---------------------------\ + | Matrix | + | | + | (connections data) | + | A.out[0] -> B.in[0] |-----------------+ + | B.out[0] -> Master.in[0] |----------------+| + | B.out[1] -> Master.in[1] | || + \---------------------------/ || + ^ | ^^ ||(in[0], in[1]) + | | || || + | | ||(out[0], out[1]) vv +/----------\ | | /----------\ /-----------\ +| Module A |---+ +-->| Module B | | Master | +| (sheet) | (out[0]) (in[0]) | (synth) | | (limiter) | +\----------/ \----------/ \-----------/ + +The global matrix manages the information about connections between units. +Each unit can communicate to others through the global matrix. +Each unit can have inputs and outputs for sheet and signal channels. + +To get data from a producing unit, the receiving unit will request the data from the global matrix using the input index. +The global matrix will resolve the producing unit by input index, and request data from it. +The evaluation startes from the master and gradually reaches all required units. + + +Global modifiers + +Special units can affect all regular units, filtered by some criteria. +This will allow to do some global changes, e.g. change the musical scale of the entire composition. + + +Customization + +In the matrix mode, any inputs and outputs can be connected. +A custom unit can be created with code editor and JIT-compilation. -- cgit v1.2.3