Iam尝试开发一个应用程序,我可以将音乐文件(mp3)的速度设置为1x,1.5x,2x,2.5x像这样。但MediaPlayer不支持此功能,除非它是23 api。我如何使用AudioTrack播放这个mp3文件并寻求定位。下面的代码给了我“zzzzzzz”的声音。
public void playAudio(){
int minBufferSize = AudioTrack.getMinBufferSize(8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
int bufferSize = 512;
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, minBufferSize, AudioTrack.MODE_STREAM);
String filepath = Environment.getExternalStorageDirectory().getAbsolutePath();
int i = 0;
byte[] s = new byte[bufferSize];
try {
final String path= Environment.getExternalStorageDirectory().getAbsolutePath() + "/folioreader/audio"+".mp3";
FileInputStream fin = new FileInputStream(path);
DataInputStream dis = new DataInputStream(fin);
audioTrack.play();
while((i = dis.read(s, 0, bufferSize)) > -1){
audioTrack.write(s, 0, i);
}
audioTrack.stop();
audioTrack.release();
dis.close();
fin.close();
} catch (FileNotFoundException e) {
// TODO
e.printStackTrace();
} catch (IOException e) {
// TODO
e.printStackTrace();
}
}
答案 0 :(得分:0)
AudioTrack可以播放未压缩音频(WAV)而不是任何压缩音频(MP3或AAC等)。您需要调用MediaCodec进行解码,然后使用Audio Track播放音频。请参阅这些链接,https://developer.android.com/reference/android/media/AudioTrack.html和https://developer.android.com/reference/android/media/MediaCodec.html。
为了更快地播放,请提供与所需速度成比例的采样率。对于前者以2倍速率播放8kHz音频,在AudioTrack中给出16kHz等等。这是粗暴的方式。