在 Unity3D 中改变音乐曲目的节奏
Changing tempo of music track in Unity3D
是否可以在不使用 FMOD
等任何声音引擎的情况下更改音乐曲目的速度?我知道通过改变 AudioSource 中的音高我可以改变音乐的速度但是你知道通过改变音高实际上音乐可以完全改变。
通过改变播放速率来改变音调是唯一简单的方法(显然也会改变速度)。有几十种算法可以让你改变一个而不改变另一个,但是 a) 其中大部分是专有的 b)他们中的大多数都有令人讨厌的人工制品 c) 大多数具有这些选项的软件都为您提供了可供选择的算法选择——与其他算法相比,其中一个听起来最不可怕,至少在理论上是这样
在像 Ableton Live 这样的软件中,thres 'advanced' 选项基本上根据 material 的特性在模式之间切换,这在几个百分比的变化内给出了可信的结果,但我们的听力是如此重要我们对世界的意识方面,进化的我们对任何最细微的变化都非常敏感。
最简单的拉伸算法是基于颗粒合成的,你将流分成 'grains' - 如果你只是一个一个地播放它们,你会得到你的原始信号,但如果你以更高的速度播放它们(但在时域中以等距开始它们)你可以在不改变速度的情况下改变音高。问题是,即使有很多窗口,在真正令人讨厌的伪影开始出现之前,您也只能做这么多。
简短的回答是否定的。
如果您想要答案,这是我在 Unity 中找到的最佳方法。 (实际上我的一个朋友建议这个方法)
- 创建混音器(左键单击项目文件夹 > 创建 > 混音器)
- 将混音器添加到检查器中
AudioSource
的输出值 - Select Audio Mixer > Master 下子点击
Add Effect
和selectPitch shifter
- Select
AudioSource
并将Pitch
设置为 2(示例) - 将
AudioMixer Pitch
的音高设置为 0.5(示例)
AudioSource Pitch
和AudioMixer Pitch
的计算公式:AudioMixer Pitch Value = 1 / AudioSource Pitch Value
- 如果您使用的 AudioSource Pitch 高于 2,那么您需要在 AudioMixer 中添加另一个 Audio Pitch Shifter 并设置两个值以获得原始音高 (1)