After months of blood sweat and tears, Jongla is thrilled to release our new app – SoundMash!
SoundMash is a service that allows you to have fun with sound. While there are hundreds of audio apps on Google Play, we want to shake things up by providing something unseen before.
If 2016 taught us anything, it is that if a picture is worth 1,000 words, an animated GIF is worth 10,000! GIF sharing services have sprung up and the juggernauts of the Internet are only now reacting to the craze. But Jongla, being ahead of the curve, wants 2017 to be the year of the GifMASH. GifMash = Gif + Your Voice.
GifMash with voice
The idea is we find an awesome gif, record a sound for it, play with several fun filters and then share our favourite creations with friends! What is really going on is that the processors and GPU are being slammed to animate tons of gifs, do realtime audio processing, and merge all of it together in a video. How can we get all that done fast while being responsive? Enter parallel processing!
SoundMash in action
Tech talk: making your CPUs work for their money
Audio processing can be thought of as a set of operations performed on a data stream that results in some sort of useable output – an FFT, a sound file, metadata, etc. As modern Android devices are now shipped with up to 8 cores, the question becomes how we can harness their power to process audio rapidly.
The naïve approach is to simply run various tasks on various processors and pray that they are executed in the correct order (we tried this).
The over-engineered approach is to come up with an intricate graph that triggers the execution of certain tasks after others (we tried this too…we try a lot of things at Jongla…). The problem with this is that the system spends a high amount of CPU time just traversing the graph, outweighing the benefits of parallelization.
The approach that SoundMash uses is to separate our algorithm into two stages: buffering and processing. Buffering represents the transmission of data between audio units whereas processing represents actions on the data once it is consumed by the unit. By conceptualizing the problem as such, all processing can happen in parallel because it is acting on local copies of data instead of the original data itself. Buffering, on the other hand, happens in series. This makes sure that the same data is never accessed by two functions at the same time, which can (does) lead to race conditions.
We have measured that only about 6% of time is taken at the buffering stage, which means that 94% of time is used on processing. So, 94% of our processing can be parallelized. Of course, as most machines only have up to eight cores, we can never parallelize every processing task (there are hundreds). But even with a thread pool of eight threads, we see a performance boost of two to three times the non-parallelized alternative.
Try now and give us feedback!
GifMash is one of several projects currently underway at Jongla that makes sound more social. Best ones of these projects will eventually become part of our SoundMash Android application. By following this blog, you’ll see the questions that we’re asking and (hopefully) answering over the next few months. Of course, we appreciate all the input we can get, so don’t hesitate to get in touch and share your thoughts. And, most importantly, download SoundMash!