我已经在很多引擎中实现了无缝音乐循环,但令人惊讶的是,相互之间的不一致性。因此,如果能节省有人时间,那么这里是一份总结:
循环元数据情况:
- Godot(Godot引擎)可以直接读取WAV文件中的smpl chunk。
- RPG Maker(RPG Maker)可以读取OGG文件中的LOOPSTART/LOOPLENGTH标签。
- Unreal(Unreal引擎)不读取任何循环点,尽管它会尊严cue标记。
- Unity(Unity引擎)没有内置的循环概念,需要手动安排循环。
- FMOD和Wwise(FMOD和Wwise音频引擎)在运行时内处理循环。
因此,一个在一个引擎中循环正常的文件在另一个引擎中可能会静默失败,因为写入的标记根本不会被读取。
更难解决的问题是回音尾部。如果音轨有衰减,循环回头会切断尾部,导致听众听到缝隙,即使循环点是样本完美的。解决方法是同时播放两个声音:上一个声音的尾部仍在振动,而下一个声音从循环点开始播放。Wwise(Wwise音频引擎)使用后续播放,FMOD(FMOD音频引擎)使用转换时间线,而Unreal(Unreal引擎)则通过在循环点处交换两个Wave Player来实现。
对于只播放文件并循环的引擎,折叠尾部回音回归到文件头部是另一个选择,这样就可以在无需运行时工作的情况下实现无缝循环。
值得注意的一点是,Unreal(Unreal引擎)不管如何编写,均不会读取smpl chunk循环点,但它会精确读取cue标记。这使cue标记成为将音乐格局引入MetaSound的实际方法。
这是在编写一个工具的过程中建立的,根据引擎,特别是尾部重叠,写入这些设置。如果有用,请访问:https://austinhaynes.itch.io/loopsmith
评论 (0)