Imagine if you could create playlists with a number rating attached to each song based on how well they fit that playlist? That's Emotion in one sentence.
Plus the ability to get everything together, from YouTube, Spotify, songs you've got on your device from purchased albums. Plus each playlist is the emotions that songs give us. Now you can get the most out of the power of music.
I was annoyed both by how Spotify doesn't seem to shuffle its songs properly, but also by how the music I listened to was always the same set over and over again just because they were the only focus songs I had that existed on Spotify. Eventually, I would just abandon Spotify (well never completely abandon it since it was good for music on the go) and intermittently swap between local files and YouTube for my focus music for working on my projects. Like Heart of Gold.
This is a problem obviously. I have to constantly swap between Spotify, YouTube and files on my computer so that I can actually get a full focus music experience. It's the most inconvenient thing possible. A solution of course is to find a multi-source player. They exist, and in a bit of an "abundance," stuff like the Electron apps showcase page have quite literally 39 of them. It's hard to do for definite and is a highly educational project to do, so coding practice-wise it's fantastic. But they're all ultimately doing the same thing, they're just letting you combine multiple sources - with some not even accomplishing that and just being simple music players.
I decided I would need to design my own solution: Emotion. This app lets you combine Spotify, YouTube and local songs all into one location - but not only that - it allows you rate how much of an emotion a song gives you between 0 and 100, and allows you order by rating and even reimport in that exact order back into Spotify via playlist. Of course you could just play everything through the app too, it's perfectly capable. It's one of the best projects I've ever worked on I believe, and may actually be the key to solving my productivity problems in the future by making use of musical "hypnosis."
The project was created in Windows Forms. While it's super quick to prototype UI inside it, if you don't know tricks about using flat buttons, borderless windows and the works, you're gonna have a bad time with making it look nice.
As you can see. My very first design made on the 15th of July maybe? It looks more than boring, it's actually atrocious in my opinion. If somebody sent this to me to alpha test I would think he's trying to sneak a rootkit on my PC. So I got my niftly little WYSIWYG editor designed by Microsoft and developed the design...
Bam. You can tell that this design isn't refined, but it's definitely miles better than the last one. The use of alternating colours (or maybe just the use of ANY damn colour) focuses the user on desirable elements they might want to use. It looks stylish and more welcoming, albeit it still looks like a really early design. Then I ran into a snag around about this time.
So just to quickly recount and maybe rectify a few comments I made: prototyping the design is numero uno of the things you should do. It's like my coding mantra: "Design first." With OOP languages, you always worry about what pattern you might need to use and how you want a new architecture to be structed, then you end up making too much trash you didn't need and overthonked yourself. It's the same case with design. You need something roundabout and basic, and then you need to layer off it and enhance and implement that design.
There's still a problem here however, I did not add the inclusion of a library. At this point in the design I was solely focused on getting the wonderful SpotifyAPI by JohnnyCrazy up and running, auto-detecting what the user was listening to on Spotify and allowing storage in a playlist quickly.
This is horrible.
The program requires too much of the user's intervention to make work and to provide its "solution" to its "problem." That's when you end up not making abilities, but liabilities. In early testing of the app I knew that it was inconvenient. When you yourself don't feel motivated to use your own app that's already a bad enough sign, considering you're supposed to be the one person who's the most excited out of anyone in the universe for your project.
I solved this problem through the use of a library. Short and sweet. Then I needed to add new features, you needed to be able to add your entire Spotify library for instance, and also add Spotify playlists, and YouTube urls, and local files, and oh my god, I just realised that this project has a LOT OF WORK INVOLVED. Somehow I persevered despite me slowing down in my realising of this. By virtue of breaking my problems down into smaller problems, I went design first and made the add menu, and THEN I started implementing each feature sequentially.
Ta-da! Look at that. Ever so closer to the final design, I was able to revise it through again, borderless windows, flat appearance, nice colour choices and intuitive user experience design that I actually have something I was genuinely excited about, I was basically shaking with excitement trying to share screenshots every 2 seconds with my friends on the new UI that I made! They weren't even a tenth as happy as I was, but that's a good thing at least.
Then the Spotify API Apocalypse happened. So I woke up on one faithful morning on July 19th 2018 and discovered that absolutely nothing Spotify wise in my app would work. 2 hours later after scowering my spotify service codebase, I realised it wasn't a ME problem, it was a THEY problem. I checked the API issues page to collectively discover the collapse of Rome. Uhm. The collapse of the Spotify API library. Hour by the hour all sorts of github projects referenced this same issue page begging for answers as to why people's apps were all breaking one after one. I was shocked it wasn't actually just my dumb coding.
But no, not this time. Spotify had disabled any local API interactivity on their end, forcing ALL projects to use their web API. And guess what that means? Mandatory Spotify premium! Yay! Now everyone who wants to use Emotion MUST have Spotify premium to use the Spotify features! Isn't life great?! 5 HOURS LATER, and I used the web API part of the SpotifyAPI library by JohnnyCrazy to develop a new spotify service to handle all previous features. Thank god for OOP. It was easy as 'slotting in' new code, and is a prime example of why you must design your structures around base classes and/or interfaces. The process was painful, but made me happy at the same time as I realised all the structures that I made were actually being put to use, making my life actually easier for once!
Working on Emotion also made me learn so much more that I was missing from my game project. Since you're basically facing pure .NET usage, you're also forced to use many of the therefore .NET libraries. No Unity framework to save you now. That means I had to follow the design process I used for NANOBUILDER. Who would have thought such a chaotic project would have helped my mindset for my next chaotic one?
After trying to connect UI elements to actually do things when they are clicked, hovered, etc. I was able to actually learn what the C# event system really was - and actually how amazing it is. Not only that, being forced to create audio services and compartmentalizing my code - I actually learnt what NAMESPACES were too, and how to actually create and use my own libraries within my code as well as making utility libraries for myself. When it comes to OOP, you need to consider that all the code you're making should be packageable into a library that can be used by others. This made me think even deeper about all the structures that I create now thanks to this project, and more than ever before I stick to that SRP (single responsibility principle) business. I feel like the flow of my code has improved by twice the amount thanks to both this and my design first/implementation first mindset.
Since compared to game design you don't have to worry about making nice looking sprites or characters, but rather making nice looking squares and rectangles, I was able to focus on actually making things happen. I can't tell you how happy I was to see all the songs streaming in from a Spotify playlist the very first time I imported it. On the same day, I took that imported playlist, rated a bunch of songs, ordered by rating and reimported it back into Spotify, went to my mobile and downloaded the playlist for offline use - and since it retains the exact ordering of the songs, I was able to play back the most energetic songs for my gym session. I quite literally did something that would have been IMPOSSIBLE for anyone to do without the use of my app. Now THAT is what I call engineering. It was like a lightbulb moment that this project was an incredible choice to tackle, and I honestly felt the most powerful I ever have as a coder. I realised that I actually had the ability to well, change the lives of the people who use my app. It was quite literally absolute power!
I suggest to anyone reading this that if you have a dream project you want to tackle. DO IT. You will not only learn more than you thought you could have out of that project, you will also end up creating true power you can actually add into your life. It's completely ridiculous. When I started making this project, I did not believe I could accomplish it. All I could see was the vision of what it could do. I broke down that barrier into smaller chunks and tackled them one by one, and released Alpha 2 Broadway on the 31st July 2018, 17 days after the start of the project, and the official date I considered Emotion to be an actual solution to my music picking problem. By using the app every time I wanted to listen to music and marking down my problems with the app on Trello, I've slowly revisited the app code from time to time and fixed the problems, adding significant polish to my project, making it ready for a possible beta or final release very soon.