音訊濾波器 link
音訊濾波器可以在遊戲中更改音訊通道上的聲音。常用於給聲音添加效果,包括混響、延遲/回聲、高通/低通濾波等。
音訊濾波器位於 renpy.audio.filter 模組。
不是嚴格要求,只是推薦引用該模組時使用一個簡短的別名,比如 af
:
define af = renpy.audio.filter
可以調用 renpy.music.set_audio_filter()
函數設置想用的音訊濾波器:
$ renpy.music.set_audio_filter("music", af.Reverb(0.5))
默認情況下,音訊濾波器設置之後會在下一個播放的音訊檔案時生效。 如果想要立刻生效,可以使用 replace 參數:
$ renpy.music.set_audio_filter("music", af.Lowpass(440), replace=True)
這樣就能讓音訊盡可能快地應用新的濾波器。
最後,創作者可以傳入None來清除所有濾波器效果:
$ renpy.music.set_audio_filter("music", None)
(也可以使用None搭配 replace 來立刻清除所有濾波器效果。)
濾波器復用 link
在某個音訊通道設置濾波器後,在該通道播放的所有音訊都會受到濾波器的影響。 特別是梳狀濾波器(comb filter)、延遲濾波器和混響濾波器,會根據舊音訊產生一些輸出結果, 對新播放的音訊產生影響。
Ren’Py會在濾波器對象中保留一些音訊資訊。因此,在不同音訊通道間共用濾波器不是個好主意。 在單個音訊通道裡多次使用同一個濾波器對象也不行。
靜音銜接 link
當啟用音訊濾波器後,對應音訊通道切換播放的音訊內容時,Ren’Py會在該通道添加2秒的靜音, 以確保延遲、混響等濾波器能完整播放。
如果需要更久的靜音,可以在播放隊列中設置:
queue sound "<silence 10">
多個音訊濾波器 link
除了使用單個濾波器,我們還可以使用一個濾波器列表,即一個 renpy.audio.filter.Sequence
對象:
renpy.music.set_audio_filter("music", [af.Reverb(0.5), af.Lowpass(440)])
也等效於:
renpy.music.set_audio_filter("music",
af.Sequence([
af.Reverb(0.5),
af.Lowpass(440),
]))
除此之外,也可以用多個音訊濾波器組成下列類的對象。 出於性能考慮,現在不能自訂濾波器類。
- renpy.audio.filter.Allpass(frequency=350, q=1.0) link
全通濾波器,可以允許所有頻率通過,但會更改各頻率間的相位關係。
- frequency
相位變化的中心頻率。
- q
控制相位移動(phase shift)的形狀。該數值越大,相位移動的形狀約尖銳。
- renpy.audio.filter.Bandpass(frequency=350, q=1.0) link
帶通濾波器。
- frequency
中心頻率。
- q
該值控制頻帶寬度。當q的值減少後,頻帶會變窄。
- class renpy.audio.filter.Comb(delay, filter=None, multiplier=1.0, wet=True) link
梳狀濾波器類。梳狀濾波器由一些多次延遲效果疊加並混合輸出,並將輸出進一步回饋回延遲,最終會疊加多次。
(譯者註:中文網路上大多數關於梳狀濾波器的說明都是扯淡。 “梳狀”來源於該濾波器的 頻域 特性曲線有明顯的週期性峰谷,類似梳子,可以產生回聲效果。 其他幾種濾波器,比如“高通”、“低通”、“帶通”、“全通”都指濾波器的 頻域 特性。)
- delay
延遲時間,單位為秒。如果該參數是一個列表,則各個子通道的延遲分別對應列表中具有相同索引的元素。 延遲時間最小為0.01秒。
- filter
對延遲之後的信號應用的濾波器。若為None,則使用Null濾波器。
- multiplier
對濾波之後信號的乘數。
- wet
若為True,濾波器輸出結果包含,輸入信號、濾波後信號和計算乘數後的信號。 若為False,濾波器輸出結果僅包含,濾波後信號和計算乘數後的信號。
- class renpy.audio.filter.Delay(delay) link
該濾波器實現了一度時間的延遲輸出。從輸入端採樣得到的結果,會在延遲 delay 秒之後再輸出。
- delay
延遲時間,單位為秒。如果該參數是一個列表,則各個子通道的延遲分別對應列表中具有相同索引的元素。 延遲時間最小為0.01秒。
- renpy.audio.filter.Highpass(frequency=350, q=1.0) link
高通濾波器。低於閾值的頻率每低一個八度(頻率減半)就會有12/dB的衰減。
- frequency
閾值頻率。
- q
以分貝形式控制結果的峰值。在該類濾波器中,q值並非傳統的Q值(品質參數),而是一個轉化為分貝的共振結果。
- renpy.audio.filter.Highshelf(frequency=350, gain=0) link
highshelf濾波器,可以讓所有頻率通過,但會增強高於某個頻率的部分。
(譯者註:未找到high-shelf濾波器通用的中文譯名。)
- frequency
頻率閾值。
- gain
大於閾值的頻率會獲得的增益強度,單位為分貝。
- renpy.audio.filter.Lowpass(frequency=350, q=1.0) link
低通濾波器。高於閾值的頻率每高一個八度(頻率加倍)就會有12/dB的衰減。
- frequency
閾值頻率。
- q
以分貝形式控制結果的峰值。在該類濾波器中,q值並非傳統的Q值(品質參數),而是一個轉化為分貝的共振結果。
- renpy.audio.filter.Lowshelf(frequency=350, gain=0) link
highshelf濾波器,可以讓所有頻率通過,但會增強低於某個頻率的部分。
(譯者註:未找到low-shelf濾波器通用的中文譯名。)
- frequency
頻率閾值。
- gain
小於閾值的頻率會獲得的增益強度,單位為分貝。
- class renpy.audio.filter.Mix(*filters) link
該音訊過濾器會將自身輸入切分為多個音訊串流,各音訊串流應用不同的過濾器,最終將各音訊串流相加作為輸出。
例如:
init python: import renpy.audio.filter as af # 此效果將信號延遲0.3秒後與原輸入信號混合。 $ echo = af.Mix(af.Null(), af.Delay(.3))
- class renpy.audio.filter.Multiply(multiplier) link
該音訊過濾器直接將輸入與 multiplier 相乘並輸出。
- renpy.audio.filter.Notch(frequency=350, q=1.0) link
陷波濾波器,與帶通濾波器相反,frequency 兩邊一定範圍內的信號被屏蔽,範圍外的則可以通過。
- frequency
中心頻率。
- q
控制陷波濾波器的作用頻帶寬度。當q的值增加時,作用頻帶會變窄。
- class renpy.audio.filter.Null link
輸入與輸出完全一樣的音訊濾波器。
- renpy.audio.filter.Peaking(frequency=350, q=1.0, gain=0) link
峰化濾波器可以讓所有頻率通過,但會增強 frequency 兩邊一定範圍內的信號。
- frequency
中心頻率。
- q
控制峰值形狀。q值越大,峰值越尖銳。
- gain
中心頻率兩邊一定範圍內的信號的增益強度,單位為分貝。
- renpy.audio.filter.Reverb(resonance=.5, dampening=880, wet=1.0, dry=1.0, delay_multiplier=1.0, delay_times=[0.0253, 0.0269, 0.029, 0.0307, 0.0322, 0.0338, 0.0353, 0.0367], delay_subchannel=0.001, allpass_frequences=[225, 556, 441, 341]) link
來自Freeverb庫,帶瑕疵的混響濾波器,用於模擬在房間內或者大廳中的聲音。
- resonance
混響的回饋值。該值應介於0到1之間,值越大則混響的持續越久。該值過大可能會讓混響效果失控。
- dampening
該參數使用了一個低通濾波器,在每次混響時都會應用。模擬了聲音通過空氣傳播時會遺失部分高頻信號的現象。
- wet
該參數會與混音信號相乘並輸出最終結果。
- dry
該參數會與原始輸入信號相乘。若該值為0.0則最終只有混音結果,而沒有原始聲音。
- delay_multiplier
該參數會與 delay_times 相乘,用於調整各混音訊段的長度。
- delay_times
延遲時間列表,單位為秒。用於創建前期迴響,類似於梳狀濾波器。
- delay_subchannel
子通道延遲時間,單位為秒。可以用於營造立體聲效果。
- allpass_frequences
一個頻率列表,單位為赫茲(Hz)。用於創建全通濾波器,模擬後期迴響。
- class renpy.audio.filter.Sequence link
該音訊濾波器會依次應用一個濾波器隊列的所有濾波器效果。通常內部使用,很少直接用。
- class renpy.audio.filter.WetDry(filter, wet=1.0, dry=1.0) link
該濾波器會將輸入與經過另一個濾波器的輸出混合。
- filter
應用到輸入信號上的濾波器。
- wet
該參數是一個介於0.0到1.0之間的值,與 filter 輸出結果相乘,用作最終輸出的一部分。
- dry
該參數是一個介於0.0到1.0之間的值,與輸入結果相乘,用作最終輸出的一部分。