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