IT ์•Œ์•„๊ฐ€๊ธฐ

[ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ] pedalboard

์žก์‹๋ƒฅ์ด 2025. 5. 29. 17:53

ํŽ˜๋‹ฌ๋ณด๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์•Œ์•„๊ฐ€๊ธฐ

 

์˜ค๋Š˜์€ ์˜ค๋””์˜ค ์ดํŽ™ํŠธ ์ฒ˜๋ฆฌ์šฉ ํŒŒ์ด์ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ํŽ˜๋‹ฌ๋ณด๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. 

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 ์ด๋Ÿฐ์‹์ธ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€๋ฆฌ์ŠคํŠธ๋Š” ํŽ˜๋‹ฌ๋ณด๋“œ(๋ฌด๋Œ€์—์„œ ๋ฐŸ๋Š” ํŽ˜๋‹ฌ๊ฐ™์€๊ฑฐ)๋ฅผ ๋ฐŸ์œผ๋ฉฐ ์ดํŽ™ํŠธ๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์ด๋‹ค. (๋‚˜๋Š” ์Œ์•…๊ณผ ๋ฌด๊ด€ํ•œ ์ธ๊ฐ„์ด๋‹ค.)

 

 

728x90