from audio_dsp.design.pipeline import Pipeline
from audio_dsp.stages import *
# create a DSP pipeline with 2 inputs
pipeline, input_edges = Pipeline.begin(2, fs=48000)
# add stages to the DSP pipeline
edge = pipeline.stage(VolumeControl, input_edges, "vol_ctl")
edge = pipeline.stage(CascadedBiquads, edge, "peq")
bypass, bass = pipeline.stage(Fork, edge, count = 2).forks
bass = pipeline.stage(Biquad, bass, "lpf")
bass = pipeline.stage(FixedGain, bass, "bass_boost")
bass = pipeline.stage(LimiterPeak, bass, "bass_sw")
mix0 = pipeline.stage(Adder, bass[0] + bypass[0])
mix1 = pipeline.stage(Adder, bass[1] + bypass[1])
lim = pipeline.stage(LimiterPeak, mix0 + mix1, "lim")
# set the DSP pipeline outputs
pipeline.set_outputs(lim)
# set stage defaults
pipeline["peq"].make_parametric_eq([
["peaking", 1000, 0.5, 3],
["notch", 2000, 1]
])
pipeline["lpf"].make_lowpass(200, 1)
pipeline["bass_boost"].set_gain(6)
pipeline["bass_sw"].make_limiter_peak(-100, 0.05, 0.15)
pipeline["lim"].make_limiter_peak(0, 0.01, 0.01)
# Display pipeline and frequency response of biquads
from ipywidgets import widgets
from IPython import display
def title(x): display.display(widgets.HTML(f"<h2>{x}</h2>"))
title("Pipeline diagram")
pipeline.draw()
title("lpf frequency response")
pipeline["lpf"].plot_frequency_response()
title("peq frequency response")
pipeline["peq"].plot_frequency_response()