Android 有没有无间隙音频循环库?

Android 有没有无间隙音频循环库?,android,android-mediaplayer,exoplayer,Android,Android Mediaplayer,Exoplayer,我试过MediaPlayer、ExoPlayer、SoundPool。当循环15秒长的音频文件时,他们都有一个间隙。是否有任何解决方案或库?新版本的Exoplayer2支持无间隙音频,读取id3标题中的所有信息。 您只需创建一个包含所有曲目的连接媒体源,如果它们包含无间隙信息到标题中,播放器本身将自动组合它们 使用Exoplayer2演示: String[] uriStrings = new String[]{ Environment.getExternalStorageDire

我试过MediaPlayer、ExoPlayer、SoundPool。当循环15秒长的音频文件时,他们都有一个间隙。是否有任何解决方案或库?

新版本的Exoplayer2支持无间隙音频,读取id3标题中的所有信息。 您只需创建一个包含所有曲目的连接媒体源,如果它们包含无间隙信息到标题中,播放器本身将自动组合它们

使用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);
String[]uriStrings=新字符串[]{
Environment.getExternalStorageDirectory()+“/Music/gapless/temp1.mp3”,
Environment.getExternalStorageDirectory()+“/Music/gapless/temp2.mp3”
};
Uri=新Uri[uriStrings.length];
for(int i=0;i
还有LoopingMediaSource来管理MediaSources的循环。 您可以将所有媒体源合并到一个树中


所有这些的唯一问题是,您在prepare中提供给播放器的媒体源的结构是静态的

新版本的Exoplayer2支持无间隙音频,读取id3标题中的所有信息。 您只需创建一个包含所有曲目的连接媒体源,如果它们包含无间隙信息到标题中,播放器本身将自动组合它们

使用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);
String[]uriStrings=新字符串[]{
Environment.getExternalStorageDirectory()+“/Music/gapless/temp1.mp3”,
Environment.getExternalStorageDirectory()+“/Music/gapless/temp2.mp3”
};
Uri=新Uri[uriStrings.length];
for(int i=0;i
还有LoopingMediaSource来管理MediaSources的循环。 您可以将所有媒体源合并到一个树中


所有这些的唯一问题是,您在prepare中提供给播放器的媒体源的结构是静态的

您可以使用LoopingMediaSource作为源

MediaSource source = new ExtractorMediaSource(videoUri, ...);
// Loops the video indefinitely.
LoopingMediaSource loopingSource = new LoopingMediaSource(source);

Ref:

您可以使用LoopingMediaSource作为源

MediaSource source = new ExtractorMediaSource(videoUri, ...);
// Loops the video indefinitely.
LoopingMediaSource loopingSource = new LoopingMediaSource(source);

Ref:

您是否尝试过此mediaPlayer.setLooping(true)??当然但这两部剧之间的差距很小。我需要无间隙循环。试试这个你有没有试过这个mediaPlayer。设置循环(真)??当然但这两部剧之间的差距很小。我需要无间隙循环。试试这个,我听到ExoPlayer 2上有非常明显的间隙。我也尝试过ogg,我听到在ExoPlayer 2上有非常明显的差距。我也试过ogg