How exciting! I released my first real side-project today. It’s called “Just Need A Beat!” and you can find it at http://justneedabeat.azurewebsites.net.
What does it do?
It streams instrumental hip hop songs from SoundCloud.
Why did I do this?
I wanted to be able to stream instrumental hiphop tracks while working or playing video games or whatever. I really like hip hop music but when it has lyrics I always get distracted while working. I used to have a Pandora channel dedicated for this but the music selection was very repetitive and ads are very distracting.
How does it work?
The original idea was that it would all be done client side, using the Soundcloud API. Unfortunately that didn’t work out so well, because if you just search for a tag set like ‘instrumental hiphop’ you get a lot of low-quality tracks, and a lot of 503 errors.
So I had to implement a light back-end for controlling the playlist. I also wanted to try out using Windows Azure so this seemed like a good opportunity to do so. First, I created a Soundcloud account specifically for this project. I browsed SoundCloud for good instrumental hiphop tracks, and added them to my favorites. Then on the back-end I used Entity Framework code-first to query the SoundCloud API for that user’s favorites list then store the metadata about them in an Azure Database. This was a lot easier than I thought it woudl be! It was my first time doing greenfield Entity Framework and it came together without any major hitches, thanks to a lot of great tutorials.
With Entity Framework doing the DB heavy-lifting, the main website is a really small ASP.NET MVC 5 site that queries the database for the tracks and shuffles them before dumping them out to a view.
The view is just a
What really impressed me was that to deploy to Windows Azure, all I had to do was hook into the private Bitbucket Repo, and it went from there! Now all I have to do to deploy is push to master.
Its a hilariously small project but I learned a lot and I’m proud of it :D get at me on twitter or leave a comment with any feedback, bugs, or feature requests!