降低AudioPlayer的播放速度会严重降低正在播放的音频的质量;音频变得非常"流畅";"嘈杂";。有没有办法解决这个问题,或者这是just_audio实现的问题?
再现:
final AudioPlayer player = AudioPlayer(); // Create audio player
player.setAsset("..."); // Load audio file
player.setSpeed(0.5); // Halve speed
player.play(); // Start playing
在回答这个问题之前,时间拉伸是一件很难实时完成的事情,因为它必须在不拉伸声波的情况下拉伸时间(拉伸声波会降低频率,从而降低音高,因此它必须拉伸时间,同时用现有声波的预制扩展来填补空白(。因此,最好的实时算法仍然会引入伪影和失真。
现在,为了回答您的问题,just_audio没有提供任何更改时间拉伸算法的选项,但它确实为每个平台使用了可用的最佳算法,用于一般用途。安卓系统使用的Sonic比安卓系统自带的算法质量更好。在iOS/AcOS上,使用了AVAudioTimePitchAlgorithmTimeDomain
,在苹果提供的不同算法中,它似乎在低于1.0的速度下产生的失真最小,尽管较新的iPhone/iOS版本可能会产生更高质量的输出。在网络浏览器上,它使用网络浏览器提供的任何算法。
如果你需要尝试替代方案,你需要复制just_audio并编辑选择算法的代码。你不太可能为Android和web找到更好的选项,但你可能想尝试不同的iOS/AcOS算法,在代码中搜索AVAudioTimePitchAlgorithmTimeDomain
,并将其更改为苹果文档中列出的其他选项之一。如果你有专门的用例,你可能会发现其他算法中的一个效果更好。