Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/codybloemhard/termdaw
A daw, in a terminal.
https://github.com/codybloemhard/termdaw
audio audio-processing cli daw digital-audio-workstation dsp music rust tui
Last synced: 14 days ago
JSON representation
A daw, in a terminal.
- Host: GitHub
- URL: https://github.com/codybloemhard/termdaw
- Owner: codybloemhard
- License: gpl-3.0
- Created: 2021-05-05T11:11:07.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2024-05-23T01:54:03.000Z (6 months ago)
- Last Synced: 2024-05-23T02:33:45.134Z (6 months ago)
- Topics: audio, audio-processing, cli, daw, digital-audio-workstation, dsp, music, rust, tui
- Language: Rust
- Homepage:
- Size: 1.63 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# termdaw
A daw, in a terminal.
Termdaw is a (or should become a) terminal, graph based programmable pipeline
digital audio workstation that is friendly to automatization and algorithmic composition.## MVP Goals
- Audio
- [x] Render audio
- Any samplerate: will up or down sample from project rate
- 8, 16, 24 or 32 bit bitdepth
- [x] Play back audio
- Terminal UX Workflow
- [x] Controls: play, pause, stop
- [x] Controls: set/get time, dash in time
- [x] Controls: refresh, render
- [x] View: Terminal logging, warnings, errors, colors
- [x] Toml configuration
- Streaming Workflow
- [x] Streaming mode (input through stdin)
- Structure
- [x] Sample Bank
- [x] Floww Bank
- [x] Graph rendering structure
- Base Vertex, with:
- [x] Gain
- [x] Panning
- [x] Input summation
- Vertex types
- [x] Sum vertex
- [x] Normalize vertex
- [x] Sample loop vertex
- [x] Envelope vertex
- [x] Sample multi vertex
- [x] Sample lerp vertex
- [x] Lv2 fx vertex
- [ ] Lv2 midi instrument vertex
- [x] Debug Sine synth vertex
- [x] Simple synth vertex
- [x] Wavetable synth vertex
- [x] Band pass/cut vertex
- Floww
- [x] Read from midi
- [ ] Read floww from floww description
- [x] Read binary floww from stdin stream
- [ ] Read human readable floww from stdin stream
- Lua
- [x] To configure the project (sample rate, etc)
- [x] Load resources (samples and plugins)
- [x] Construct graph
- [x] Refreshable: remove old, add new, keep same
- Docs
- [x] Config documentation
- [x] Examples## Goals for later
- [ ] Multitype graph
- [ ] In/Out ports
- [ ] Type checker
- [ ] Stereo type
- [ ] Mono type
- [ ] Floww type
- [ ] Value type
- [ ] Value automation
- [ ] Lufs mastering tool
- [ ] Linear interpolation of floww notes
- [ ] Better scrolling through time handling of on/off notes
- [ ] Split vertex
- [ ] Active toggle on vertices
- [ ] Disable completely dry vertices
- [ ] Prune disabled vertices from the graph
- [ ] Multithreading
- [ ] Bounded normalization in absence of the lv2 feature## Failed
- [ ] Bounded normalization: lv2 plugin's output can have more gain than input, no way to know how much.
## Example
```toml
[project]
name = "Example Project"[settings]
buffer_length = 1024
project_samplerate = 48000
main = "project.lua"
``````lua
-- Our lua file, where we do all the work
set_length(3.0);
set_render_samplerate(44100);
set_render_bitdepth(16);
set_output_file("outp.wav");load_sample("snare", "/home/cody/doc/samples/drumnbass/snare-1/snare-1-v-9.wav");
load_sample("kick", "/home/cody/doc/samples/drumnbass/kick/kick-v-9.wav");add_sampleloop("one", 1.0, 0.0, "snare");
add_sampleloop("two", 1.0, 0.0, "kick");
add_normalize("sum", 1.0, 0.0);connect("one", "sum");
connect("two", "sum");set_output("sum");
```## License
```
Copyright (C) 2024 Cody BloemhardThis program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.You should have received a copy of the GNU General Public License
along with this program. If not, see .
```