heybaeheef commited on
Commit
14950cf
ยท
verified ยท
1 Parent(s): cfc3484

Delete audio_processing/effect_chain.py

Browse files
Files changed (1) hide show
  1. audio_processing/effect_chain.py +0 -197
audio_processing/effect_chain.py DELETED
@@ -1,197 +0,0 @@
1
- """
2
- Effect Chain - Pedalboard ๊ธฐ๋ฐ˜ ์˜ค๋””์˜ค ์ดํŽ™ํŠธ ์ฒ˜๋ฆฌ
3
- =================================================
4
- V3: Reverb ์ถ”๊ฐ€, Distortion ๋น„ํ™œ์„ฑํ™”
5
- """
6
-
7
- import numpy as np
8
- import soundfile as sf
9
- from typing import Dict, List, Optional
10
- from pedalboard import (
11
- Pedalboard,
12
- Compressor,
13
- Gain,
14
- HighShelfFilter,
15
- LowShelfFilter,
16
- PeakFilter,
17
- Delay,
18
- Reverb,
19
- Limiter
20
- )
21
-
22
-
23
- class EffectChain:
24
- """Pedalboard ๊ธฐ๋ฐ˜ ์ดํŽ™ํŠธ ์ฒด์ธ"""
25
-
26
- def __init__(self, sample_rate: int = 44100):
27
- self.sample_rate = sample_rate
28
-
29
- self.available_effects = [
30
- "eq_peak1", "eq_peak2",
31
- "eq_lowshelf", "eq_highshelf",
32
- "delay", "compressor",
33
- "reverb", "limiter"
34
- ]
35
-
36
- def get_available_effects(self) -> List[str]:
37
- """์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ดํŽ™ํŠธ ๋ชฉ๋ก"""
38
- return self.available_effects
39
-
40
- def _get_param(self, params: Dict[str, float], *keys, default=0.0) -> float:
41
- """
42
- ์—ฌ๋Ÿฌ ํ‚ค ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด ๋ฐ˜ํ™˜ (ํ˜ธํ™˜์„ฑ ์ฒ˜๋ฆฌ)
43
- ์˜ˆ: 'eq_peak1.params.Q' ๋˜๋Š” 'eq_peak1.params.q' ๋‘˜ ๋‹ค ์ง€์›
44
- """
45
- for key in keys:
46
- if key in params:
47
- return params[key]
48
- return default
49
-
50
- def _build_pedalboard(self, params: Dict[str, float]) -> Pedalboard:
51
- """ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ Pedalboard ๊ตฌ์„ฑ"""
52
-
53
- effects = []
54
-
55
- # Compressor
56
- comp_threshold = self._get_param(params, "compressor.threshold", default=-18.0)
57
- comp_ratio = self._get_param(params, "compressor.ratio", default=2.0)
58
- effects.append(Compressor(
59
- threshold_db=max(-40, min(0, comp_threshold)),
60
- ratio=max(1.0, min(20.0, comp_ratio)),
61
- attack_ms=10.0,
62
- release_ms=100.0
63
- ))
64
-
65
- # EQ Peak 1 (Q/q ๋‘˜ ๋‹ค ์ง€์›)
66
- freq1 = self._get_param(params, "eq_peak1.params.freq", default=1000.0)
67
- gain1 = self._get_param(params, "eq_peak1.params.gain", default=0.0)
68
- q1 = self._get_param(params, "eq_peak1.params.Q", "eq_peak1.params.q", default=1.0)
69
- if abs(gain1) > 0.1:
70
- effects.append(PeakFilter(
71
- cutoff_frequency_hz=max(20, min(20000, freq1)),
72
- gain_db=max(-12, min(12, gain1)),
73
- q=max(0.1, min(10, q1))
74
- ))
75
-
76
- # EQ Peak 2 (Q/q ๋‘˜ ๋‹ค ์ง€์›)
77
- freq2 = self._get_param(params, "eq_peak2.params.freq", default=4000.0)
78
- gain2 = self._get_param(params, "eq_peak2.params.gain", default=0.0)
79
- q2 = self._get_param(params, "eq_peak2.params.Q", "eq_peak2.params.q", default=1.0)
80
- if abs(gain2) > 0.1:
81
- effects.append(PeakFilter(
82
- cutoff_frequency_hz=max(20, min(20000, freq2)),
83
- gain_db=max(-12, min(12, gain2)),
84
- q=max(0.1, min(10, q2))
85
- ))
86
-
87
- # Low Shelf
88
- freq_low = self._get_param(params, "eq_lowshelf.params.freq", default=200.0)
89
- gain_low = self._get_param(params, "eq_lowshelf.params.gain", default=0.0)
90
- if abs(gain_low) > 0.1:
91
- effects.append(LowShelfFilter(
92
- cutoff_frequency_hz=max(20, min(2000, freq_low)),
93
- gain_db=max(-12, min(12, gain_low)),
94
- q=0.707
95
- ))
96
-
97
- # High Shelf
98
- freq_high = self._get_param(params, "eq_highshelf.params.freq", default=8000.0)
99
- gain_high = self._get_param(params, "eq_highshelf.params.gain", default=0.0)
100
- if abs(gain_high) > 0.1:
101
- effects.append(HighShelfFilter(
102
- cutoff_frequency_hz=max(1000, min(20000, freq_high)),
103
- gain_db=max(-12, min(12, gain_high)),
104
- q=0.707
105
- ))
106
-
107
- # Distortion - ๋น„ํ™œ์„ฑํ™”
108
- # dist_amount = self._get_param(params, "distortion_amount", default=0.0)
109
- # if dist_amount > 0.01:
110
- # effects.append(Distortion(drive_db=max(0, min(20, dist_amount * 100))))
111
-
112
- # Delay
113
- delay_time = self._get_param(params, "delay.delay_time", default=0.02)
114
- delay_feedback = self._get_param(params, "delay.feedback", default=0.3)
115
- delay_mix = self._get_param(params, "delay.mix", default=0.2)
116
- if delay_mix > 0.01:
117
- effects.append(Delay(
118
- delay_seconds=max(0.01, min(1.0, delay_time)),
119
- feedback=max(0.0, min(0.9, delay_feedback)),
120
- mix=max(0.0, min(1.0, delay_mix))
121
- ))
122
-
123
- # Reverb - ์ƒˆ๋กœ ์ถ”๊ฐ€!
124
- room_size = self._get_param(params, "reverb.room_size", default=0.5)
125
- reverb_wet = self._get_param(params, "reverb.wet_level", default=0.0)
126
- reverb_dry = self._get_param(params, "reverb.dry_level", default=1.0)
127
- reverb_damping = self._get_param(params, "reverb.damping", default=0.5)
128
- if reverb_wet > 0.01:
129
- effects.append(Reverb(
130
- room_size=max(0.0, min(1.0, room_size)),
131
- damping=max(0.0, min(1.0, reverb_damping)),
132
- wet_level=max(0.0, min(1.0, reverb_wet)),
133
- dry_level=max(0.0, min(1.0, reverb_dry))
134
- ))
135
-
136
- # Limiter (ํ•ญ์ƒ ๋งˆ์ง€๋ง‰์—)
137
- effects.append(Limiter(threshold_db=-1.0))
138
-
139
- return Pedalboard(effects)
140
-
141
- def process(
142
- self,
143
- input_path: str,
144
- output_path: str,
145
- parameters: Dict[str, float]
146
- ) -> bool:
147
- """์˜ค๋””์˜ค ํŒŒ์ผ ์ฒ˜๋ฆฌ"""
148
- try:
149
- # ์˜ค๋””์˜ค ๋กœ๋“œ
150
- audio, sr = sf.read(input_path)
151
-
152
- # ๋ชจ๋…ธ/์Šคํ…Œ๋ ˆ์˜ค ์ฒ˜๋ฆฌ
153
- if len(audio.shape) == 1:
154
- audio = audio.reshape(-1, 1)
155
-
156
- # float32๋กœ ๋ณ€ํ™˜
157
- audio = audio.astype(np.float32)
158
-
159
- # Pedalboard ๊ตฌ์„ฑ
160
- board = self._build_pedalboard(parameters)
161
-
162
- # ์ฒ˜๋ฆฌ
163
- processed = board(audio, sr)
164
-
165
- # Wet/Dry ๋ฏน์Šค (final_wet_mix ํŒŒ๋ผ๋ฏธํ„ฐ ์‚ฌ์šฉ)
166
- wet_mix = self._get_param(parameters, "final_wet_mix", default=0.5)
167
- wet_mix = max(0.0, min(1.0, wet_mix))
168
-
169
- # ๊ธธ์ด ๋งž์ถ”๊ธฐ
170
- min_len = min(len(audio), len(processed))
171
- output = audio[:min_len] * (1 - wet_mix) + processed[:min_len] * wet_mix
172
-
173
- # ํด๋ฆฌํ•‘ ๋ฐฉ์ง€
174
- output = np.clip(output, -1.0, 1.0)
175
-
176
- # ์ €์žฅ
177
- sf.write(output_path, output, sr)
178
-
179
- print(f"[EffectChain] โœ… ์ฒ˜๋ฆฌ ์™„๋ฃŒ: {output_path}")
180
- print(f"[EffectChain] ์ ์šฉ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ:")
181
- print(f" - Compressor: threshold={self._get_param(parameters, 'compressor.threshold', default=-18.0):.1f}dB, ratio={self._get_param(parameters, 'compressor.ratio', default=2.0):.1f}")
182
- print(f" - EQ Peak1 Gain: {self._get_param(parameters, 'eq_peak1.params.gain'):.2f} dB")
183
- print(f" - EQ Peak2 Gain: {self._get_param(parameters, 'eq_peak2.params.gain'):.2f} dB")
184
- print(f" - Low Shelf Gain: {self._get_param(parameters, 'eq_lowshelf.params.gain'):.2f} dB")
185
- print(f" - High Shelf Gain: {self._get_param(parameters, 'eq_highshelf.params.gain'):.2f} dB")
186
- print(f" - Distortion: DISABLED")
187
- print(f" - Delay Mix: {self._get_param(parameters, 'delay.mix'):.2f}")
188
- print(f" - Reverb: room={self._get_param(parameters, 'reverb.room_size', default=0.5):.2f}, wet={self._get_param(parameters, 'reverb.wet_level', default=0.0):.2f}")
189
- print(f" - Wet Mix: {wet_mix:.2f}")
190
-
191
- return True
192
-
193
- except Exception as e:
194
- print(f"[EffectChain] โŒ ์ฒ˜๋ฆฌ ์‹คํŒจ: {e}")
195
- import traceback
196
- traceback.print_exc()
197
- raise e