Plaintext DAW

Back to Projects


This project was all about using human-readable text files as the save format for a DAW (Digital Audio Workstation). This would allow people to collaborate on music using the same tools that software engineers use to collaborate on code.


DAW14: Deciphering State Management in Tauri

Through trial and error, I discover how Tauri manages state - and how NOT to manage state in Rust (using mutable global variables).

10 months ago • March 6, 2023

DAW13: 3 ways to create a window in Tauri

Along with a number of other little fixes, we find three ways to create a new window in Tauri. This lets us launch a new "editor" window after the "open project" window has done its job.

10 months ago • February 26, 2023

DAW12: Tauri filepicker

Wow, who knew how easy it was to pick files using Tauri! Not only do we pick a file, but we pick a plaintext-daw song file AND invoke Python from Tauri, all in just a few lines of code.

10 months ago • February 23, 2023

DAW11: Generating a Tauri Project

In this video, we generate a Tauri project and get it running. Nothing crazy, we just add a new button to print something to the console. Also, a look at the roadmap, what's next, and how Tauri can interact with our existing Python CLI.

11 months ago • February 14, 2023

DAW10: ResourceManager is DONE

At last, we've finished refactoring all the code into a single, well-tested ResourceManager class and updated the CLI to call this new code. All tests are passing; we have some new code debt, but that's okay for now.

11 months ago • February 12, 2023

DAW9: Advanced TDD with Pytest

In this video, we use patch.object to test that other methods in the class are called while keeping the test scoped to a single unit - true unit tests!

11 months ago • February 10, 2023

DAW8: New arch, new me

In this video, we review/merge some PRs, then get started implementing a new architecture. The first order of business is to add a ResourceManager to handle all the complex things we do to load wav/mp3 files and generate sounds using our Synth.

11 months ago • February 8, 2023

DAW7: What's wrong with timing??

This video is a wild goose chase to figure out why I can't seem to calculate the start/end sample of notes properly.

11 months ago • February 6, 2023

DAW6: Integrating Synth Code

In this video, we merge LTstrange's awesome synth MR and get the main CLI tool to generate music from nothing but the numpy sine function.

11 months ago • February 4, 2023

11 months ago • February 1, 2023

DAW5: Loading Piano from Git

In this video, we fix BPM calculation, write a ton of messy code, and end up loading some piano samples from a remote Git repository.

11 months ago • February 2, 2023

DAW4: Chords? Tempo? SYNTH??

Music to my ears! Chords, tempo, GUI, synthesizer - buckle up!

11 months ago • January 31, 2023

DAW3: Rendering Two Notes

In this video, we parse the config for our first song and render two separate sound files into a single output file. Not quite useful yet, but it's getting better. Baby steps!

11 months ago • January 30, 2023

DAW2: Config Magic with Python Dataclasses

Researching SoundFonts and MIDI, parsing the config, and more

11 months ago • January 26, 2023

DAW1: Let's change music FOREVER

I pitch an idea, I write some code... what else could you ask for?

12 months ago • January 19, 2023