【问题标题】:Is there any library for gapless audio looping?是否有任何用于无缝音频循环的库?
【发布时间】:2016-08-25 06:45:31
【问题描述】:

我尝试过 MediaPlayer、ExoPlayer、SoundPool。在循环 15 秒长的音频文件时,它们都有一个间隙。有没有解决方案或库?

【问题讨论】:

标签: android android-mediaplayer exoplayer


【解决方案1】:

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 来管理 MediaSource 的循环。 您可以将所有媒体源组合在一个树中。

所有这一切的唯一问题是您在准备中提供给播放器的 MediaSource 结构是静态的。

【讨论】:

    【解决方案2】:

    您可以使用 LoopingMediaSource 作为来源。

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

    参考:https://google.github.io/ExoPlayer/guide.html#seamlessly-looping-a-video

    【讨论】:

    • 我在 ExoPlayer 2 上听到非常明显的差距。我也尝试过 ogg
    猜你喜欢
    • 1970-01-01
    • 2012-09-14
    • 2019-06-20
    • 2023-03-17
    • 2018-04-06
    • 1970-01-01
    • 2012-12-06
    • 2014-01-12
    • 2015-05-03
    相关资源
    最近更新 更多