在Unity3D中改变音乐曲目的节奏

4

是否有可能在不使用任何声音引擎(如FMOD)的情况下更改音乐曲目的节奏?我知道通过改变AudioSource中的音调可以更改音乐的速度,但是你知道通过改变音调实际上可以完全改变音乐。


据我所知,音调是Unity提供的唯一选项。 - Gunnar B.
是的,我明白了。所以要改变BPM,我需要音频引擎或者音乐的单独片段,然后在Unity中制作它们的序列并控制节奏。我说得对吗? - ATHellboy
2个回答

7
如果您想要答案,这是我在Unity中找到的最佳方法。(实际上是我的一个朋友建议的)
1. 创建一个音频混合器(在项目文件夹上单击左键 > 创建 > 音频混合器)。 2. 将音频混合器添加到检查器中的输出值的AudioSource中。 3. 选择音频混合器 > Master,点击“添加效果”,并选择“Pitch shifter”。 4. 选择AudioSource并将Pitch设置为2(示例)。 5. 将AudioMixer Pitch的Pitch设置为0.5(示例)。
计算AudioSource Pitch和AudioMixer Pitch的公式:AudioMixer Pitch Value = 1 / AudioSource Pitch Value 如果您使用的是超过2的AudioSource Pitch,则需要在AudioMixer中添加另一个Audio Pitch Shifter,并为两者设置值以获取原始Pitch(1)。

我很惊讶这个答案没有任何赞(直到现在)。我一直在搜索Unity论坛和SO,坦率地说,这是更新音频源节奏最简单、最可行的选项。 - Allen Rufolo

1
改变播放速度来改变音高是唯一简单的方法(显然也会改变速度)。有许多算法可以改变其中一个而不改变另一个,但是:a)其中大部分是专有的;b)它们中的大部分都有令人讨厌的伪影;c)大多数具有这些选项的软件会为您提供选择算法的选项之一,其中一个在理论上至少听起来比其他算法更好。
在像Ableton Live这样的软件中,有“高级”选项,它基本上根据材料的性质在模式之间切换,这可以在几个百分点的变化范围内产生可信的结果,但由于我们的听觉是我们意识世界中非常重要的方面,进化使我们对任何最轻微的变化都非常敏感。
最简单的拉伸算法基于颗粒合成,您将流分成“颗粒”-如果您只按顺序播放它们,您将获得原始信号,但是如果您以更高的速度播放它们(但在时间域中等间隔地开始),则可以改变音高而不改变速度。问题是,即使有很多窗口,也只能做到这么多,才会出现非常严重的伪影。
简短的回答是否定的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接