Reputation: 9827
I have managed to play audio files using ffmpeg and AudioTrack class in my android project. I can change the speed of audio using AudioTrack class setRate method. But it also change the pitch of audio, I want to change only Tempo of audio but I found no solution on net.
anyone can please help me on this as there is no support for this.
Upvotes: 7
Views: 23901
Reputation: 6137
The answer by @Lri does not work for me, it shows error:
'atempo=1.2' is not a suitable output format
The next command works properly:
ffmpeg -i input.mkv -filter:a "atempo=2.0" -vn output.mkv
Taken from ffmpeg.org.
Upvotes: 1
Reputation: 27633
You can use the atempo filter in ffmpeg 1.0 and later:
ffmpeg -i input.wav -f:a atempo=1.25 output.wav
atempo
only accepts values between 0.5 and 2.0, but you can bypass the limitation by chaining multiple filters:
ffmpeg -i input.wav -f:a atempo=2,atempo=1.5 output.wav
Upvotes: 16
Reputation: 9827
Solution : I tried SoundTouch library. I compiled it successfully for android but then I failed to use its function because I don't know how to use this library to load audio.
But after that I tried library called Sonic. Its basically for Speech as it use PSOLA algo to change pitch and tempo. But its ok.
Upvotes: 8
Reputation: 22342
Pitch and tempo are very strongly linked. What you're trying to do is called "time stretching", and is a somewhat complicated algorithm. You can find information online about it, and a java library for it can be found here, along with a paper describing the process.
Upvotes: 2