Spaces:
Running
Running
Commit
·
15fe46b
1
Parent(s):
eebf84c
Add detailed documentation for Random Vocal Effects Generator
Browse files
app.py
CHANGED
|
@@ -12,6 +12,32 @@ from functools import partial
|
|
| 12 |
from modules.utils import chain_functions, vec2statedict, get_chunks
|
| 13 |
from modules.fx import clip_delay_eq_Q
|
| 14 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
SLIDER_MAX = 3
|
| 16 |
SLIDER_MIN = -3
|
| 17 |
NUMBER_OF_PCS = 10
|
|
@@ -116,14 +142,11 @@ def get_important_pcs(n=10, **kwargs):
|
|
| 116 |
|
| 117 |
|
| 118 |
with gr.Blocks() as demo:
|
| 119 |
-
gr.Markdown(
|
| 120 |
-
"""
|
| 121 |
-
# Hadamard Transform
|
| 122 |
-
This is a demo of the Hadamard transform.
|
| 123 |
-
"""
|
| 124 |
-
)
|
| 125 |
with gr.Row():
|
| 126 |
with gr.Column():
|
|
|
|
|
|
|
|
|
|
| 127 |
audio_input = gr.Audio(type="numpy", sources="upload", label="Input Audio")
|
| 128 |
with gr.Row():
|
| 129 |
random_button = gr.Button(
|
|
|
|
| 12 |
from modules.utils import chain_functions, vec2statedict, get_chunks
|
| 13 |
from modules.fx import clip_delay_eq_Q
|
| 14 |
|
| 15 |
+
|
| 16 |
+
space_md = """
|
| 17 |
+
# Random Vocal Effects Generator
|
| 18 |
+
|
| 19 |
+
This is a demo of the paper [DiffVox: A Differentiable Model for Capturing and Analysing Professional Effects Distributions](https://arxiv.org/abs/2504.14735), accepted at DAFx 2025.
|
| 20 |
+
In this demo, you can upload a raw vocal audio file and apply random effects to make it sound better!
|
| 21 |
+
|
| 22 |
+
The effects consist of series of EQ, compressor, delay, and reverb.
|
| 23 |
+
The generator is a PCA model derived from 365 vocal effects presets fitted with the same effects chain.
|
| 24 |
+
This interface allows you to control the first 10 principal components (PCs) of the generator, randomise them, and render the audio.
|
| 25 |
+
For the rest of the PCs, you can choose to randomise them or set them to zero.
|
| 26 |
+
|
| 27 |
+
To give you some idea, we emperically found that the first PC controls the amount of reverb and the second PC controls the amount of brightness.
|
| 28 |
+
Note that adding these PCs together does not necessarily mean that their effects are additive in the final audio.
|
| 29 |
+
We found sometimes the effects of least important PCs are more perceptible.
|
| 30 |
+
Try to play around with the sliders and buttons and see what you can come up with!
|
| 31 |
+
|
| 32 |
+
Currently only a portion of PCs are tweakable, but in the future we will add more controls and visualisation tools.
|
| 33 |
+
For example:
|
| 34 |
+
- Exposing all the PCs
|
| 35 |
+
- Directly controlling the parameters of the effects
|
| 36 |
+
- Visualising the PCA space
|
| 37 |
+
- Visualising the frequency responses/dynamic curves of the effects
|
| 38 |
+
- Exporting the effects settings as JSON files
|
| 39 |
+
"""
|
| 40 |
+
|
| 41 |
SLIDER_MAX = 3
|
| 42 |
SLIDER_MIN = -3
|
| 43 |
NUMBER_OF_PCS = 10
|
|
|
|
| 142 |
|
| 143 |
|
| 144 |
with gr.Blocks() as demo:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
with gr.Row():
|
| 146 |
with gr.Column():
|
| 147 |
+
gr.Markdown(
|
| 148 |
+
space_md,
|
| 149 |
+
)
|
| 150 |
audio_input = gr.Audio(type="numpy", sources="upload", label="Input Audio")
|
| 151 |
with gr.Row():
|
| 152 |
random_button = gr.Button(
|