We believe in the power of the open source community. For almost five years we have had the opportunity to use dozens of SDKs from GitHub. They saved us a huge amount of man hours and helped us focus on what is really important: the development of an amazing experience for our users. It's time to pay off debts.
Pandora Player is a lightweight iOS music player based on AudioKit and written completely in Swift. It is designed to be fast, save a device’s memory, and please users with its excellent design. Now, Pandora Player is available for download on GitHub, so anyone can implement it in their application.
The tale of how we created our first corporate product is heavily based on those who directly participated in its development. Here, we will talk about how our involvement in the community turned into an unusually useful library of information. In addition, we will discuss how we found users around the world thanks to our success on the first lines of GitHub ratings within the first few days of its release. At present, we already have about 500 stars, which means 500 people have downloaded and liked our work.
What Management Says: Our Ideas, Goals, and Strategies
Danil (Manager of Pandora Player): “The idea to start developing our own corporate product came to us about a year ago. From the very beginning, we had many ideas, but most of them had to be abandoned for various reasons.”
Did you know that we did not immediately decide to develop a player? Before we came to this decision, we had to sort through the masses of options, taking a few wrong turns along the way.
“Soon, we came to the conclusion that we would develop our Messenger platform, since there were not enough good open source analogs at that time. At that stage, we realized that the development of the whole product for several platforms on one's own is a very difficult task, over which several people should work constantly. Without leaving the idea entirely, and continuing to work on it, we started looking for niches that would be useful for the open-source community - here and now - and release new products more often, with the most relevant ideas and goals in mind.”
The decision came suddenly. It was very near, lying on the surface, and no one had noticed it before. As soon as the gap was discovered, we immediately began working on the embodiment of the idea.
Anton (CEO): “We have been developing lots of Audio-related apps at Applikey and experienced an acute lack of a lightweight, clean, and easy-to-use player, able to play iPod and bundle music, with a nice UI for the controls and real time two-channel visual equalizer.”
Some time passed before we found the right solution but, in the end, our search turned out to be a success.
Danil: “Pandora Player is our first product of this kind, which we will continue to develop and improve, adding new SDK and features to it. It was important for us to receive feedback from the community and, given that three days after the project appeared on Github it got first place in trends among the Swift language, we directly hit the bullseye.”
Development Challenges: A Full View
During the development stage, we encountered a number of problems. First of all, an integral part of the player is an animated curve, and we faced the problem of getting and parsing the audio stream for display. Several third-party libraries were tested but, finally, we settled on a framework called AudioKit, as it allowed us to receive and parse the audio stream, and also draw a curve. But, even here, there was quite a task waiting for us:
Pasha (Developer): “I had to work with the custom rewind slider and, partially, the carousel playlist. The main part I was most involved in was the dynamic curve changing in real time, depending on the frequency and amplitude of sound. The curve provided in the framework, by default, did not fit the original design. To make it smooth, I implemented a special variation of the moving average algorithm.”
As you may have guessed, this is not the only difficulty that needed to be overcome in order to achieve the desired result.
Borys (Developer): “There was another problem we faced while implementing support for playback from several sources, namely music taken from the Bundle and the device internal library. The AudioKit player plays the song only when it has the song URL. Songs taken from the Bundle have a URL by default, but not those from iTunes.”
The project could be threatened if our specialists did not find a solution capable of ensuring the playback from all required sources. Fortunately, the solution was quickly found:
“We can get the entire list of songs from the library, but these songs may not be downloaded to the device, as they do not have a physical address. So, we did not take these into account, and those songs having a physical address had to be converted to AVPlayerItem so that the player could play them.”
In other conditions, the solution could significantly reduce the performance of the player, thereby depriving it of its competitiveness in the market. This did not happen to stand in the way of our developers:
“This was achieved by an asynchronous export of one object to another. Since the export is asynchronous, we rewrote the initialization of the player so that the user would immediately display the interface and some metadata without delay, and the export of the songs to the desired format would be processed in the background.”
What Was Memorable About the Brave New Project?
As it turned out, the developers liked the work on the project, including the work with animations, application optimization, solving non-standard tasks, etc. All of them noted a sharp contrast between the everyday range of tasks and this extraordinary project that made them refresh some of their otherwise forgotten knowledge and open their talents to this part of the industry.
Ivan (Developer): “During my contribution to the project, I was working on several tasks. They were all quite memorable and interesting because, instead of the usual layout that appears to be pretty similar across the series of applications, I got to experience working with animations, multithreading, recall some math, and so on. My main task was implementing transition animations when changing songs. The first thing was to expand the song coverage as it approaches the center of screen, and shrink it as it goes off. The second was to make a fading transition animation of background coverage while dragging the song away to play the next one.”
Pasha: “I worked on the project since the beginning, when it was simply called a 'player.' I participated from the start of development until the first working prototype came out. The tasks were different, and I managed to work both on the layout and on the logic. Many features in the player were improved, corrected and even re-written through the efforts of several developers. In general, I am satisfied with the level of participation in this project. Everybody did a great job!”
Ivan: “Another cool task I was working on was to change the song name label color to the main coverage theme color. Although I didn’t write any algorithms for extracting the mean color from the image, I had to optimize this process among the whole list of songs, so as not to impede on the app’s performance. Overall, I got a great impression from working on this project.”
Future Plans and Aspirations
The work on the project resulted in an excellent product, and we are happy to see how our efforts find application and adoption in the community. It was especially important for us to create something worthwhile, which could make lives for our colleagues easier and allow them to pay more attention to other things. According to Anton (CEO), “Pandora Player is the first, but certainly not the last, component we've created. I hope you will enjoy using it as much as we did while creating it.”
Danil: “Our project turned out to be interesting and useful for other developers, which motivates us to work more towards this direction, improve the product, and develop even more new libraries.”
And, while we are always in search of new ideas on how to make the lives of many more people both interesting and meaningful, we would love for you to experience Pandora Player. Visit our project’s GitHub page and let us know your feedback. We love constructive criticism, and having the opportunity to continuously grow and master our product!