Skip to content

codybloemhard/termdaw

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

95 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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
    • Render audio
      • Any samplerate: will up or down sample from project rate
      • 8, 16, 24 or 32 bit bitdepth
    • Play back audio
  • Terminal UX Workflow
    • Controls: play, pause, stop
    • Controls: set/get time, dash in time
    • Controls: refresh, render
    • View: Terminal logging, warnings, errors, colors
    • Toml configuration
  • Streaming Workflow
    • Streaming mode (input through stdin)
  • Structure
    • Sample Bank
    • Floww Bank
    • Graph rendering structure
  • Base Vertex, with:
    • Gain
    • Panning
    • Input summation
  • Vertex types
    • Sum vertex
    • Normalize vertex
    • Sample loop vertex
    • Envelope vertex
    • Sample multi vertex
    • Sample lerp vertex
    • Lv2 fx vertex
    • Lv2 midi instrument vertex
    • Debug Sine synth vertex
    • Simple synth vertex
    • Wavetable synth vertex
    • Band pass/cut vertex
  • Floww
    • Read from midi
    • Read floww from floww description
    • Read binary floww from stdin stream
    • Read human readable floww from stdin stream
  • Lua
    • To configure the project (sample rate, etc)
    • Load resources (samples and plugins)
    • Construct graph
    • Refreshable: remove old, add new, keep same
  • Docs
    • Config documentation
    • 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

[project]
name = "Example Project"

[settings]
buffer_length = 1024
project_samplerate = 48000
main = "project.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 Bloemhard

This 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 <https://www.gnu.org/licenses/>.