我试过了

1) MediaPlayer(it Doesnt support speed change).
2) SoundPool (play only small audio files)
3) AudioTrack (tried with JLayer- there is delay. decoder is slow).
4) Sonic NDK master - unable to play mp3 audio files

用什么更好?有什么想法或建议吗?我该如何接近?

最佳答案

自上次回答后,有些事情发生了变化,因此我将尝试提供一些新信息:
外星人是最好的解决方案。它使用Sonic而且更容易编译。
中型球员
优点:android api的一部分,不需要添加库,最快的解决方案
缺点:速度和俯仰只适用于API23及以上
如何改变速度:

mediaPlayer.setPlaybackParams(new PlaybackParams().setSpeed(1.5f));

音速NDK
优点:使用老API,质量好
缺点:与pcm一起工作,因此需要mp3解码器,c编译会使项目和构建过程复杂化
但是…犯人也没那么坏。
实际上,pcm不再是个问题,因为android有mediacodec api,所以您不需要外部mp3解码器。
我在github上有一个项目,它使用sonic和android的deocder,并为android studio配置(原始项目是eclipse):
https://github.com/mega-arbuz/android-mp3-sonic-ndk
还可以避免编译C代码,并使用Java实现Sonic:
https://github.com/waywardgeek/sonic/blob/master/Sonic.java
放映者
优点:音速/音高/速率采用Sonic,质量好,可与API 16配合使用,谷歌支持
缺点:不像mediaplayer那样是sdk的一部分,有点大(6k方法,1MB),使用起来比mediaplayer复杂
Tutorial for creating Activity with ExoPlayer
Documentation and samples
完成教程后,速度更改很简单:
player.setPlaybackParameters(new PlaybackParameters(1.5f, 1.0f));

几年前,带解码器的sonic是最好的解决方案,但现在exoplayer是最好的。它支持足够老的api,使用sonic,具有相同的语音质量,不需要复杂的编译和项目设置。

09-11 08:48