오디오 필터

오디오 필터는 채널의 소리를 오디오 파일에 있는 원래 소리와 다르게 바꿉니다. 리버브, 딜레이/에코, 고역 통과/저역 통과 필터 등의 효과를 추가할 수 있습니다.

오디오 필터는 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)

replace를 True로 설정하면서 None을 지정할 수도 있습니다.

필터 재사용

채널에 필터를 설정하면 해당 채널에서 재생하는 모든 오디오에 적용됩니다. 특히 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)

전역 통과 필터는 모든 주파수를 통과시키되 주파수 간 위상 관계를 바꿉니다.

frequency

위상 변화의 중심 주파수입니다.

q

위상 변화의 급격한 정도를 제어합니다. 값이 클수록 더 급격합니다.

renpy.audio.filter.Bandpass(frequency=350, q=1.0)

대역 통과 필터입니다.

frequency

중심 주파수입니다.

q

대역폭을 제어합니다. Q 값이 클수록 대역폭이 좁아집니다.

class renpy.audio.filter.Comb(*args, **kwargs)

콤 필터입니다. 지연된 신호를 필터링하고 배율을 곱한 뒤 입력과 혼합하여 다시 지연으로 되먹임합니다. 이 과정에서 필터가 여러 번 적용됩니다.

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)

옥타브당 12/dB 감쇠 기울기의 고역 통과 필터입니다.

frequency

차단 주파수입니다.

q

응답의 피크 정도를 데시벨로 제어합니다. 이 필터에서는 일반적인 Q가 아니라 데시벨 단위의 공진 값입니다.

renpy.audio.filter.Highshelf(frequency=350, gain=0)

모든 주파수를 통과시키되 특정 주파수 이상을 지정한 양만큼 증폭하는 하이 셸프 필터입니다.

frequency

증폭을 시작할 하한 주파수입니다.

gain

하한 주파수보다 높은 주파수의 증폭량으로, 데시벨 단위입니다.

renpy.audio.filter.Lowpass(frequency=350, q=1.0)

옥타브당 12/dB 감쇠 기울기의 저역 통과 필터입니다.

frequency

차단 주파수입니다.

q

응답의 피크 정도를 데시벨로 제어합니다. 이 필터에서는 일반적인 Q가 아니라 데시벨 단위의 공진 값입니다.

renpy.audio.filter.Lowshelf(frequency=350, gain=0)

모든 주파수를 통과시키되 특정 주파수 이하를 지정한 양만큼 증폭하는 로 셸프 필터입니다.

frequency

증폭할 상한 주파수입니다.

gain

상한 주파수보다 낮은 주파수의 증폭량으로, 데시벨 단위입니다.

class renpy.audio.filter.Mix(*args, **kwargs)

입력을 여러 스트림으로 나누어 각 인수의 필터를 스트림 하나에 적용한 뒤 모두 더하여 혼합하는 오디오 필터입니다.

예를 들면 다음과 같습니다.

init python:

    import renpy.audio.filter as af

    # This mixes the unchanged input with a delay.
    $ 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

억제 대역폭을 제어합니다. q 값이 클수록 폭이 좁아집니다.

class renpy.audio.filter.Null

입력을 바꾸지 않고 그대로 출력하는 오디오 필터입니다.

renpy.audio.filter.Peaking(frequency=350, q=1.0, gain=0)

모든 주파수를 통과시키되 특정 주파수 주위를 지정한 양만큼 증폭하는 피킹 필터입니다.

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입니다. 오디오 필터 리스트를 지정하면 내부적으로 사용하므로 직접 사용할 일은 드뭅니다.

class renpy.audio.filter.WetDry(*args, **kwargs)

입력과 필터의 출력을 혼합하는 필터입니다.

filter

입력에 적용할 필터입니다.

wet

필터 출력의 혼합량을 제어하는 배율로, 일반적으로 0.0에서 1.0 사이입니다.

dry

입력의 혼합량을 제어하는 배율로, 일반적으로 0.0에서 1.0 사이입니다.