有什么更好的方法来播放mp3/wav和改变速度(音频速度)Android?

Bhu*_*der 5 android

我试过了

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
Run Code Online (Sandbox Code Playgroud)

什么会更好用?任何想法或建议?我该怎么办?

arb*_*buz 1

自上次回答以来,有些事情发生了变化,所以我将尝试提供一些新信息:

TL;DR: ExoPlayer 是最好的解决方案。它使用 Sonic 并且更容易编译。

媒体播放器

  • 优点:Android API的一部分,无需添加库,最快的解决方案
  • 缺点:速度和音调仅适用于 API 23 及更高版本

如何改变速度:

mediaPlayer.setPlaybackParams(new PlaybackParams().setSpeed(1.5f));
Run Code Online (Sandbox Code Playgroud)

索尼克NDK

  • 优点:适用于旧 API,质量好
  • 缺点:与 PCM 一起使用,因此需要 MP3 解码器,C 编译使您的项目和构建过程变得复杂

但是......缺点并没有那么糟糕。

PCM 的事情实际上不再是问题了,因为 Android 有 MediaCodec API,所以你不需要外部 MP3 解码器。

我在github上有一个项目,它使用Sonic与Android的解码器并为Android Studio配置(原始项目是Eclipse): https://github.com/mega-arbuz/android-mp3-sonic-ndk

您还可以避免编译 C 代码并使用 Sonic 的 JAVA 实现: https: //github.com/waywardgeek/sonic/blob/master/Sonic.java

外放播放器

  • 优点:使用 Sonic 实现速度/音高/速率,质量好,与 API 16 兼容,由 Google 支持
  • 缺点:不像MediaPlayer一样是SDK的一部分,有点大(6k方法,1MB),使用比MediaPlayer更复杂

使用 ExoPlayer 创建 Activity 的教程

文档和样本

完成本教程后,速度更改很简单:

player.setPlaybackParameters(new PlaybackParameters(1.5f, 1.0f));
Run Code Online (Sandbox Code Playgroud)

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