I am currently looking to create something similar to the following apps on the play store which focuses on time / tempo stretching the audio for musicians to add something to my development portfolio. I previously have created an android app in android studio using java for a semester project in univeristy, but still very much a beginner to mobile development.
Music Speed Changer
https://play.google.com/store/apps/details?id=com.smp.musicspeed&hl=en_CA&gl=US
Tempo SlowMo - BPM Slow Downer
https://play.google.com/store/apps/details?id=com.martianstorm.temposlowmo&hl=en_CA&gl=US
I have spent many days trying to figure out how to implement this feature, but I can't seem to find anything that works the way I want it to.
I first ruled out SoundPool because to my understanding, it is only used for short audio clips rather than a full length audio track. So far I have tried implementing this slowdown feature using MediaPlayer and Exoplayer by giving them a PlayerParamerters object with different playback speed, but both end up giving the same result of increased or decreased pitch with increased or decreased speed respectively. Another thing to point out is that the audio quality seems significantly lower when playback speed is adjusted. This is somewhat expected, but compared to the same audio played in these apps, it is a significant downgrade.
I have also looked at Oboe C++ library for Android as I thought this might help, but I think it focuses on audio latency rather than actually altering audio. There is also the Superpowered library, but I believe that requires a paid license which may be a problem if I ever want to release the app on the playstore commercially.
I've seen some open source projects like VLC player for android has a variable playback speed without pitch changes, but the app is so large it is hard to follow it.
I would like to know if anyone else has run into this problem, and if so, how or what did you do to go about solving this problem?
Thank you very much :)