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。