02-bandpass-filters.py - Narrowing a bandpass filter bandwidth.
============================================================================================================================================


This example illustrates the difference between a simple IIR second-order
bandpass filter and a cascade of second-order bandpass filters. A cascade
of four bandpass filters with a high Q can be used as a efficient resonator
on the signal.

.. code-block:: python

    from pyo import *
    
    s = Server().boot()
    
    # White noise generator
    n = Noise(0.5)
    
    # Common cutoff frequency control
    freq = Sig(1000)
    freq.ctrl([SLMap(50, 5000, "lin", "value", 1000)], title="Cutoff Frequency")
    
    # Common filter's Q control
    q = Sig(5)
    q.ctrl([SLMap(0.7, 20, "log", "value", 5)], title="Filter's Q")
    
    # Second-order bandpass filter
    bp1 = Reson(n, freq, q=q)
    # Cascade of second-order bandpass filters
    bp2 = Resonx(n, freq, q=q, stages=4)
    
    # Interpolates between input objects to produce a single output
    sel = Selector([bp1, bp2]).out()
    sel.ctrl(title="Filter selector (0=Reson, 1=Resonx)")
    
    # Displays the spectrum contents of the chosen source
    sp = Spectrum(sel)
    
    s.gui(locals())

