Create a music player with features like trimming, sound effects, crossfade, breaks, and tempo changes.
Initially, we thought about manipulating audio samples and removing some of them in order to trim or mix songs. But this turned out to be problematic because we would have to download each song separately in order to analyze them, so we decided to depend on song playback. This solved issues like battery draining and higher bandwidth usage. For crossfade, we use two players and synchronize them together based on the playback. For each sound effect, we use a separate player that starts playing based on main song playback. A similar approach was taken for other features like tempo change.
Ability to play music and video both on mobile and remote devices. Additionally, a user should be able to play music from all his favorite media sources.
We integrated multiple players within the app such as Chromecast, AppleMusic, and Airplay. It required us to create a robust abstraction over all those players to seamlessly switch between all media sources.
Users should have offline access to downloaded content, in order to save as much bandwidth as possible while playing media.
To make the app work offline we had to introduce both API responses and media data caching mechanisms.