
์ค๋์ ์ค๋์ค ์ดํํธ ์ฒ๋ฆฌ์ฉ ํ์ด์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ ํ๋ฌ๋ณด๋์ ๋ํด์ ์์๋ณด์๋ค.
Pedal Board ๊ฐ๋
Pedal Board๋? Spotify์์ ๊ฐ๋ฐํ ์ค๋์ค ์ดํํธ ์ฒ๋ฆฌ์ฉ Python ๋ผ์ด๋ธ๋ฌ๋ฆฌ,
์ค์ ๊ธฐํ ์ดํํธ ํ๋ฌ๋ณด๋์์ ์ด๋ฆ์ ๋ฐ์จ ๊ฒ์ผ๋ก,
์ฌ๋ฌ ์ค๋์ค ์ดํํธ๋ฅผ ์ฒด์ธ์ผ๋ก ์ฐ๊ฒฐํด์ ์ค๋์ค ์ ํธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ํด์ค๋ค.
Pedalboard๋ ์ค์๊ฐ ์ค๋์ค ์ฒ๋ฆฌ์ฉ์ด ์๋๋ผ, ํ์ผ์ ์ดํํธ๋ฅผ ์ ํ๋ ๋ฐ ํนํ๋์ด์๋ค.
๋ด๋ถ์ ์ผ๋ก NumPy ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ ํจ์จ์ ์ผ๋ก ๋ค๋ฃจ๋ฉฐ
WAV ํ์ผ ๋ฑ PCM (Pulse Code Modulation) ํฌ๋งท์ ๊ธฐ๋ณธ์ผ๋ก ์ง์ํ๋ค.
๋ํ C++ ์ฝ๋๋ก ์์ฑ๋ ๋ถ๋ถ์ด ๋ง์์ ์ปดํ์ผ์ด ํ์ํ ํจํค์ง์ด๊ธฐ ๋๋ฌธ์ ๋จ์ํ pip๋ก ์ค์นํ๋ฉด ์๋๊ณ , C++ ์ปดํ์ผ๋ฌ๊ฐ ํ์ํ ๊ฒ ๊ฐ๋ค.
์์ ์คํ์ผ์ ๋ณํํ๋ ๋ฑ ๋จธ์ ๋ฌ๋ ๋ฐ์ดํฐ ์ ์ฒ๋ฆฌ์ ํ์ฉ๋ ์ ์๋ค.
*PCM์ด๋? ๋์งํธ ์ค๋์ค ๋ฐ์ดํฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ํ์์ผ๋ก, ์๋ ๋ก๊ทธ ์ ํธ(์๋ฆฌ)๋ฅผ ์ผ์ ํ ์ฃผ๊ธฐ๋ก ์ํ๋งํด์, ๊ฐ ์ํ์ ์ด์ฐ์ ์ธ ๋์งํธ ์ซ์๋ก ๋ฐ๊พผ ๊ฒ. ์์ถ๋์ง ์์ raw ์ค๋์ค ๋ฐ์ดํฐ๋ก ํ์ง ์์ค์ด ์๊ณ , ํ์ผ ํฌ๊ธฐ๊ฐ ํฌ๋ค๋ ํน์ง์ด ์์.
๋ํ์ ์ผ๋ก ๊ฐ๋ฅํ ์ค๋์ค ์ดํํธ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
Reverb | ์ํฅ ํจ๊ณผ |
Compressor | ์์ถ๊ธฐ (์๋ฆฌ ํฌ๊ธฐ ๊ท ์ผํ) |
Gain | ๋ณผ๋ฅจ ์ฆํญ/๊ฐ์ |
Chorus | ํ๋ถํ ํฉ์ฐฝ ๋๋ |
PitchShift | ์ ๋์ด ๋ณ๊ฒฝ |
Delay | ๋๋ ์ด/์์ฝ ํจ๊ณผ |
HighpassFilter, LowpassFilter | ํน์ ์ฃผํ์๋ง ํต๊ณผ |
์ค์น๋ฐฉ๋ฒ
pip install pedalboard
# ์์คํ
์์กด์ฑ ํ์! C++, ๋น๋์์คํ
, ์ค๋์ค๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํฌ๋ก์คํ๋ซํผ ์ค๋์ค I/O
!apt-get update -qq && apt-get install -y build-essential cmake libasound2-dev portaudio19-dev && pip install pedalboard==0.5.9
์ฌ์ฉ์์
from pedalboard import Pedalboard, Reverb, Chorus, Compressor
from pedalboard.io import AudioFile
# ์ค๋์ค ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
with AudioFile('input.wav') as f:
audio = f.read(f.frames)
samplerate = f.samplerate
# ์ดํํธ ์ฒด์ธ ๋ง๋ค๊ธฐ
board = Pedalboard([
Chorus(),
Reverb(room_size=0.25),
Compressor()
])
# ์ดํํธ ์ ์ฉ
effected = board(audio, samplerate)
# ๊ฒฐ๊ณผ ์ ์ฅ
with AudioFile('output.wav', 'w', samplerate, audio.shape[0]) as f:
f.write(effected)
์ฌ๋ก ํ๊ตฌ
๋๋ผ ์ค๋์ค ์ ์ฒ๋ฆฌ์ Pedal Board๊ฐ ์ฌ์ฉ๋๋ ์ฌ๋ก
- ๋๋ผ ์ ํธ ํ์ง ํฅ์: ๋๋ผ์ ๋น ๋ฅธ ํธ๋์ง์ธํธ(์๊ฐ์ ์ธ ๊ฐํ ์ ํธ)๋ฅผ ๊ฐ์ง๊ณ ์์ด์ ์์ถ์ด ํ์
- ์ผ๊ด๋ ๋ณผ๋ฅจ: ์ปดํ๋ ์๋ ๋ค์ด๋๋ฏน์ ์ ์ดํด์ ์๋ ๋ณผ๋ฅจ ๋ ธ๋ธ ์ญํ ์ ํจ
- AI ๋ชจ๋ธ ์ฑ๋ฅ: ์์ถ๋ ์ค๋์ค๋ AI๊ฐ ๋๋ผ ํจํด์ ๋ ์ ์ธ์ํ ์ ์๊ฒ ํด์ค
- ๋ ธ์ด์ฆ ๊ฐ์: ์ ์ ํ ์์ถ์ ๋ฐฐ๊ฒฝ ๋ ธ์ด์ฆ๋ฅผ ์ค์ด๊ณ ๋๋ผ ์๋ฆฌ๋ฅผ ๋ ์ ๋ช ํ๊ฒ ๋ง๋ฆ
- pedalboard ์์ผ๋ฉด ๋๋ผ ์๋ฆฌ๊ฐ ๋ค์ญ๋ ์ญํจ (์ด๋ค ๊ฑด ๋๋ฌด ํฌ๊ณ , ์ด๋ค ๊ฑด ๋๋ฌด ์์) AI ๋ชจ๋ธ์ด ๋๋ผ ํจํด์ ์ ํํ ์ธ์ํ๊ธฐ ์ด๋ ค์. ํนํ ๋ผ์ด๋ธ ๋ น์์ด๋ ์ ํ๋ธ ๋น๋์ค ๊ฐ์ด ํ์ง์ด ์ผ์ ํ์ง ์์ ์์ค์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค๊ณ ํจ.
Compressor, Gain ๋ฑ์ ์์ ์ Tool๋ค
- ์ปดํ๋ ์ : ์๋ฆฌ๊ฐ ๋๋ฌด ํฌ๋ฉด ์ค์ด๊ณ , ๋๋ฌด ์์ผ๋ฉด ๊ทธ๋๋ก ๋๋ ์ฅ์น๋ก "์๋ ๋ณผ๋ฅจ ์กฐ์ ๊ธฐ"์. ๋๋ผ์ ๊ฐ์๊ธฐ ํฌ๊ณ ๊ฐํ๊ฒ ๋์ค๋ ์๋ฆฌ(ํธ๋์ง์ธํธ)๊ฐ ๋ง์์ ๋ค๋ฅธ ์๋ฆฌ์ ๋ฐธ๋ฐ์ค๊ฐ ๊นจ์ ธ์ ๋ฃ๊ธฐ ๋ถํธํ ์ ์๋ ๋ฌธ์ ์กด์ฌํจ. ์ด ๋ ์ปดํ๋ ์๋ฅผ ์ฐ๋ฉด ๊ฐ์๊ธฐ ์๋ฆฌ๊ฐ 'ํก'ํ๊ณ ๋์ค๋ ์๊ฐ ๋ถ๋๋ฝ๊ฒ ๋๋ฌ์ค์ ์ ์ฒด์ ์ผ๋ก ๊ท ํ์กํ ์๋ฆฌ๊ฐ ๋๊ฒ ํจ.
- ๊ฒ์ธ : ์ ๋ ฅ ๋ณผ๋ฅจ ์กฐ์ ๊ธฐ - ์ ์ฒด ์๋ฆฌ ํฌ๊ธฐ๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ๋ด๋ฆฌ๋ ๊ธฐ๋ฅ์ผ๋ก ์ปดํ๋ ์๋ฅผ ์ฐ๋ฉด ํฐ ์๋ฆฌ๋ฅผ ๋๋ฌ์ฃผ๋๊น, ์ ์ฒด ๋ณผ๋ฅจ์ด ์ฝ๊ฐ ์ค๊ฒ ๋๋๋ฐ, ์ด๋ ๋ค์ ์๋ฆฌ๋ฅผ ์๋ ์์ค์ผ๋ก ๋์ด์ฌ๋ฆฌ๊ธฐ ์ํด์ Gain์ด ์ฌ์ฉ๋๋ค.
from pedalboard import Pedalboard, Compressor, Gain
from pedalboard.io import AudioFile
board = Pedalboard([
Compressor(threshold=-20, ratio=4),
Gain(gain_db=5)
])
์ฐธ๊ณ ๋ก ์ด๋ฐ ์๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ํ๋ก๊ทธ๋จ๋ค์ DAW(Digital Audio Workstation)์ด๋ผ๊ณ ํ๊ณ , ์ด๋ฐ ํจ๊ณผ๋ค์ด ๋ชจ์ธ ์ฒด๊ณ๋ฅผ ์ดํํธ ์ฒด์ธ์ด๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ๋ค! ์ปดํ๋ ์ค๋ ๊ฒ์ธ ์์๋ EQ, Reverb ๋ฑ์ด ์๋ ๊ฒ ๊ฐ๊ณ , ์ค์ ์ดํํธ๋ฅผ ์ฃผ๋ ์ฅ๋น๋ค์๋ ๋ฌผ๋ฆฌ์ ์ธ ์ฅ๋น์ธ ํ๋ฌ๋ณด๋, ์ํํธ์จ์ด๋ก ๋ค๋ฃจ๋ ํ๋ฌ๊ทธ์ธ ๋ฑ์ด ์๋ค.
์๋ฅผ ๋ค์ด, DAW ํ๋ก๊ทธ๋จ์ธ ๋ก์งํ๋ก์์ ๋๋ผํธ๋์ ๋ง๋ค๊ณ , ๊ทธ ๋๋ผํธ๋์ ์ดํํธ์ฒด์ธ์ ๊ฑฐ๋๋ฐ, ๊ทธ ์ดํํธ ์ฒด์ธ์ ๊ตฌ์ฑ์ด Compressor - EQ - Reverb ์ด๋ฐ์์ธ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐํ๋ฆฌ์คํธ๋ ํ๋ฌ๋ณด๋(๋ฌด๋์์ ๋ฐ๋ ํ๋ฌ๊ฐ์๊ฑฐ)๋ฅผ ๋ฐ์ผ๋ฉฐ ์ดํํธ๋ฅผ ์กฐ์ ํ๋ ๊ฒ์ด๋ค. (๋๋ ์์ ๊ณผ ๋ฌด๊ดํ ์ธ๊ฐ์ด๋ค.)