Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

AudioEffectDistortion

继承: AudioEffect < Resource < RefCounted < Object

为音频总线添加失真音频效果。

通过使用非线性函数重新映射音频采样,从而实现声音失真。

描述

“失真”效果会根据波形样本的振幅,通过一个非线性数学函数(详见 Mode 中可用的类型)来修改波形。

注意: 在非线性函数中,一个振幅为 x 的输入样本,其振幅会根据函数在 x 处的值,被增大或减小为 y。这就是为什么即使在相同的 drive(驱动/强度)下,输出的声音也会因输入音量的不同而产生变化。如果想要在保持输出波形不变的情况下改变音量,请使用 post_gain(后置增益)。

在此效果中,每种类型都对应一种不同的非线性函数。可用的不同类型包括:clip(削波)、atan(反正切)、lofi(低音质/位深破碎)、overdrive(过载)以及 waveshape(波形整形)。这里提供的每种失真类型都是对称的:负振幅值受到的影响与正振幅值完全相同。

虽然失真通常会改变频率内容(通常是通过引入高频谐波),但不同的失真类型能提供一系列不同的声音质感;从“柔和”、“温暖”到“粗粝”和“刺耳”。

对于游戏而言,它可以非常高效地模拟声音从某些饱和设备或扬声器中发出的效果。此外,通过引入更高的频率并提升音量,它还能帮助音频在混音中脱颖而出。

注意: 虽然通常难以察觉,但即使 drive 设置为 0,启用的失真效果依然会改变声音。这并非程序错误(Bug)。如果不希望出现这种行为,可以考虑使用 AudioServer.set_bus_effect_enabled() 来禁用该效果。

教程

属性

float

drive

0.0

float

keep_hf_hz

16000.0

Mode

mode

0

float

post_gain

0.0

float

pre_gain

0.0


枚举

enum Mode: 🔗

Mode MODE_CLIP = 0

以一种尖锐的方式将波形在 0 dB 处压平。drive(驱动)参数会以指数级的方式提升样本的振幅。如果将 drive 设置为 0,该模式会充当硬削波器(hard clipper),并且它是唯一一种会在 0 dB 处对音频信号进行削波的模式。

Mode MODE_ATAN = 1

以平滑的方式压平波形,遵循反正切(arctangent)曲线。如果音频事先经过了标准化处理,它的音量会先降低,然后将波峰压平至 PI * 4.0(线性值)。

Mode MODE_LOFI = 2

将音频位深降低,以获得从 16 位到 2 位的低分辨率音频信号。可用于模拟早期数字音频设备的声音。

Mode MODE_OVERDRIVE = 3

模拟通常用于固态乐器放大器的场效应晶体管产生的暖失真。drive 属性在该模式下无效。

Mode MODE_WAVESHAPE = 4

以平滑的方式压平波形,直到在 drive = 1 时达到一个尖锐的峰值,遵循一个通用的绝对 Sigmoid 函数。


属性说明

float drive = 0.0 🔗

失真强度。它通过让音频从线性函数向非线性函数过渡,来控制输入音频受失真曲线影响的程度。该值的取值范围是 0 到 1。


float keep_hf_hz = 16000.0 🔗

  • void set_keep_hf_hz(value: float)

  • float get_keep_hf_hz()

高通滤波器,单位为 Hz。高于此值的频率不会受到失真的影响。该值的范围为 1 至 20000。


Mode mode = 0 🔗

  • void set_mode(value: Mode)

  • Mode get_mode()

失真类型。用于更改用来扭曲波形的非线性函数。具体可参考 Mode 枚举。


float post_gain = 0.0 🔗

  • void set_post_gain(value: float)

  • float get_post_gain()

该效果后的增益,单位为分贝。取值范围从 -80 到 24。


float pre_gain = 0.0 🔗

  • void set_pre_gain(value: float)

  • float get_pre_gain()

该效果前的增益,单位为分贝。取值范围从 -60 到 60。