Backstage Blog

RSS logo

Building the new SoundCloud iOS application — Part II: Waveform rendering

September 15th, 2014 by Richard Howell

When we rebuilt our iOS app, the player was the core focus. The interactive waveform was at the center of the design. It was important both that the player be fast and look good.

Initial implementation

We iterated on the waveform view until it was as responsive as possible. The initial implementation focused on replicating the design, which heavily used CoreGraphics. A single custom view calculates the current bar offset based on its time property. It then draws each of the waveform samples that are in the current visible section of the waveform. Each sample is either rendered as a filled rectangle for unplayed samples, or by adding clip paths to the context then drawing a linear CGGradient

Read more…

Building the new SoundCloud iOS application — Part I: The reactive paradigm

July 7th, 2014 by Mustafa Sezgin & Jan Berkel

Recently, SoundCloud launched the new iOS application which was a complete rewrite of the existing iOS application. The Mobile engineering team saw this as an opportunity to build a solid foundation for the future of SoundCloud on iOS and to experiment with new technologies and processes at the same time.

In the world of mobile, you deal with data, errors, threads and concurrency a lot. The common scenario starts with a user tapping on the screen. The application jumps off of the main UI thread…

Read more…

Real-Time Counts with Stitch

July 3rd, 2014 by Emily Green

Here at SoundCloud, in order to provide counts and a time series of counts in real time, we created something called Stitch.

Stitch was initially developed to provide timelines and counts for our stats pages, which are where users can see which of their tracks are played and when.

SoundCloud Stats Screenshot

Stitch is a wrapper around a Cassandra database. It has a web application that provides read access to the counts through an HTTP API. The counts are written to Cassandra in two distinct ways, and it’s possible to use…

Read more…

Building Products at SoundCloud—Part III: Microservices in Scala and Finagle

June 13th, 2014 by Phil Calçado

In the first two parts of this series, we talked about how SoundCloud started breaking away from a monolithic Ruby on Rails application into a microservices architecture. In this part we will talk a bit more about the platforms and languages in which we tend to write these microservices.

At the same time that we started the process of building systems outside the Mothership (our Rails monolith) we started breaking our large team of engineers into smaller teams that focused on one specific area…

Read more…

Building Products at SoundCloud—Part II: Breaking the Monolith

June 12th, 2014 by Phil Calçado

In the previous post, we talked about how we enabled our teams to build microservices in Scala, Clojure, and JRuby without coupling them with our legacy monolithic Rails system. After the architecture changes were made, our teams were free to build their new features and enhancements in a much more flexible environment. An important question remained, though: how do we extract the features from the monolithic Rails application called Mothership?

Splitting a legacy application is never easy, but…

Read more…

Building Products at SoundCloud —Part I: Dealing with the Monolith

June 11th, 2014 by Phil Calçado

Most of SoundCloud’s products are written in Scala, Clojure, or JRuby. This wasn’t always the case. Like other start-ups, SoundCloud was created as a single, monolithic Ruby on Rails application running on the MRI, Ruby’s official interpreter, and backed by memcached and MySQL.

We affectionately call this system Mothership. Its architecture was a good solution for a new product used by several hundreds of thousands of artists to share their work, collaborate on tracks, and be discovered by the…

Read more…

Roshi: a CRDT system for timestamped events

May 9th, 2014 by Peter Bourgon

Let’s talk about the stream.

The SoundCloud stream represents stuff that’s relevant to you primarily via your social graph, arranged in time order, newest-first. The atom of that data model, an event, is a simple enough thing.

  • Timestamp
  • User who did the thing
  • Identifier of the thing that was done

For example,

If you followed A-Trak, you’d want to see that repost event in your stream. Easy. The difficult…

Read more…

Introducing JavaScript SDK version 2

May 1st, 2014 by Erik Michaels-Ober

SoundCloud is pleased to introduce a new major version of the SoundCloud JavaScript SDK. In version 2, we’ve rewritten much of the internal code, resulting in better performance for your JavaScript applications and support for more streaming standards, such as HTTP Live Streaming.

You can test the new version by pointing your JavaScript applications to https://connect.soundcloud.com/sdk-2.0.0.js.

We’ve also created a guide to help you upgrade from version 1 to version 2.

JavaScript SDK version…

Read more…

Irrational Fun: Find Yourself at Berlin Buzzwords

April 27th, 2014 by Erik Michaels-Ober

We were counting down the days until Berlin Buzzwords on May 25, when we realised that it would be great if you came too! With that in mind, we’ve created a contest. One lucky winner will receive a free ticket to Berlin Buzzwords, including travel expenses and accommodation. Here are the details about how to apply.


The ratio of a circle’s circumference to its diameter, represented by the Greek letter π, is an irrational number—it never terminates or repeats. Your goal is to find the SoundCloud…

Read more…

Welcome to SoundCloud's redesigned developer site

April 11th, 2014 by Erik Michaels-Ober

We’ve taken some time to bring all our developer resources together into a single site. In doing so, we’ve reorganized the layout to make things easier to find and also given the site a fresh new look.

We hope you like it!

If you have any feedback about the new design, follow @SoundCloudDev on Twitter and let us know.

Read more…