64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
# Copyright 2025 XMOS LIMITED.
|
|
# This Software is subject to the terms of the XMOS Public Licence: Version 1.
|
|
"""Models for biquad filter stages."""
|
|
|
|
from typing import Literal
|
|
from pydantic import Field
|
|
|
|
from audio_dsp.models.stage import StageModel, StageParameters
|
|
from audio_dsp.models.fields import BIQUAD_TYPES, biquad_bypass
|
|
|
|
|
|
class BiquadParameters(StageParameters):
|
|
"""Parameters for a biquad filter.
|
|
|
|
Attributes
|
|
----------
|
|
filter_type : audio_dsp.models.fields.BIQUAD_TYPES
|
|
The parameters of the type of biquad filter to use (e.g., biquad_lowpass, biquad_highpass, etc.)
|
|
|
|
"""
|
|
|
|
filter_type: BIQUAD_TYPES = Field(
|
|
default=biquad_bypass(),
|
|
description="Type of biquad filter to implement and it's parameters.",
|
|
)
|
|
|
|
|
|
class Biquad(StageModel):
|
|
"""A single biquad filter stage.
|
|
|
|
A biquad filter is a second-order recursive filter that can implement various
|
|
filter types like lowpass, highpass, bandpass, etc. This stage implements a
|
|
single biquad section with slew rate limiting to prevent audio artifacts
|
|
when parameters are changed.
|
|
"""
|
|
|
|
op_type: Literal["Biquad"] = "Biquad"
|
|
parameters: BiquadParameters = Field(
|
|
default_factory=lambda: BiquadParameters(filter_type=biquad_bypass())
|
|
)
|
|
|
|
|
|
class BiquadSlewParameters(BiquadParameters):
|
|
"""Parameters for a slewing biquad filter."""
|
|
|
|
slew_shift: int = Field(
|
|
default=6, ge=0, lt=31, description="The shift value used in the exponential slew."
|
|
)
|
|
|
|
|
|
class BiquadSlew(StageModel):
|
|
"""A single biquad filter stage.
|
|
|
|
A biquad filter is a second-order recursive filter that can implement various
|
|
filter types like lowpass, highpass, bandpass, etc. This stage implements a
|
|
single biquad section with slew rate limiting to prevent audio artifacts
|
|
when parameters are changed.
|
|
"""
|
|
|
|
op_type: Literal["BiquadSlew"] = "BiquadSlew"
|
|
parameters: BiquadSlewParameters = Field(
|
|
default_factory=lambda: BiquadSlewParameters(filter_type=biquad_bypass())
|
|
)
|