A fresh coat of paint for the GUI, including using my favourite font, Iosevka.
Very pleasant to work with this imgui, should probably switch the sample/spectrum drawing to this system, but for now I'm using a hybrid approach.
A fresh coat of paint for the GUI, including using my favourite font, Iosevka.
Very pleasant to work with this imgui, should probably switch the sample/spectrum drawing to this system, but for now I'm using a hybrid approach.
Got a little sidetracked implemented a simple IMGUI in < 300loc. Very limited at the moment, but it supports buttons, toggleable buttons and regular/bipolar knobs. It's pretty easy to extend too, gonna migrate my previous RMGUI to this soon.
Worked on my antialiasing filters and the first steps into controllable knobs.
Added a little Moog style resonant filter. Currently controlling cutoff/resonance with the mouse position. Probably I need to start working on some slider/knob ui elements soon.
Had to switch some things around to be able to load long samples, as the performance wasn't great, but now I'm able to move around without issues. Also added a little RMS/Peak meter and dual oscilloscope for the final output.
Some touchups on the spectrum viewer, which now display as log values (dbfs). Added a circular buffer to get some visualization of an oscilloscope and for better fetch data for spectrum visualization in real time.
Finally managed to get the FFT working, turns out I had forgotten how to multiply complex numbers lol
This is fast enough to graph playback audio frames for a real time spectrum viewer. Fun times :)
Lots to do to get here, had to add trig functions and complex numbers to badlang, but I managed to get the naive DFT implementation going. I also added some function generation utilities (sine, DC, impulse, nyquist) so that I can test further experiments on this system.
The work continues, big internal refactor today and the addition to starting the oversampling implementation.
I've switched to represent and process everything as stereo samples for simplicity, but display and playback can be switched between mono/stereo regardless of the default.
Finally I added some more info to the cursor and a few extra buttons. Gonna try to do spectral analysis and visualization next.
Added some loop/zoom markers and differentiate between looping and not looping modes. When looping, samples start and end on the markers. When not, what you see is what you get. The zoom button focuses the sample range on the region denoted by the markers.
I also went ahead and added sample interpolation to avoid artifacts when the sample rates don't match.
Whoops I made another sampler player.
Improved the movement look and feel, zooming now uses the cursor position to keep that spot centered when possible. I also added some zero crossing markers that showcases a filled square if it would be safe to splice/play the sample there or not without clicks.
Put a bit more work on this. Now it can load multiple samples, display mono/stereo channels as a single sample, and added support for zooming/panning.
I don't know what possessed me today, but I wrote a little .wav file parser utility on my programming language #badlang and visualize it with raylib.
It's this a sign that my burnout is finally going away? Dunno, but this was a fun little exercise. I forgot how nice it was to write in my little lang, hope I can muster the energy to finish the self-hosting implementation.