音频滤波器 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之间的值,与输入结果相乘,用作最终输出的一部分。