Аудиофильтры
Аудиофильтры позволяют игре изменять звук на канале, отличая его от того, что присутствует в аудиофайле. Их можно использовать для добавления эффектов к звуку, включая реверберацию, задержку/эхо и фильтры верхних/нижних частот.
Аудиофильтры находятся в модуле 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, установленным в True.)
Повторное использование фильтра
Когда на канале установлен фильтр, он будет фильтровать весь звук, воспроизводимый на этом канале. В частности, фильтры Comb, Delay и Reverb будут продолжать выводить информацию из старых аудиофайлов в течение некоторого времени после начала воспроизведения нового аудиофайла, при условии, что фильтр не будет изменен.
Это означает, что Ren'Py хранит аудиоинформацию внутри объекта фильтра. Из-за этого, как правило, не рекомендуется использовать одни и те же объекты фильтров для разных каналов или использовать один объект фильтра несколько раз на одном канале.
Заполнение тишиной
Когда аудиофильтр активен и последний звук в очереди на канале завершает воспроизведение, Ren'Py добавит 2 секунды тишины в канал, чтобы у фильтров задержки и реверберации было время завершить свою работу.
Если вам нужно больше тишины, ее можно добавить в очередь с помощью:
queue sound "<silence 10">
Аудиофильтры
Везде, где принимается фильтр, вместо него можно передать список, представляющий собой 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)
Всепропускающий фильтр (all-pass) пропускает все частоты, но изменяет фазовое соотношение между различными частотами.
- frequency
Частота в центре фазового сдвига.
- q
Управляет резкостью фазового сдвига. Чем выше значение, тем резче сдвиг.
- renpy.audio.filter.Bandpass(frequency=350, q=1.0)
Полосовой фильтр (band-pass).
- frequency
Центральная частота.
- q
Управляет шириной полосы. Ширина становится уже с увеличением значения Q.
- class renpy.audio.filter.Comb(*args, **kwargs)
Гребенчатый фильтр (comb filter). Гребенчатый фильтр состоит из задержки, которая фильтруется и умножается, смешивается с входным сигналом, а затем подается обратно на вход задержки, что приводит к многократному применению фильтра.
- delay
Задержка в секундах. Если предоставлен список задержек, каждый подканал будет задержан на соответствующую величину. Каждая задержка должна быть не менее 0.01 секунды.
- filter
Фильтр, применяемый к задержанному сигналу. Если None, используется фильтр Null.
- multiplier
Множитель для отфильтрованного сигнала.
- wet
Если True, выходной сигнал фильтра является суммой входного и отфильтрованного и умноженного сигналов. Если False, выходной сигнал — это только отфильтрованный и умноженный сигнал.
- class renpy.audio.filter.Delay(*args, **kwargs)
Этот фильтр реализует задержку. Семплы, поданные на вход, появляются на выходе через delay секунд.
- delay
Задержка в секундах. Если предоставлен список задержек, каждый подканал будет задержан на соответствующую величину. Каждая задержка должна быть не менее 0.01 секунды.
- renpy.audio.filter.Highpass(frequency=350, q=1.0)
Фильтр верхних частот (high-pass) со спадом 12 дБ/октаву.
- frequency
Частота среза.
- q
Управляет пиком отклика в децибелах. Для этого фильтра это значение не является традиционной добротностью (Q), а является значением резонанса в децибелах.
- renpy.audio.filter.Highshelf(frequency=350, gain=0)
Полочный фильтр верхних частот (high-shelf), который пропускает все частоты, но усиливает те, что выше определенной частоты, на заданную величину.
- frequency
Нижняя частота.
- gain
Величина усиления частот выше нижней частоты, в децибелах.
- renpy.audio.filter.Lowpass(frequency=350, q=1.0)
Фильтр нижних частот (low-pass) со спадом 12 дБ/октаву.
- frequency
Частота среза.
- q
Управляет пиком отклика в децибелах. Для этого фильтра это значение не является традиционной добротностью (Q), а является значением резонанса в децибелах.
- renpy.audio.filter.Lowshelf(frequency=350, gain=0)
Полочный фильтр нижних частот (low-shelf), который пропускает все частоты, но усиливает те, что ниже определенной частоты, на заданную величину.
- frequency
Верхняя частота.
- gain
Величина усиления частот ниже верхней частоты, в децибелах.
- class renpy.audio.filter.Mix(*args, **kwargs)
Аудиофильтр, который разделяет входной сигнал на несколько потоков, применяет каждый из своих аргументов к одному из потоков и смешивает эти потоки путем их суммирования.
Например:
init python: import renpy.audio.filter as af # Это смешивает неизмененный входной сигнал с задержкой. $ echo = af.Mix(af.Null(), af.Delay(.3))
- class renpy.audio.filter.Multiply(*args, **kwargs)
Аудиофильтр, который умножает входной сигнал на multiplier.
- renpy.audio.filter.Notch(frequency=350, q=1.0)
Противоположность полосовому фильтру. Частоты в диапазоне вокруг frequency подавляются, в то время как другие частоты пропускаются.
- frequency
Центральная частота.
- q
Управляет шириной выреза (notch). Ширина становится уже с увеличением значения q.
- class renpy.audio.filter.Null
Аудиофильтр, который пропускает входной сигнал на выход без изменений.
- renpy.audio.filter.Peaking(frequency=350, q=1.0, gain=0)
Пиковый (peaking) фильтр, который пропускает все частоты, но усиливает те, что находятся вокруг определенной частоты, на заданную величину.
- frequency
Центральная частота.
- 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])
Фильтр искусственной реверберации, который имитирует звук комнаты или зала, отчасти вдохновленный Freeverb.
- resonance
Количество обратной связи в реверберации. Должно быть от 0 до 1. Большие значения делают реверберацию длиннее. Слишком большие значения приведут к тому, что реверберация выйдет из-под контроля.
- dampening
Применяет фильтр нижних частот к каждой реверберации, имитируя потерю высоких частот при прохождении звука через воздух.
- wet
Множитель, применяемый к сигналу реверберации перед подачей на выход.
- dry
Множитель, применяемый к входному сигналу перед подачей на выход. Установите в 0.0, чтобы слышать только реверберацию, а не исходный звук.
- delay_multiplier
Множитель, применяемый ко времени задержек. Может использоваться для регулировки длины реверберации.
- delay_times
Список времен задержек в секундах, которые используются для создания ранних отражений. Они используются для создания гребенчатых фильтров.
- delay_subchannel
Промежуток времени в секундах, который добавляется к каждому времени задержки для создания второго подканала. Используется для создания стереоэффекта.
- allpass_frequences
Список частот в герцах, которые используются для создания всепропускающих фильтров, имитирующих поздние отражения.
- class renpy.audio.filter.Sequence(*args, **kwargs)
AudioFilter, который последовательно применяет к своему входу несколько фильтров. Используется внутри Ren'Py, когда задан список аудиофильтров, поэтому его редко используют напрямую.
- class renpy.audio.filter.WetDry(*args, **kwargs)
Фильтр, который смешивает свой входной сигнал с выходным сигналом другого фильтра.
- filter
Фильтр для применения к входному сигналу.
- wet
Множитель, обычно от 0.0 до 1.0, который управляет количеством подмешиваемого сигнала фильтра.
- dry
Множитель, обычно от 0.0 до 1.0, который управляет количеством подмешиваемого входного сигнала.