have you ever wanted to write your own #DAW? in this blog I break down the process from start to finish -- from the basics of playing low-level audio in #Rust, to creating an complex audio backend for a #Tauri app.

https://whoisryosuke.com/blog/2026/creating-a-daw-in-rust/

Creating a DAW in Rust - Playing Audio - Ryosuke

The blog and portfolio of Ryosuke Hana (Oscar Diaz)

This is a great intro to audio in Rust using the cpal crate, as well as the basics of audio architecture -- like the intimidating and unblockable audio thread.

I cover lots of optimization techniques, like proper memory management across multiple threads - great for audio and graphic programming.

You'll learn how to:
- Send audio data to speakers
- Load audio files
- Create oscillators + effects
- Store audio backend in Tauri
- Calculate playback time using samples
- Send waveform data to UI

Basically anything you do with the Web Audio API and take for granted, you'll find out how it works.

If you're interested in seeing more articles like this - let me know! These are really intensive to put together (took me a month or so of dev + research), so I always appreciate when people share it or engage.

And as always, you can support me on Patreon, helps a lot in these times.

@whoisryosuke in the first example, where does `bitcrusher` come from in `cpal::SampleFormat::F32 => build_stream(&device, &config.into(), sine_wave_shared, bitcrusher),`? `build_stream` only has three arguments as defined in that same block, is bitcrusher supposed to be held back until the later section about it?
@whoisryosuke also `processed_sample` doesn't exist yet, just `raw_sample`
@llimllib basically yeah. you can see the full code here for reference: https://github.com/whoisryosuke/rust-dsp-test/blob/bitcrusher/src/main.rs 👍
rust-dsp-test/src/main.rs at bitcrusher · whoisryosuke/rust-dsp-test

Low level audio / DSP using cpal crate and clawdio - whoisryosuke/rust-dsp-test

GitHub