yoyolicoris commited on
Commit
acae072
·
1 Parent(s): 0c4fe90
Files changed (1) hide show
  1. app.py +68 -33
app.py CHANGED
@@ -60,7 +60,7 @@ eigvecs = np.flip(eigvecs, axis=1)[:, :75]
60
  U = eigvecs * np.sqrt(eigvals)
61
  U = torch.from_numpy(U).float()
62
  mean = torch.from_numpy(mean).float()
63
-
64
 
65
  with open(INFO_PATH) as f:
66
  info = json.load(f)
@@ -93,7 +93,7 @@ meter = pyln.Meter(44100)
93
 
94
 
95
  @torch.no_grad()
96
- def inference(audio, randomise_rest, *pcs):
97
  sr, y = audio
98
  if sr != 44100:
99
  y = resample(y, sr, 44100)
@@ -109,18 +109,19 @@ def inference(audio, randomise_rest, *pcs):
109
  if y.shape[1] != 1:
110
  y = y.mean(dim=1, keepdim=True)
111
 
112
- M = eigvals.shape[0]
113
- z = torch.cat(
114
- [
115
- torch.tensor([float(x) for x in pcs]),
116
- (
117
- torch.randn(M - len(pcs)) * TEMPERATURE
118
- if randomise_rest
119
- else torch.zeros(M - len(pcs))
120
- ),
121
- ]
122
- )
123
  x = U @ z + mean
 
124
 
125
  fx.load_state_dict(vec2dict(x), strict=False)
126
  fx.apply(partial(clip_delay_eq_Q, Q=0.707))
@@ -179,7 +180,7 @@ with gr.Blocks() as demo:
179
  audio_input = gr.Audio(type="numpy", sources="upload", label="Input Audio")
180
  with gr.Row():
181
  random_button = gr.Button(
182
- f"Randomise the first {NUMBER_OF_PCS} PCs",
183
  elem_id="randomise-button",
184
  )
185
  reset_button = gr.Button(
@@ -189,12 +190,26 @@ with gr.Blocks() as demo:
189
  render_button = gr.Button(
190
  "Run", elem_id="render-button", variant="primary"
191
  )
192
- random_rest_checkbox = gr.Checkbox(
193
- label=f"Randomise PCs > {NUMBER_OF_PCS} (default to zeros)",
194
- value=False,
195
- elem_id="randomise-checkbox",
196
- )
197
  sliders = get_important_pcs(NUMBER_OF_PCS, value=0)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
198
  with gr.Column():
199
  audio_output = gr.Audio(
200
  type="numpy", label="Output Audio", interactive=False
@@ -205,27 +220,47 @@ with gr.Blocks() as demo:
205
  lambda *args: (lambda x: (x, model2json()))(inference(*args)),
206
  inputs=[
207
  audio_input,
208
- random_rest_checkbox,
209
  ]
210
- + sliders,
 
211
  outputs=[audio_output, json_output],
212
  )
213
 
214
  random_button.click(
215
- lambda *xs: [
216
- chain_functions(
217
- partial(max, SLIDER_MIN),
218
- partial(min, SLIDER_MAX),
219
- )(normalvariate(0, 1))
220
- for _ in range(len(xs))
221
- ],
222
- inputs=sliders,
223
- outputs=sliders,
 
 
 
224
  )
225
  reset_button.click(
226
- lambda *xs: [0 for _ in range(len(xs))],
227
- inputs=sliders,
228
- outputs=sliders,
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  )
230
 
231
  demo.launch()
 
60
  U = eigvecs * np.sqrt(eigvals)
61
  U = torch.from_numpy(U).float()
62
  mean = torch.from_numpy(mean).float()
63
+ z = torch.zeros(75)
64
 
65
  with open(INFO_PATH) as f:
66
  info = json.load(f)
 
93
 
94
 
95
  @torch.no_grad()
96
+ def inference(audio):
97
  sr, y = audio
98
  if sr != 44100:
99
  y = resample(y, sr, 44100)
 
109
  if y.shape[1] != 1:
110
  y = y.mean(dim=1, keepdim=True)
111
 
112
+ # M = eigvals.shape[0]
113
+ # z = torch.cat(
114
+ # [
115
+ # torch.tensor([float(x) for x in pcs]),
116
+ # (
117
+ # torch.randn(M - len(pcs)) * TEMPERATURE
118
+ # if randomise_rest
119
+ # else torch.zeros(M - len(pcs))
120
+ # ),
121
+ # ]
122
+ # )
123
  x = U @ z + mean
124
+ # print(z)
125
 
126
  fx.load_state_dict(vec2dict(x), strict=False)
127
  fx.apply(partial(clip_delay_eq_Q, Q=0.707))
 
180
  audio_input = gr.Audio(type="numpy", sources="upload", label="Input Audio")
181
  with gr.Row():
182
  random_button = gr.Button(
183
+ f"Randomise PCs",
184
  elem_id="randomise-button",
185
  )
186
  reset_button = gr.Button(
 
190
  render_button = gr.Button(
191
  "Run", elem_id="render-button", variant="primary"
192
  )
193
+ # random_rest_checkbox = gr.Checkbox(
194
+ # label=f"Randomise PCs > {NUMBER_OF_PCS} (default to zeros)",
195
+ # value=False,
196
+ # elem_id="randomise-checkbox",
197
+ # )
198
  sliders = get_important_pcs(NUMBER_OF_PCS, value=0)
199
+
200
+ extra_pc_dropdown = gr.Dropdown(
201
+ list(range(NUMBER_OF_PCS + 1, 76)),
202
+ label=f"PC > {NUMBER_OF_PCS}",
203
+ info="Select which extra PC to adjust",
204
+ interactive=True,
205
+ )
206
+ extra_slider = gr.Slider(
207
+ minimum=SLIDER_MIN,
208
+ maximum=SLIDER_MAX,
209
+ label="Extra PC",
210
+ value=0,
211
+ )
212
+
213
  with gr.Column():
214
  audio_output = gr.Audio(
215
  type="numpy", label="Output Audio", interactive=False
 
220
  lambda *args: (lambda x: (x, model2json()))(inference(*args)),
221
  inputs=[
222
  audio_input,
223
+ # random_rest_checkbox,
224
  ]
225
+ # + sliders,
226
+ ,
227
  outputs=[audio_output, json_output],
228
  )
229
 
230
  random_button.click(
231
+ # lambda *xs: [
232
+ # chain_functions(
233
+ # partial(max, SLIDER_MIN),
234
+ # partial(min, SLIDER_MAX),
235
+ # )(normalvariate(0, 1))
236
+ # for _ in range(len(xs))
237
+ # ],
238
+ lambda i: (lambda x: x[:NUMBER_OF_PCS].tolist() + [x[i - 1].item()])(
239
+ z.normal_(0, 1).clip_(SLIDER_MIN, SLIDER_MAX)
240
+ ),
241
+ inputs=extra_pc_dropdown,
242
+ outputs=sliders + [extra_slider],
243
  )
244
  reset_button.click(
245
+ lambda *xs: (lambda _: [0 for _ in range(len(xs))])(z.zero_()),
246
+ inputs=sliders + [extra_slider],
247
+ outputs=sliders + [extra_slider],
248
+ )
249
+
250
+ def update_z(s, i):
251
+ z[i] = s
252
+ return
253
+
254
+ for i, slider in enumerate(sliders):
255
+ slider.change(partial(update_z, i=i), inputs=slider)
256
+ extra_slider.change(
257
+ lambda _, i: update_z(_, i - 1), inputs=[extra_slider, extra_pc_dropdown]
258
+ )
259
+
260
+ extra_pc_dropdown.change(
261
+ lambda i: z[i - 1].item(),
262
+ inputs=extra_pc_dropdown,
263
+ outputs=extra_slider,
264
  )
265
 
266
  demo.launch()