My mother-in-law enjoyed listening to a little mp3 player loaded up with old time radio shows from the Internet Archive (archive.org). My father-in-law bought her an Amazon Echo and we thought...what if?
What it does
Radio Time Warp provides a voice search interface to Archive.org's large cache of old time radio audio files.
You can search for and play specific collections and episode numbers, find out what's currently playing, search for specific shows or episode titles, and get recommendations by genre --- "Alexa, ask Radio Time Warp to recommend a random episode" is a really fun feature.
You can toggle through episodes with Back or Next, fast forward or rewind the current track by the number of seconds you specify, and you can stop and resume playback where you left off: even days later.
Episodes you've listened to show up as cards inside the Alexa app, so you can keep track of what you've already heard.
How I built it
I used Python to write the server component, using Flask, Flask-ask, and wsgi (Python Web Server Gateway Interface) on Apache Web Server. I'm saving user state with Redis (using RedisCache within the Python script), and episode metadata is stored in sqlite3 (with fts5 enabled for full-text search).
Challenges I ran into
The logic inside my server component is a little complicated, so keeping track of what's happening and fully testing every use case was a little tricky. I did run into some issues with voice input vs. result metadata as the show titles and episode names I have aren't completely normalized, so there's a lot of special-casing, database cleanup, and voice input cleanup that I had to implement. When I got really in the weeds, I took a break and built a mini-Alexa app (Arcade Party), just to prove that the concept could work.
I also tried a few different technologies: I initially wanted to do a full-Amazon-tech implementation (with Dynamo, hosted on Lambda), but I found that the instant feedback and control of running everything on an EC2 instance worked better for me.
Accomplishments that I'm proud of
I started out just trying to create a quick and dirty tool for my mother-in-law's amusement and ended up with a full-stack --- well, almost full, as there's technically no visual UI --- application that feels like a magic time machine. To build this thing, I had to work with web server technology, tune server performance, secure the server, write code, test code (I come from a QA background, so this is usually the easiest for me...but it was actually the hardest because I had to break and fix), and design voice user interfaces that are intuitive and make sense. It's still not perfect, but I've learned so much in the process.
What I learned
Developing for Alexa can be pretty fun, Redis is awesome, AWS is fantastic --- and the fact that Archive.org exists proves we are blessed. Also having a family member who uses your app every day can be better than CloudWatch and Pingdom when it comes to system status alerting, haha!
What's next for Radio Time Warp
I'm not sure what's next for Radio Time Warp, but I'm open to suggestions! As for current issues, episode metadata could always be cleaned up...most of it I've done with scripts, so some of the titles are a little rough. The app also gives you the first match for what you're looking for which is kind of quick and dirty --- if the skill takes off, I'll likely update it to have Alexa present all matches and allow the user to choose one.
I'm also interested in building similar interfaces for different types of audio; I've got a skill for Librivox audio books on the back burner. In addition, I'd like to build something so that users can listen to their own local audio files --- there are currently a few options out there for Alexa users, but it can be difficult to set up for non-techies, and can be insecure as users have to run their own local media servers -- I'd want to build something I'd feel comfortable with my friends and relatives using.