【问题标题】:Changing tempo of music track in Unity3D [closed]在Unity3D中改变音乐曲目的节奏[关闭]
【发布时间】:2018-07-28 15:52:11
【问题描述】:

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

【问题讨论】:

  • 据我所知,音高是 unity 提供的唯一选择。
  • 是的,我明白了。因此,为了改变 BPM,我需要声音引擎或单独的乐句,我可以在 Unity 中制作一些东西来制作它们的序列并控制节奏。我说的对吗?

标签: unity3d audio playback


【解决方案1】:

如果您想要答案,这是我在 Unity 中找到的最佳方法。 (其实我的一个朋友建议这种方法)

  1. 创建一个混音器(左键单击项目文件夹 > 创建 > 混音器)
  2. 在检查器的输出值中将音频混合器添加到AudioSource
  3. 选择Audio Mixer > Master在他的children下,点击Add Effect并选择Pitch shifter
  4. 选择AudioSource 并将Pitch 设置为2(示例)
  5. AudioMixer Pitch 的 Pitch 设置为 0.5(示例)

AudioSource PitchAudioMixer Pitch的计算公式:AudioMixer Pitch Value = 1 / AudioSource Pitch Value

  • 如果您使用的是高于 2 的 AudioSource Pitch,那么您需要在 AudioMixer 中添加另一个 Audio Pitch Shifter 并设置两者的值以获得原始音高 (1)

【讨论】:

  • 我很惊讶这个答案没有任何赞成票(直到现在)我一直在搜索统一论坛和 SO,坦率地说,这是更新音频源速度的最简单、最可行的选择。
【解决方案2】:

通过改变播放速率来改变音高是唯一简单的方法(显然也会改变速度)。有几十种算法可以让你改变一个而不改变另一个,但是 a) 其中大部分是专有的 b)他们中的大多数都有令人讨厌的文物 c) 大多数具有这些选项的软件都会为您提供可供选择的算法 - 与其他算法相比,其中一个听起来最不可怕,至少在理论上是这样

在像 Ableton Live thres 'advanced' 选项这样的软件中,该选项基本上根据材料的特性在模式之间切换,在几个百分点的变化内给出可信的结果,但我们的听力是我们在世界上的意识的一个重要方面,我们对任何最轻微的变化都非常敏感。

最简单的拉伸算法是基于颗粒合成的,您将流分割成“颗粒” - 如果您只是一个一个地播放它们,您会得到原始信号,但如果您以更高的速度播放它们(但启动它们的速度相同)在时域中间隔)您可以在不改变速度的情况下改变音高。问题是,即使有很多窗口,在真正令人讨厌的伪影开始出现之前你也只能做这么多。

简短的回答是否定的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多