Аудиофильтры

Аудиофильтры позволяют игре изменять звук на канале, отличая его от того, что присутствует в аудиофайле. Их можно использовать для добавления эффектов к звуку, включая реверберацию, задержку/эхо и фильтры верхних/нижних частот.

Аудиофильтры находятся в модуле 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, который управляет количеством подмешиваемого входного сигнала.