Android Wear & A Sentient 8tracks

wear header

Android Wear has been around for well over a year now. Last summer, we dreamt of making a wearable app and even had a small working prototype. Alas, it stayed just that–a prototype. Fast-forward to summer 2015, and after a couple of Android Wear updates, Google has ironed out some of the problems we saw last summer. On top of that, there are more APIs available as well as open source projects to help us release a top quality app.

You may remember that earlier this year we released an update to our iOS app with support for the Apple Watch. It allowed listeners to play popular collections of playlists on topics like “workouts”, “party”, and “staff picks.” But with Wear we wanted to try something different: an app fully focused on exploring and discovering new music. The question then became: how can we design the 8tracks Explore experience to be as simple and seamless as possible?

While apps to exist that let you type on-screen, we wanted to avoid it
While apps do exist that let you type on-screen, we wanted to avoid it.

During the design stage, we thought about different ways to explore playlists. We wanted the journey to be open-ended, allowing the listener to search for whatever they want. Google’s UX guidelines put a heavy emphasis on voice input. This makes sense because when you have such little screen real estate it can be close to impossible to enter text using an on-screen keyboard. We’ve seen a few apps using on-screen keyboards, letting you reply to text messages using the old-school keypad layout, but for our purposes, we wanted something faster. So we opted to use Google’s built-in Speech APIs, which has been honed over years.

Our own take on Google’s listening prompt.

Google offers you two options when it comes to speech input. You can either (A) pass the job off to Android Intent, which will show the familiar red, pulsating listening prompt or (B) roll your own UI and request the text from live audio. While using an Intent is the encouraged route to take, it means leaving the 8tracks app and switching to Google’s own UI while listening. We felt like we could mimic the same UI inside our own app with our own twist.

More Than Meets The Eye

Once we received the text from the Speech APIs we realised we had a larger problem on our hands. Given a phrase like Play me smooth jazz, how could we return a set of playlists tagged “smooth jazz”? To conquer this, we delved into the depths of Natural Language Processing (NLP) to help provide more insight into the structure of the phrase. Using the collection of Stanford NLP software, we could analyse each word in the phrase and find information such as Parts Of Speech (POS), Named Entities, and Coreference Chains. After experimenting with these different features, we settled upon the Part Of Speech (POS) tagger to help us. The POS tagger tells us, for a given word, which category of word it is–verb, adjective, noun etc.

Some preliminary UX design sketches for the Android Wear app.
Some preliminary UX design sketches for the Android Wear app.

With this newfound knowledge, we formed a method of parsing a phrase. We would traverse the phrase in reverse order through pairs of words (known as bigrams) looking for what we considered to be a border between playlist tags and the text that comes before. Determining that a bigram was a border would imply that we had reached the end of the tags section.

For example, 
For example, “Play me smooth jazz” would be split into “play me” + “smooth jazz” because we recognise the bigram border “me smooth”.

This worked reasonably well  as we hand coded these values into if/else statements. We knew not to be too specific or we’d overfit our data so the border we looked for was actually a POS tag border rather than the words themselves. Thus, in the last example we would actually match “pronoun verb” instead of “me smooth.” As I mentioned before, this worked reasonably well, but only on phrases that we could foresee being spoken–as soon as we gave it to a friend or colleague to test and they came up with a new phrase we hadn’t thought about, it would break. We definitely didn’t want to be continuously updating the code every time we heard a new phrase.

Take 2

We set to work on a new way of checking these borders between words. We ended up going through tens of thousands of user-generated playlist tags used to categorize our playlists, and we parsed each and every one for a POS tag. We then tried to collect some different leading phrases that might appear before the playlist tags (like “play me some”), but this time, we wouldn’t need to think of every phrase. The aim of collecting these leading phrases was to try to find the different ways they could end, right before the playlist tags appear in the sentence. We then took the bigram (two words) that we found at the end of each leading phrase and combined each word with all the possible POS tags to form a set of word texts and POS tags. From here, we performed a Cartesian product on the set to form pairs of all the possible combinations.

For each of these combinations, we summed how many playlist tags contained the combination, weighted by the number of playlists each tag appeared in. Doing this gave us a mapping between each combination and how likely it was to appear inside a playlist tag.

For each of the combinations, we also counted how many playlist tags start with the second element in the pair. Again, we weighted the counts depending on the number of playlists containing each tag. At that point, we’d done all the computation needed, and it would have taken about 20 minutes to complete the process so far. We then formed a half and a full border array. Both borders signal that the tag section of a sentence has ended but the idea behind a half border is that if we determine “by Taylor” is a half border, we only add “Taylor” to the tag section. A full border could look like “music by” and implies that neither part belongs to the tag section, so we add no more to the tag section. The criteria for whether a bigram belonged in either array was as follows:

half border must:

  • occur in a low % of tags
  • have their last word start a high % of tags
  • not occur in any leading phrases

full border must:

  • occur in a low % of tags
  • have their last word start a low % of tags
  • occur in at least one leading phrase

Using the above method we came up with hundreds of borders that are backed by real concrete data rather than what us developers could think up. It won’t work with every tag, like “hahaha I don’t know how to tag this” for instance (yes that’s a tag), but it works on the vast majority. The border arrays are saved to a file and used by the web server. This way we can respond to requests in milliseconds, not 20 minutes. In our tests it worked very well, and continues to surprise us with the phrases it can recognize.

Multiple tags are supported too. We separate them by looking for words with the “coordinating conjunction” POS tag. We can recognize tag phrases such as “pop and funk and jazz and…” easily, but more tricky are ambiguous phrases: “bass and drum and electronic” can be parsed as “bass and drum” + “electronic” or “bass” + “drum and electronic.” As we use coordinating conjunctions to separate playlist tags, if we find an occurrence of “and” as well as another coordinating conjunction such as “plus” then we will assume “and” is part of a tag and not split on occurrences of “and.” So the last phrase can be spoken as “bass and drum plus electronic” to get the desired split “bass and drum” + “electronic.” It would be great if we could make the system cleverer at parsing that, possibly based on tag popularity statistics, but for now this does the job.

Where’s The Wear?

Once the server-side part was built and we had a search endpoint we could call, we continued developing the wearable app. After either speaking a phrase or selecting one from the list, we take the user to a loading activity. It’s less like a loading activity in the traditional sense, as the border countdown is not indicative of loading progress. It’s more of a chance to cancel the request in case the detected text is incorrect. This was another UX design hammered home by Google’s guidelines. Having said that, we actually send off the request regardless of whether the countdown has finished, in the hope that we’ll have received the response by the time the countdown ends. If that’s the case, then we can take you straight to the content without needing to show a real loading indicator. If we don’t have the response by the time the countdown ends, then we do show you the indicator.

We send off the request as soon as the countdown begins.

You’re then taken to the final activity where you can browse the resulting playlists. We use Google’s FragmentGridPagerAdapter to help us show the playlists within the design guidelines and provide actions for each row. The first row tells you exactly how we parsed your phrase, so if we got it wrong you know immediately and can try a different one. We take the predominant colors from the resulting playlists and combine them into a gradient background to provide some unique context to the page. From here, you can swipe left to play through all the playlists. If we detected that your phrase implied you want to play rather than browse, then we auto-swipe and begin playing without the need for user interaction. A phrase like Play me smooth jazz will trigger this sort of behaviour. Find me smooth jazz, on the other hand, will not. Each playlist’s row contains actions to play that individual playlist or open up on the phone without playing. It’s a pretty simple structure in truth, but as you’ve read, there are some clever things going on behind the scenes.


Android Wear doesn’t allow any direct internet connection. All data retrieved comes from a handheld (phone, tablet etc.). Because of this, we have to ask the handheld for sets of playlists and image files. We use Fresco to load images in our Android app and found a nice library called DaVinci that uses Picasso on the handheld to load images and then sends them across to the watch. We forked DaVinci, and Michelangelo for Fresco was born. For data communication between handheld and wearable, we made use of both DataItems and the MessageApi. Using these along with WearableListenerService means you don’t even need 8tracks open on the handheld for the wearable to communicate and function properly. For instance, when you select an action for a playlist, we send a message over the MessageApi.

Images are loaded using Michelangelo and the MessageApi is used to control the handheld.


Android has a built-in set of classes to support a concept called MediaSessions. By registering a MediaSession and supplying some metadata about the current track, a media app can allow its playback to be controlled by RemoteControlClients. These can take the form of lock screen controls, a third-party app or music controls on wearables. This latter option is something we wanted to look into more closely. We knew that our wearable app could be started by finding its icon on the wearable’s app launcher, but there was an issue pertaining to visibility. While looking through the wearable app launcher, we noticed apps we never knew we had on our wrist. We wanted users of 8tracks who use Android Wear to know that we had a wearable app and not have to discover it randomly in the app launcher. Google’s Play Music app managed to add extra actions to its music controls notification that let you change and rate tracks and we desperately wanted to do the same thing. The problem was that we couldn’t add actions using the methods described in the Wear Notification documentation because Android was controlling the media notification and we couldn’t manipulate it (we just gave Android track metadata and it automagically made the controls appear). After digging around on and off for weeks, we found a vague single reference to a constant in Google’s Universal Android Media Player (UAMP). Googling the constant gave two results: the UAMP reference and a nice piece of documentation on it:

PlaybackState.CustomAction.Builder actionBuilder = new PlaybackState.CustomAction.Builder(action, name, icon);
Bundle actionExtras = new Bundle();
actionExtras.putBoolean(MediaControlConstants.EXTRA_CUSTOM_ACTION_SHOW_ON_WEAR, true);

Copying the code across helped us add our own “Explore” action to our music controls that gets you straight into the wearable app! Score!

Wear Notification
It’s a small feature, but one we desperately wanted.

Square device frame – Cyril Mottier

Round device frame – Daniele Bonaldo

SoundCloud Transition

We’ve concluded together with SoundCloud that 8tracks playlists will soon no longer be able to access SoundCloud tracks through the SoundCloud API. There are two important dates to note:

  • July 24th: You will no longer be able to add tracks directly from SoundCloud when creating an 8tracks playlist.  In addition, any previous uploads that had been supplanted with a SoundCloud track will revert to the original upload.
  • September 30th: SoundCloud tracks can no longer be streamed from existing 8tracks playlists, and any playlists that fall below the 8-song minimum will no longer be playable on iOS and Android (until additional tracks are added).

We are thankful for your hard work in creating amazing playlists on 8tracks. We want to keep tracks and playlists playable, while making the transition as easy as possible for you. More than 96% of all tracks included in playlists today will not be impacted by this transition. Here’s how we’ll address the remaining 4%:

  • Matching SoundCloud tracks to our music Library and replacing them — so that you don’t have to. We’ve already matched 90% of the SoundCloud tracks played over the last 6 months.
  • Signing additional deals with labels to add more music to the Library. Over the past 6 months, 8tracks has directly licensed music from some of the most popular labels in the world (9 million tracks). We expect to have more music available for creating playlists by the time the transition is complete, providing further coverage for missing tracks and unplayable playlists.
  • Notifying you at the end of August of what playlists and tracks will be affected. During September, we will continue to match more music to the growing Library, and DJs will have the option to add tracks to playlists that have been impacted.

We’re sorry that this may create work for you; the only assignment we’d like to give you is to dance and smile. We’ll work as hard as we can to preserve your playlists. Below is a list of questions we expect you might have regarding the transition, along with our responses.


1. What’s the SoundCloud integration?

2. What’s going to change?

3. When is this happening?

4. What does this mean for my playlist that has SoundCloud tracks?

5. What does this mean for 8tracks?

6. What will happen to the playlists that no longer include 8 playable tracks?

7. What will happen to the tracks that I’ve favorited on 8tracks that show up on SoundCloud?

8. Can I still favorite tracks and have them show up in my SoundCloud?

9. If I’m a SoundCloud artist and I still want my music on 8tracks, what can I do?

10. I love 8tracks. How can I help?

11. Why are you waiting until August to tell me which songs will be replaced?

1. What’s the SoundCloud integration? Both SoundCloud and 8tracks have benefit from an integration introduced nearly 5 years ago, allowing 8tracks DJs to search for and add SoundCloud tracks to their playlists. 8tracks plays an important role in exposure for independent artists, and the SoundCloud API has helped drive this objective.

2. What’s going to change? We’ve together concluded that the time has come for 8tracks to discontinue use of SoundCloud’s API. We have been preparing for this event by signing direct deals with labels and distributors, amassing more than 9 million songs in our Library so far. We’ve been working with SoundCloud to ensure a smooth transition, as we scale back our streaming of their content in the the coming months.

3. When is this happening? As of today, SoundCloud will no longer be available in the 8tracks playlist creation choreography. As of October 1st, listeners will no longer be able to stream from 8tracks playlists those SoundCloud tracks that were not matched to our licensed content library.

4. What does this mean for my playlist that has SoundCloud tracks? Roughly 96% of all tracks included in playlists will not be affected. The remaining 4% of content will need to be replaced, and we’re going to help you do that. Here’s how:

  • We have already begun to match tracks originally selected from SoundCloud to those available in our Library; we expect to match 90%+ of all SoundCloud content
  • We will continue to license music to expand the Library and will replace SoundCloud tracks that are currently unmatchable, when possible, with the objective of returning each playlist to its full, original tracklist
  • All DJs will receive an email in August that includes links to the playlists and specific tracks that we are unable to match at that point

5. What does this mean for 8tracks? Over the last year, we have launched and grown our Library, which now includes more than 9 million tracks from independent labels and artists. We are committed to growing this Library and expect to have more label deals to announce soon.

6. What will happen to the playlists that no longer include 8 playable tracks? As of October 1st, if a playlist still falls under the minimum number of tracks, it will no longer be playable — except on the 8tracks website using YouTube. However, we’ll maintain the playlist and, as tracks continue to be added to the Library through direct label deals, we will match the new available content. Once a playlist reaches the 8-track minimum, it will be available again for streaming on our mobile apps.

7. What will happen to the tracks that I’ve favorited on 8tracks that show up on SoundCloud? Nothing. Those tracks will still show up in your favorites on SoundCloud.

8. Can I still favorite tracks and have them show up in my SoundCloud? Unfortunately, no.

9. If I’m a SoundCloud artist and I still want my music on 8tracks, what can I do? We’ve recently partnered with a number of labels and aggregators to populate our Library. If you already distribute your music through one of them (listed here and here), you’ll be available in the Library, now or soon. However, if you do not distribute your works through one of these aggregators, we’d encourage you to consider TuneCore, which provides a relatively inexpensive way for artists to make their content available on multiple digital music platforms, including 8tracks. We also are planning a way for artists to directly upload songs into the Library. Please enter your email below if you’d like to be notified when an upload option is available.

10. I love 8tracks. How can I help? We love you too. If you’ve published a playlist on 8tracks, please look for an email from us in August; we’ll identify playlists and tracks that we’re still unable to match. While we’ll continue to enter into direct deals with labels and aggregators to provide further matches and coverage, we encourage you to replace any remaining SoundCloud tracks with songs from your personal collection, at your option.

11. Why are you waiting until August to tell me which songs will be replaced? We want to save you from unnecessary work. There are millions of songs we have already licensed but have yet to identify and match. It will take us some time to complete all of this, but once it’s complete we’ll notify you, leaving you at least a month to make any necessary edits to your playlist.

Introducing Web 4.0 – A Smarter Web Experience to Help You Better Discover Playlists You’ll Love

Web 4.0 - Home feed

We’re excited to share with you today the beta launch of our smarter, redesigned website that suggests playlists based on your listening preferences. Now, when you log-in, you’ll be taken to your new, Facebook-like, home feed that surfaces 8tracks’ depth of content. The feed provides personalized recommendations for playlists that draw from a variety of inputs, including your expressed preferences – tag searches or selections, liking a playlist or track – and social cues, such as the other community members that you follow.

The new design also includes a greater emphasis on our community of unique DJs with their profile images assigned to each playlist in search results and in the playlist description:

Web 4.0 - Playlist page
Additionally, we’ve simplified search and explore, providing a unified tag design around activity, mood, genre, or artist:

Web 4.0 - Unified Tags

We’re going to unroll the beta website over the next few weeks. A limited number of listeners will be presented the opportunity to try the new beta site as of today. Within a month, 8tracks will extend the option to the larger community to toggle between the two versions, before making a final switch to the latest one.

We're Getting Closer to Mobile Playlist Creation

8tracks Library and Crate

We’re pleased to announce that we have secured a $2.5 million debt financing from Silicon Valley Bank. Additionally, because we’re on a roll, we also want you to know that we’ve partnered with TuneCore, Naxos, Black Hole Recordings and Armand Van Buuren’s Armada Records. These partnerships will add up to 2.5 million tracks our Library, including songs by Passenger, Andrew Belle, Armin van Buuren and more. With the new funds, we plan to grow our product and engineering teams that are expanding our personalization system and bringing playlist creation to our mobile apps. These funds and new partnerships bring us closer to making your biggest request a reality, so hang in there!

Welcome Jon Maples to 8tracks

JonM_headshot (1)

We’re pleased to announce longtime digital music executive Jon Maples has joined our team in the role of vice president of product.

Working alongside our expanding product and engineering teams, Maples will be responsible for guiding 8tracks’ product development, including personalization features to help surface the best playlists for each community member.

Maples served as the vice president of product and content at the digital music service, Rhapsody, for five years. Under his tenure, he led the company’s transition from desktop to mobile, helping generate major growth in user subscriptions and engagement. A veteran digital product and content consultant, Maples covered digital music at Red Herring as well as built online properties at Netscape and the San Francisco Bay Guardian. He also comments often about the digital music industry and has contributed to Billboard, Re/Code, Hypebot, RAIN News and more.

Introducing 8tracks Library and Crate

DJ Crates and Library

We’re excited to announce the launch of our new Library and Crate, which together will help you more easily discover and create playlists with music from independent artists. The Library will include over 6.5 million songs provided by INgrooves, CD Baby, Dim Mak, DashGo, featuring independent artists like Steve Aoki, James Vincent McMorrow, Edward Sharpe and The Magnetic Zeros and more.

Now, when you’re enjoying a playlist and you find a song that you love, go ahead and favorite it! If that song is available through the new Library, it will be added to your Crate so that later, when you’re making the perfect playlist, you can easily find it. On the mix creation page, you’ll also now be able to search both the Library and Crate by artist name or song title to find an old favorite track that is right for your new playlist.

This is just the beginning! We expect this to be a big year and want to thank you for all your support!



Introducing 8tracks Charts – Best of 2014



Ever wondered what the best music is for driving? How about working out? We decided to find out. Looking at this past year, we combed our listeners’ feedback across our 360 million hours of streaming to uncover their favorite artists and songs for certain activities and moods.

Looking across tens of thousands of playlists for popular tags like driving, feeling good, working out, studying and in love, we found the top 10 songs that our listeners shared and enjoyed the most for each respective tag in 2014.

And voila! Today we’re launching 8tracks Charts, a collection of playlists that chart the top 100 songs for some of our listeners’ favorite moments.


Chromecast on Web



Today we’re excited to bring a little bit of holiday magic into your lives. Specifically the type of magic that allows you to beam 8tracks playlists from your laptop to your TV. You might call it witchcraft, but actually it’s 8tracks Chromecast compatibility – now on web. 

That’s right, everyone – as of today if you have a Chromecast setup you can play 8tracks playlists on your TV while controlling them from your browser. So if you’re in the kitchen making a crazy awesome holiday meal, but still want to be in charge of the music (which you should be, you’re cooking for everyone in this hypothetical situation), then you can still have complete control. It’s your domain. 

To try it out, download the Chromecast extension if you haven’t already, then launch the Chromecast player on your TV from any 8tracks playlist page.

The Best of 2014 Collection


It’s December, everyone, which means the time has come to reflect on an amazing year in music. We thought about just sharing some of the tracks we loved from 2014, but we think we have something way better: a whole collection of playlists assembled by the record labels, artists, and blogs responsible for sharing and creating some of this year’s best music.

Collecting picks from our friends at Warp, UltraMusic, Domino, Polyvinyl, Drowned in Sound, and many more, our Best of 2014 is (we think) the definitive collection and the last word on the year’s most exciting music, chosen by the folks who make it happen.