Soundboword
- 6 Devlogs
- 29 Total hours
A multi-platform, actually usable desktop soundboard
A multi-platform, actually usable desktop soundboard
Did a bit of refactoring to accomodate for later NativeAOT support:
Added global usings, and split up the project for better platform-specific service organization
Fixed the delete button not stopping the sound (how did I manage to fail that??)
Replaced the loop toggle with an Assign Shortcut button for quick access
I think the latter will be used more often, but having the loop toggle update two buttons at once was really cool
Sounds can now be added from YouTube; they are cached for fast access (how else would it work xd)
The window is not a dialog, so you can still interact with the soundboard while waiting for download(s)
(Idk if dialogs prevent interactions on some desktop environments tbh)
This is not the final layout, but it looks decent for now: clicking on a video (left side) takes you to the details page (right side) in the same window
Fun fact: pasting a youtube link automatically opens the video view, letting you download it even while the details are loading (will have to fix that up a little)
More (almost zero) progress on global shortcuts: I’ve figured out the object path & destination from the Kotlin library zugaldia/stargate, but xdg-desktop-portal just crashes now upon calling CreateSession
Added a devices page to select the output device
A “Stop All Sounds” shortcut can now be assigned to each input when clicking the gear icon next to it
Fixed shortcut assignment not working after switching pages
SelectionChanged event fired for every child control, not just the TabControl -> I now check for the source of the eventAttempted to add consistent text alignment in tab headers, that turned out to be stupid, so I just added a space after the Playbacks emoji
Removed the “Raise Maximum Volume” (a 0-150% range makes more sense imo)
Adjusted buttons in the sound editing view, this is not yet final
On the image you can see a pipewire graph I created, this is similar to how I want it to work
Added pages & tabs to better separate UI
Activated inputs are now saved and loaded
Sound state is now displayed better, it includes missing file detection (exceptions are not yet handled)
Implemented input handling for the Launchpad Mini, now I’ll be able to press pads to play sounds
Creating the shortcuts system took a few iterations, I wasn’t happy with the code I wrote
Shortcuts can be removed even when the input method isn’t active, which wasn’t possible in an earlier iteration
Also implemented settings saving when the app exits
Added a proper UI for triggering sounds with modes similar to that of voicemod (start -> stop, start -> restart, play -> pause, duplicate)
I played around with 2 rows below the big button but that seemed to take up too much space, so I moved them to the sound editor (which isn’t fully functional yet)
On the right side you can see input methods, which will include global shortcuts later (DBus is confusing af, the win32 api might actually be easier to work with 💀)
(Yes, I’ve half-made a global keyboard handler for windows previously)
Emojis are fairly expressive imo, but there are tooltips that describe what each button does
The layout definitely needs improvements, but it’s something ig
Also implemented loading sounds on startup, as well as saving when a new sound is added
Created the very base of the project with Avalonia and SoundFlow, sound playback works
Spent a bunch of time trying to figure out the DBus interface for XDG global shortcuts (Linux part of keybinds):