Profile avatar
nathanwhitehead.bsky.social
Indie software developer • math lover • ethical AI builder • 47 • he/they Currently working on DSP music synthesizer algorithms. Also working on lip sync and speech synthesis.
48 posts 44 followers 107 following
Prolific Poster
Conversation Starter

This is the web I love and remember: auberylis.moe

Michael F. Bryan's blog is a treasure for Rustaceans: adventures.michaelfbryan.com/posts/rust-c...

graphite.rs blowing my mind right now. web based image editor written in rust

Me: "Am I too weird?" Me after browsing Bluesky: "Am I weird enough?"

Found a fun undiscovered YouTube channel! Mysterious Hungarian building a virtual modular synthesizer. Includes audio trax too www.youtube.com/@9b0/featured

This is my kind of project, a hardware solution to hack the iClicker, not to be used for nefarious purposes obviously github.com/wizard97/iSk...

Did you know the Speak & Spell voice started as actual voice recordings? I just came across digitized archive tape recordings that TI used. This is a piece of history. digitalcollections.smu.edu/digital/coll...

I've been playing around with circuit simulation for audio algorithms. Latest find is this MNA tutorial, it's helping: lpsa.swarthmore.edu/Systems/Elec...

My brain is exploding with too many music and audio programming ideas. So maybe it's appropriate that I'm listening to the catalog of em essex. Matches my mood.

Reading a 10 year old Tumblr post and tileable noise finally clicked for me. You need to generate the noise 1 dimension higher than you need, then loop around. So for 1D vector follow a circle in 2D noise. So simple! procedural-generation.tumblr.com/post/1238807...

Found some cool ideas that link audio synthesis and deep learning. A book: intro2ddsp.github.io/intro.html

Trailer for my game "Ella's Quest". Just let me say video editing is a lot of work. www.youtube.com/watch?v=2yQk...

First public release of Ella's Quest. Give it a try. nwhitehead.itch.io/ellas-quest

I looked into the best way to make a standalone executable out of a Vite JS app. Looked at electron, nwjs, ProtonShell, Tauri. With 10 minutes of effort for each one electron was the winner. Most annoying aspect was I had to use CommonJS for a couple small files... shudder.

My first animation in Rive. This is "Ant Mom" idle loop.

Working on cute characters for my puzzle game. Switching from "dark dungeon" to "cute and bouncy".

Finished alpha draft of my minesweeper dungeon game. ella.shimmermathlabs.com

Working on my own version of the amazing Dragonsweeper. danielben.itch.io/dragonsweeper

Updated to a new voice. Buh-bye British accent.

Lip sync for my latest art is go! Video generated using some hacky python scripts from cherry lip sync timing file.

Current level of my art skill... embarrassingly bad. But improving!

Today I looked into how digital code signing for Windows works. Holy cow, it's a huge mess. So far the best alternative seems to be Certum "Open Source Code Signing in the Cloud". If anyone has thoughts, let me know. shop.certum.eu/open-source-...

Just released an initial public version of my secret project, Cherry Lip Sync! github.com/nwhitehead/c...

Somehow I never knew that Jupyter has a darkmode. Just activated the dark side.

I'm having fun with the Google Rust book (free online). It's at just the right level of verbosity for my current mood. google.github.io/comprehensiv...

Somehow whenever I touch FFTs in code I always end up with random negations and factors of 2π. I've learned to stop worrying and just deal. Life is too short.

Look at these numbers, how the same they are. I swear if you don't test literally everything somehow it's broken. The software engineering mantra.

Going through input preprocessing for my lip sync model. I'm ripping out code left and right, just letting the model handle it. You go little model, you go.

Just found an issue in my lip sync training pipeline. I'm computing MFCC values over time and using sliding windows to allow the model to "see" a fixed amount of time into the future. But the MFCC transform does a normalization step that looks at the entire input. So my model is non-causal!

How did I not know about frequency remapping for DSP algorithms? This is like the holy grail of spectrograms. Thank you Au5 on YouTube: www.youtube.com/watch?v=8J4L...

This is a fun political choice theory model. en.wikipedia.org/wiki/Exit,_V...

I'm liking GRU layers for deep learning. They are working well for my little lip sync project. They train faster than LSTMs and I feel like I know what they are doing. Now all I need is better support in burn, the rust deep learning library.

Just fixed a bug in my ONNX export. Turns out I was creating my model then just saving it as ONNX. But I never loaded the checkpoint weights...

Training on CPU is left, training on GPU is right: