Home Artists Posts Import Register

Content

This document is the Chinese version of https://www.patreon.com/posts/vnsound2-0-setup-72140877

频谱设置是VNSound2.0中引入的新功能,基本内容都在上面的视频中演示了,本文更加具体的解释内部的设置方法。

首先是设置中的采样部分 sampling setting:

  • Target audio 目标音源:
    这里设置频谱绑定目标音源的方式。
    PlayingAudio - MMDD/VNSound only: 这是默认的方式,将首先搜索MMDD,然后搜索VNSound,和第一个找到的正在播放的音源绑定。
    PlayingAudio - Any audio found: 这个方式则是在工作室全体搜索AudioSource组件,并和第一个找到的音源绑定。这方式下可以找到工作室中的bgm,人物语音和一些声音mod,但找不到mp4面板播放的声音。
    MMD Director: 指定一个MMDD的音源。MMDD可以载入多个音乐文件,所以要按照序号指定一个,0代表第一个,1代表第二个,以此类推。
    VNSound: 指定一个VNSound音源。VNSound给每个载入的音乐文件都分配了id,可以用id来指定,也可以用序号指定。
  • Sample Count 样本数量:
    频谱算法的中心是快速傅里叶变换(FFT)。每一帧都会对音源进行一次FFT,得到样本。这里可以设置获得的样本数量。FFT的结果是频域的,所以样本越多的话频率解析度就越高,同时开销越大。注意FFT的采样频率是Unity固定的。
  • Sample channel 采样通道:
    选择是左声道,右声道还是立体声。如果选立体声就要采样两次,一般的话左声道就够了。
  • Sample window 窗口函数:
    FFT的窗口函数,这是数学的领域了,我也不懂。试下来Hanning、Blackman和BlackmanHarris都不错,也差不多。Rectangular和Triangle的结果就不行了。


然后是频段设置Spectrum band:

频段是样本的集合体。比如我们上面设置了512个样本,逐个处理的话太多了,所以需要归结到频段中来处理。而频段中的样本范围就决定了频段的频率范围。.

打开"Show band frequency range"选项可以看到每个频段对应的频率范围。默认的设定只是一个参考,你可以根据需要随意增加或者删减频段。每个频段的范围也可以任意设置,但至少要有一个样本。频段的范围可以重叠,不需要连续。换句话说,不是每个样本都必须用到,也不是每个样本只能用一次。

然后,频段也是频谱输出的单位。每个频段可以和一个clip相关联。在Action clip部分可以用<或>按钮选择一个clip,也可以用New按钮来新建一个。


接下来是算法设定Algorithm options:

  • Band statistics 频段统计:
    设置频段中样本的统计方式。
    Sum: 求和,这是默认的方式,最简单,看起来也不错。
    Avg: 求平均
    RSS: 求平方和的根,据说是正确的统计方式。
    RMS: 均方根
  • Audio profile 音频预值:
    每个频段的输出值最终都会被正规化到0-1之间,所以需要一个最大值来计算标准值。这个最大值会在播放声音的时候自动更新,但我们需要一个初始的最大值,就是预值。如果我们的最大值从0开始变化,那么音乐开始的时候每个采样值都可能超过最大值,导致最大值不断更新,动画会非常的剧烈。
    预值的大小和选择的统计方式,以及播放的音乐都有关。比如你选择了平均化的统计方式的话,频段的结果肯定比采用求和的方式要小,那就需要适当减小预值。如果预值过小,动画开始的时候跳动会比较严重。反之如果过大,采样值始终不能达到预值的话,动画的幅度就会偏小。可以在后述的预览中看到采样到的最大值,以此为依据来设置预值。大概在采样得到的最大值的1/4-1/2左右为好吧。
    注意,预值只是初始的最大值,一旦采样的结果大于预值,最大值会被更新,之后的表现就和预值没有关系了。
  • Audio normalize 正规化计算:
    Independent: 默认方式,每个频段根据自己的最大值来做正规化
    Unified: 所有的频段使用统一的最大值来做正规化,这个模式下能够正确反映各个频段之间的音量差,但是我们又不是来做科学分析的,相比之下Independent模式中各个频段跳动的更加活跃。
  • Audio drop down 衰减:
    衰减默认为ON,这模式下如果采样值大于上次输出,那么就输出采样值,如果小于上次输出,那么输出根据自己的速度来衰减。也就是说跳上去一下子,掉下来是慢慢掉的,这样可以让动画更加平滑。这里Drop speed设置衰减的初始速度,Drop accelerate设置衰减的加速度。如果输出降得太慢,可以调大这两个数值。
    如果关掉衰减,那么输出就始终是采样值,跳动会比较剧烈。
  • Avg Amplitude平均音量:
    打开这个选项会给你多一个输出,就是所有频段的平均音量。你可以将平均音量和某个clip绑定。(这个音量的算法可能有点问题)
  • Import/Export 导入导出:
    完成设定后可以导出到json文件,便于导入给别的场景。


接下来看一下管理画面中的频谱预览 spectrum preview

在VNSound管理画面中,频谱设定显示如下:

第一行中显示它的采样数和频段数,以及和哪个音源进行了绑定。第二行就是操作按钮了:

  • Enabled 有效无效: 频谱的开关
  • Edit 编辑: 转到编辑画面
  • Reset 重置: 将输出清0,重新开始采样和收集最大值
  • Preview 预览: 打开预览
  • X: 删除

点击Preview打开预览,可以看到频段输出的情况。

预览中每个频段都有一个条状图来表示其输出的正规值(0-1)。已经一个数字显示其采样中得到的最大值。这个最大值是设置预值(profile)的重要参考。

如果设定中使用了衰减,在最下方会显示drop speedaccelerate rate的设置区,在这里可以快速的调整衰减速度的加速度,并在预览中看到效果。

如果选上了More info 选项,还能看到频段的频率范围和正规化之前的采样值。

如果你选择了Unified的正规化模式,这里还会看到整体的最大值。


指定Clip的一些提示:

单纯的设定一个频谱并没有意义,你需要指定clip给频段才能和场景互动。

和频段绑定的Clip里面定义了场景中的东西如何随音乐变化。Clip的长度,FPS,速度和循环设置基本没有意义,因为这个Clip不是真的被播放,而是被频段的输出值驱动的,就像你用鼠标去滑动进度条一样。比如你的Clip是10帧长,那么频段输出0.5的时候就是第5帧的状态,如果你的Clip是100帧长,0.5就是第50帧的状态。

原则上,所有可以被clip控制的属性都可以和音乐联动。但鉴于这些clip每一帧都要更新,所以不要选那些非常慢的属性(比如换地图)。而且创建的关键帧越少越好!


最后是一些参考文档:

如果对原理和数学有兴趣的话……

https://www.nti-audio.com/en/support/know-how/fast-fourier-transform-fft

https://www.teachmeaudio.com/mixing/techniques/audio-spectrum

Files

VNSound2.0 spectrum introduce

VNSound is a module of VNGE, this video introduce the new feature of spectrum. This feature can be used in all supported game, not only for MMDD. But almostly, it is for MMDD. XD Turn on subtitle, and more detail document can be found here: https://www.patreon.com/posts/vnsound2-0-setup-72140877

Comments

No comments found for this post.