我尝试过MediaPlayer,ExoPlayer,SoundPool。当循环播放15秒长的音频文件时,所有这些都有差距。有没有解决方案或库?
答案 0 :(得分:0)
Exoplayer2的新版本支持无间隙音频,从id3标头读取所有信息。 您只需创建一个包含所有曲目的ConcatenatingMediaSource,如果它们在标题中包含无间隙信息,则播放器本身将自动将它们组合在一起。
使用Exoplayer2演示:
String[] uriStrings = new String[]{
Environment.getExternalStorageDirectory()+"/Music/gapless/temp1.mp3",
Environment.getExternalStorageDirectory()+"/Music/gapless/temp2.mp3"
};
uris = new Uri[uriStrings.length];
for (int i = 0; i < uriStrings.length; i++) {
uris[i] = Uri.parse(uriStrings[i]);
}
MediaSource[] mediaSources = new MediaSource[uris.length];
for (int i = 0; i < uris.length; i++) {
mediaSources[i] = buildMediaSource(uris[i], extensions[i]);
}
MediaSource mediaSource = new ConcatenatingMediaSource(mediaSources);
player.prepare(mediaSource, !shouldRestorePosition);
还有LoopingMediaSource来管理MediaSources的循环。 您可以在树中组合所有媒体源。
所有这一切的唯一问题是你在准备中给予玩家的MediaSource的结构是静态的。
答案 1 :(得分:0)
您可以使用LoopingMediaSource作为源代码。
DTO
参考:https://google.github.io/ExoPlayer/guide.html#seamlessly-looping-a-video