Spaces:
Sleeping
Sleeping
Commit
·
6e962e9
1
Parent(s):
f2a0080
feat: add tone correction PEQ sliders
Browse files
app.py
CHANGED
|
@@ -10,6 +10,7 @@ import pyloudnorm as pyln
|
|
| 10 |
from hydra.utils import instantiate
|
| 11 |
from soxr import resample
|
| 12 |
from functools import partial, reduce
|
|
|
|
| 13 |
from torchcomp import coef2ms, ms2coef
|
| 14 |
from copy import deepcopy
|
| 15 |
|
|
@@ -626,6 +627,7 @@ with gr.Blocks() as demo:
|
|
| 626 |
plot_delay(fx), label="Delay Frequency Response", elem_id="delay-plot"
|
| 627 |
)
|
| 628 |
|
|
|
|
| 629 |
with gr.Row():
|
| 630 |
reverb_plot = gr.Plot(
|
| 631 |
plot_reverb(fx),
|
|
@@ -637,6 +639,54 @@ with gr.Blocks() as demo:
|
|
| 637 |
plot_t60(fx), label="Reverb T60", elem_id="t60-plot", min_width=160
|
| 638 |
)
|
| 639 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 640 |
with gr.Row():
|
| 641 |
json_output = gr.JSON(
|
| 642 |
model2json(fx), label="Effect Settings", max_height=800, open=True
|
|
@@ -705,14 +755,38 @@ with gr.Blocks() as demo:
|
|
| 705 |
]
|
| 706 |
delay_update_plot_flag = [True] * 4 + [False] * 2
|
| 707 |
|
| 708 |
-
|
| 709 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 710 |
|
| 711 |
def assign_fx_params(fx, *args):
|
| 712 |
-
peq_sliders, cmp_sliders, delay_sliders = (
|
| 713 |
-
args[:
|
| 714 |
-
args[split_sizes[0] : sum(split_sizes[:2])],
|
| 715 |
-
args[sum(split_sizes[:2]) : -1],
|
| 716 |
)
|
| 717 |
reverb_send_slider = args[-1]
|
| 718 |
for idx, s, attr_name in zip(peq_indices, peq_sliders, peq_attr_names):
|
|
@@ -725,6 +799,9 @@ with gr.Blocks() as demo:
|
|
| 725 |
m, name = get_last_attribute(fx[7].effects[0], attr_name)
|
| 726 |
f(m, name, s)
|
| 727 |
|
|
|
|
|
|
|
|
|
|
| 728 |
update_param(fx[7].params, "sends_0", 10 ** (reverb_send_slider / 20))
|
| 729 |
|
| 730 |
return fx
|
|
@@ -792,6 +869,18 @@ with gr.Blocks() as demo:
|
|
| 792 |
outputs=[z, fx_params, json_output] + update_pc_outputs,
|
| 793 |
)
|
| 794 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 795 |
render_button.click(
|
| 796 |
chain_functions(
|
| 797 |
lambda audio, ratio, x, *all_s: (
|
|
@@ -843,6 +932,16 @@ with gr.Blocks() as demo:
|
|
| 843 |
fx[7].effects[0].odd_pan.params.pan.item() * 200 - 100,
|
| 844 |
fx[7].effects[0].even_pan.params.pan.item() * 200 - 100,
|
| 845 |
fx[7].params.sends_0.log10().item() * 20,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 846 |
]
|
| 847 |
update_fx_outputs = [
|
| 848 |
pk1_freq,
|
|
@@ -873,6 +972,16 @@ with gr.Blocks() as demo:
|
|
| 873 |
odd_pan,
|
| 874 |
even_pan,
|
| 875 |
reverb_send,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 876 |
]
|
| 877 |
update_plots = lambda fx: [
|
| 878 |
plot_eq(fx),
|
|
|
|
| 10 |
from hydra.utils import instantiate
|
| 11 |
from soxr import resample
|
| 12 |
from functools import partial, reduce
|
| 13 |
+
from itertools import accumulate
|
| 14 |
from torchcomp import coef2ms, ms2coef
|
| 15 |
from copy import deepcopy
|
| 16 |
|
|
|
|
| 627 |
plot_delay(fx), label="Delay Frequency Response", elem_id="delay-plot"
|
| 628 |
)
|
| 629 |
|
| 630 |
+
_ = gr.Markdown("## FDN Reverb")
|
| 631 |
with gr.Row():
|
| 632 |
reverb_plot = gr.Plot(
|
| 633 |
plot_reverb(fx),
|
|
|
|
| 639 |
plot_t60(fx), label="Reverb T60", elem_id="t60-plot", min_width=160
|
| 640 |
)
|
| 641 |
|
| 642 |
+
with gr.Row():
|
| 643 |
+
fdn = fx[7].effects[1]
|
| 644 |
+
tone_correct_peq = fdn.eq
|
| 645 |
+
with gr.Column(min_width=160):
|
| 646 |
+
_ = gr.Markdown("Low Shelf")
|
| 647 |
+
tc_ls = tone_correct_peq[2]
|
| 648 |
+
tc_ls_freq = default_freq_slider(
|
| 649 |
+
minimum=30, maximum=450, value=tc_ls.params.freq.item()
|
| 650 |
+
)
|
| 651 |
+
tc_ls_gain = default_gain_slider(
|
| 652 |
+
minimum=-12, maximum=12, value=tc_ls.params.gain.item()
|
| 653 |
+
)
|
| 654 |
+
|
| 655 |
+
with gr.Column(min_width=160):
|
| 656 |
+
_ = gr.Markdown("Peak filter 1")
|
| 657 |
+
tc_pk1 = tone_correct_peq[0]
|
| 658 |
+
tc_pk1_freq = default_freq_slider(
|
| 659 |
+
minimum=200, maximum=2500, value=tc_pk1.params.freq.item()
|
| 660 |
+
)
|
| 661 |
+
tc_pk1_gain = default_gain_slider(
|
| 662 |
+
minimum=-12, maximum=12, value=tc_pk1.params.gain.item()
|
| 663 |
+
)
|
| 664 |
+
tc_pk1_q = default_q_slider(
|
| 665 |
+
minimum=0.1, maximum=3, value=tc_pk1.params.Q.item()
|
| 666 |
+
)
|
| 667 |
+
with gr.Column(min_width=160):
|
| 668 |
+
_ = gr.Markdown("Peak filter 2")
|
| 669 |
+
tc_pk2 = tone_correct_peq[1]
|
| 670 |
+
tc_pk2_freq = default_freq_slider(
|
| 671 |
+
minimum=600, maximum=7000, value=tc_pk2.params.freq.item()
|
| 672 |
+
)
|
| 673 |
+
tc_pk2_gain = default_gain_slider(
|
| 674 |
+
minimum=-12, maximum=12, value=tc_pk2.params.gain.item()
|
| 675 |
+
)
|
| 676 |
+
tc_pk2_q = default_q_slider(
|
| 677 |
+
minimum=0.1, maximum=3, value=tc_pk2.params.Q.item()
|
| 678 |
+
)
|
| 679 |
+
|
| 680 |
+
with gr.Column(min_width=160):
|
| 681 |
+
_ = gr.Markdown("High Shelf")
|
| 682 |
+
tc_hs = tone_correct_peq[3]
|
| 683 |
+
tc_hs_freq = default_freq_slider(
|
| 684 |
+
minimum=1500, maximum=16000, value=tc_hs.params.freq.item()
|
| 685 |
+
)
|
| 686 |
+
tc_hs_gain = default_gain_slider(
|
| 687 |
+
minimum=-12, maximum=12, value=tc_hs.params.gain.item()
|
| 688 |
+
)
|
| 689 |
+
|
| 690 |
with gr.Row():
|
| 691 |
json_output = gr.JSON(
|
| 692 |
model2json(fx), label="Effect Settings", max_height=800, open=True
|
|
|
|
| 755 |
]
|
| 756 |
delay_update_plot_flag = [True] * 4 + [False] * 2
|
| 757 |
|
| 758 |
+
tc_peq_sliders = [
|
| 759 |
+
tc_pk1_freq,
|
| 760 |
+
tc_pk1_gain,
|
| 761 |
+
tc_pk1_q,
|
| 762 |
+
tc_pk2_freq,
|
| 763 |
+
tc_pk2_gain,
|
| 764 |
+
tc_pk2_q,
|
| 765 |
+
tc_ls_freq,
|
| 766 |
+
tc_ls_gain,
|
| 767 |
+
tc_hs_freq,
|
| 768 |
+
tc_hs_gain,
|
| 769 |
+
]
|
| 770 |
+
tc_peq_attr_names = ["freq", "gain", "Q"] * 2 + ["freq", "gain"] * 2
|
| 771 |
+
tc_peq_indices = [0] * 3 + [1] * 3 + [2] * 2 + [3] * 2
|
| 772 |
+
|
| 773 |
+
all_effect_sliders = (
|
| 774 |
+
peq_sliders + cmp_sliders + delay_sliders + tc_peq_sliders + [reverb_send]
|
| 775 |
+
)
|
| 776 |
+
split_sizes = [
|
| 777 |
+
len(peq_sliders),
|
| 778 |
+
len(cmp_sliders),
|
| 779 |
+
len(delay_sliders),
|
| 780 |
+
len(tc_peq_sliders),
|
| 781 |
+
1,
|
| 782 |
+
]
|
| 783 |
+
split_indexes = list(
|
| 784 |
+
accumulate(split_sizes, initial=0)
|
| 785 |
+
) # [0, len(peq_sliders), len(peq_sliders) + len(cmp_sliders), ...]
|
| 786 |
|
| 787 |
def assign_fx_params(fx, *args):
|
| 788 |
+
peq_sliders, cmp_sliders, delay_sliders, tc_peq_sliders = map(
|
| 789 |
+
lambda i, j: args[i:j], split_indexes[:-2], split_indexes[1:-1]
|
|
|
|
|
|
|
| 790 |
)
|
| 791 |
reverb_send_slider = args[-1]
|
| 792 |
for idx, s, attr_name in zip(peq_indices, peq_sliders, peq_attr_names):
|
|
|
|
| 799 |
m, name = get_last_attribute(fx[7].effects[0], attr_name)
|
| 800 |
f(m, name, s)
|
| 801 |
|
| 802 |
+
for idx, s, attr_name in zip(tc_peq_indices, tc_peq_sliders, tc_peq_attr_names):
|
| 803 |
+
update_param(fx[7].effects[1].eq[idx].params, attr_name, s)
|
| 804 |
+
|
| 805 |
update_param(fx[7].params, "sends_0", 10 ** (reverb_send_slider / 20))
|
| 806 |
|
| 807 |
return fx
|
|
|
|
| 869 |
outputs=[z, fx_params, json_output] + update_pc_outputs,
|
| 870 |
)
|
| 871 |
|
| 872 |
+
for s in tc_peq_sliders:
|
| 873 |
+
s.input(
|
| 874 |
+
chain_functions(
|
| 875 |
+
lambda x, i, *args: x2z_common_steps(x, *args) + (i,),
|
| 876 |
+
lambda z, x, fx, e_pc_i: [z, x]
|
| 877 |
+
+ [model2json(fx), plot_reverb(fx)]
|
| 878 |
+
+ update_pc(z, e_pc_i),
|
| 879 |
+
),
|
| 880 |
+
inputs=[fx_params, extra_pc_dropdown] + all_effect_sliders,
|
| 881 |
+
outputs=[z, fx_params, json_output, reverb_plot] + update_pc_outputs,
|
| 882 |
+
)
|
| 883 |
+
|
| 884 |
render_button.click(
|
| 885 |
chain_functions(
|
| 886 |
lambda audio, ratio, x, *all_s: (
|
|
|
|
| 932 |
fx[7].effects[0].odd_pan.params.pan.item() * 200 - 100,
|
| 933 |
fx[7].effects[0].even_pan.params.pan.item() * 200 - 100,
|
| 934 |
fx[7].params.sends_0.log10().item() * 20,
|
| 935 |
+
fx[7].effects[1].eq[0].params.freq.item(),
|
| 936 |
+
fx[7].effects[1].eq[0].params.gain.item(),
|
| 937 |
+
fx[7].effects[1].eq[0].params.Q.item(),
|
| 938 |
+
fx[7].effects[1].eq[1].params.freq.item(),
|
| 939 |
+
fx[7].effects[1].eq[1].params.gain.item(),
|
| 940 |
+
fx[7].effects[1].eq[1].params.Q.item(),
|
| 941 |
+
fx[7].effects[1].eq[2].params.freq.item(),
|
| 942 |
+
fx[7].effects[1].eq[2].params.gain.item(),
|
| 943 |
+
fx[7].effects[1].eq[3].params.freq.item(),
|
| 944 |
+
fx[7].effects[1].eq[3].params.gain.item(),
|
| 945 |
]
|
| 946 |
update_fx_outputs = [
|
| 947 |
pk1_freq,
|
|
|
|
| 972 |
odd_pan,
|
| 973 |
even_pan,
|
| 974 |
reverb_send,
|
| 975 |
+
tc_pk1_freq,
|
| 976 |
+
tc_pk1_gain,
|
| 977 |
+
tc_pk1_q,
|
| 978 |
+
tc_pk2_freq,
|
| 979 |
+
tc_pk2_gain,
|
| 980 |
+
tc_pk2_q,
|
| 981 |
+
tc_ls_freq,
|
| 982 |
+
tc_ls_gain,
|
| 983 |
+
tc_hs_freq,
|
| 984 |
+
tc_hs_gain,
|
| 985 |
]
|
| 986 |
update_plots = lambda fx: [
|
| 987 |
plot_eq(fx),
|