Do you envy people who can bust out some fire freestyle raps about absolutely anything? I certainly do. That's why I wrote a bot for people like us.

What it does

WikiBeat uses natural language processing and the knowledge on the internet to put together couplets that are not only spicy af, but also completely factual. This means that WikiBeat has both educational and entertainment value. And it's all wrapped up into a nice little web app with a sleek and simple interface.

How I built it

The backend of WikiBeat is entirely Python. When a topic is received, it uses the Wikipedia api to gather content on the topic and process it into rhymes using NLTK and various logic. Then the Python wave module and the google text-to-speech api are used to turn the couplets into actual sound, and put them onto a beat.

Once the beat is made, the frontend is notified, and moves to an appropriate page, where the lyrics are displayed dynamically line-by-line (as the song is playing) using javascript functions that I wrote.

Challenges I ran into

My biggest challenge with this project was time. I worked alone on this project from start to finish, so naturally I was stretched for time trying to accomplish everything I wanted to. I spent my fair share of time simply debugging strange behavior. It was also a challenge to hand certain data from python to javascript for the lyrics to be displayed in real time.

Accomplishments that I'm proud of

The front end for this project turned out to be much more polished and pretty than I had anticipated. I'm proud of the way it looks. I'm proud of the project and idea itself. It gives me a good laugh every time I test it.

What I learned

The biggest thing I learned was how to effectively organize time on a project. There were several times where I wanted to stop progress to fix a small detail, but I realized that if I didn't move on I wouldn't have a finished product at all. I also learned some cool javascript tips and tricks, and some more knowledge on NLP.

What's next for WikiBeat

Some improvements that I wanted to implement, but didn't have time included: Putting this project on Heroku or some similar service. As it is, it's actually very close to being ready to be put into production, however, I simply didn't end up having time. Using a translation API to translate lines to a foreign language and back, in order to get more rhyming material to work with, while still staying factual.

+ 5 more
Share this project: