Inspiration
A simple idea came to mind - What if you could sing whatever you wanted at a karaoke event, without having to bother with outdated technology or delicate digital solutions?
What it does
This is where Araoke comes in - an all-in-one solution for all of your karaoke-party desires. Araoke turns any computer into a karaoke superstation - whether its a powerful desktop hooked up to a massive screen or a simple laptop. Play any song you want, as Araoke's embedded AI isolation models give you the unique opportunity to selectively enable and disable the core parts of any song - Vocals, Bass, Drums, and everything else, turning any hit into an instant karaoke track. Don't worry about trying to pass around the keyboard and mouse, as Araoke provides an intuitive interface for adding songs to the queue that anybody can access on their phone or laptop through scanning a conveniently placed QR code.
How I built it
Araoke was built primarily using Python and HTML5/CSS3/JavaScript. The "host" is powered by pywebview and a variety of other open-source libraries with a multi-threaded backend for optimal performance. The client server is powered by Flask, utilizing the Apple iTunes API to retrieve high-quality metadata.
Challenges I ran into
As I rarely dip into multithreading in general, I had significant trouble with the main thread locking up while the threads were seemingly functioning properly, and vice versa. This was resolved through trial and error development and assistance from a mentor. Additionally, another pain point was getting audio playback to work correctly. While unconventional, I found that incorporating Pygame's Mixer audio engine was the easiest way to provide the 4 playback channels required to properly play song stems.
Accomplishments that I'm proud of
I am particularly proud of how integrated everything turned out. I think the resulting codebase is quite clean, and the interaction between the client server and host webview is quite seamless.
What I learned
Through the development of Araoke, I learned a lot about multi-threaded development. While it certainly provides numerous benefits, it was also a massive pain to set up correctly. I have also learned much more about how pseudo-native applications can be developed through webview-type frameworks, which I may explore deeper in the future.
Something else I've learned is the importance of collaboration. I decided to go into this project solo, as I wanted to see what I could pull off by myself. However, this has been frustrating at times as I have struggled to wrangle certain frameworks and technologies that may be familiar to other developers, resulting in a product that could be better.
What's next for Araoke
Araoke was designed to be extendable - as such, future ideas that could be incorporated into the project are fully possible and should be relatively easy, including the ability to control individual stems from the client server interface, adding a pincode to restrict access to the queue, exploring different audio and lyric providers, a server-hosted version of the application to possibly speed up ML inference, and possible monetization options through contracts in the karaoke industry.
Log in or sign up for Devpost to join the conversation.