网上说0.8.8版本解决变声,不需要重新编译c代码,只需要在java代码里加上如下配置:

    配置成1是变声,0是不变声
    但是事实上,经过我的实践发现配置成1才是不变声,0是变声。

    1. ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1);

    另外还有一点很重要的,这个配置放在哪个地方也决定了能否起作用,关于这一点我踩了好多坑:
    坑一:放在mediaPlayer.setSpeed前面是不行的,
    坑二:直接在new IjkMediaPlayer 后面也是不行的
    第三次试验,按照github上一位大哥说的,要放在prepare之前。https://github.com/bilibili/ijkplayer/issues/3569
    我的代码里 面只有 mMediaPlayer.prepareAsync()这个,于是我就在prepareAsync之前了, 代码位置如下:

    1. /**
    2. * 添加file文件到MediaPlayer对象并且准备播放音频
    3. */
    4. private void prepareMusic(String musicUrl) {
    5. //获取文件路径
    6. try {
    7. mMediaPlayer.stop();
    8. mMediaPlayer.reset();
    9. mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    10. //此处的两个方法需要捕获IO异常
    11. //设置音频文件到MediaPlayer对象中
    12. mMediaPlayer.setDataSource(musicUrl);
    13. mMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "soundtouch", 1);
    14. mMediaPlayer.prepareAsync();
    15. } catch (IOException e) {
    16. Log.d(TAG, "设置资源,准备阶段出错");
    17. e.printStackTrace();
    18. }
    19. }

    运行起来一播放, 不变调了,大功告成!!!