我想使用ExoPlayer实现一个匹配Crossfade功能的节拍。基本上我有一个概念应该如何工作,但我发现它很难适应ExoPlayer。
请允许我首先写下我想要做的事情,以便你能理解这个案子。 你可能知道Beat Matching Crossfade可以从一首歌曲无缝切换到另一首歌曲。此外,它还可以在交叉渐变期间将第二首歌曲速度调整为第一首歌曲速度。
所以我的计划如下: 1.加载歌曲A和B,使它们都开始缓冲。 歌曲A和B的解码样本存储在缓冲器BF1和BF2中。 3.将有一个名为MUX的类,它是一个主缓冲区,包含歌曲缓冲区BF1和BF2。 MUX为播放器提供音频样本。提供给播放器的样品是BF1样品或来自BF1和BF2的混合样品(如果存在交叉淡化)。 4.当缓冲区到达交叉淡化点时,样本将发送到Analyzer类,以便它可以分析来自两个缓冲区的样本并修改它们以进行交叉淡入淡出。 Analyzer将修改后的样本发送到MUX,MUX更新了它的主缓冲区。 完成交叉渐变后,从播放列表中加载下一首歌曲。
我的主要问题是如何混合两首歌曲,以便我可以像MUX一样实现类。 到目前为止我所知道的是我可以在MediaCodecRender.processOutputBuffer()方法中访问解码样本,所以从那时起我可以创建我的BF1和BF2缓冲区。
还有一个想法是创建两个ExoPlayer实例,当第一首歌正在播放时,第二首歌被分析并且它的样本被修改以进一步交叉淡入淡出,但我认为可能很难同步两个玩家所以节拍会匹配
提前感谢您的帮助!