我试过了
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
什么会更好用?任何想法或建议?我该怎么办?
最佳答案
自上次回答以来,有些事情发生了变化,所以我会尝试提供一些新信息:
TL; DR:ExoPlayer是最好的解决方案.它使用Sonic并且更容易编译.
媒体播放器
>优点:Android API的一部分,无需添加库,最快的解决方案
>缺点:速度和音调仅适用于API 23及更高版本
如何改变速度:
mediaPlayer.setPlaybackParams(new PlaybackParams().setSpeed(1.5f));
Sonic 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代码并使用Sonic的JAVA实现:
https://github.com/waywardgeek/sonic/blob/master/Sonic.java
ExoPlayer
>优点:使用Sonic获得速度/音高/速率,质量好,适用于API 16,由Google提供支持
>缺点:不像MediaPlayer那样的SDK的一部分,有点大(6k方法,1MB),使用比MediaPlayer更复杂
Tutorial for creating Activity with ExoPlayer
完成本教程后,速度变化很简单:
player.setPlaybackParameters(new PlaybackParameters(1.5f,1.0f));
几年前,带有解码器的Sonic是最好的解决方案,但现在ExoPlayer是最好的.它支持足够老的API,使用Sonic,具有相同的语音质量,不需要复杂的编译和项目设置.