Files
3d_audio/lib_audio_dsp/test/json/test_biquad_pipeline.py

79 lines
2.6 KiB
Python
Raw Normal View History

2025-12-11 09:43:42 +08:00
# Copyright 2025 XMOS LIMITED.
# This Software is subject to the terms of the XMOS Public Licence: Version 1.
"""Test biquad filter pipeline creation.
"""
from audio_dsp.design.parse_json import DspJson, make_pipeline, pipeline_to_dspjson
from audio_dsp.models.biquad import Biquad
def test_simple_biquad_pipeline():
"""Test creating a simple biquad filter pipeline."""
print("Creating simple stereo biquad pipeline...")
# Create a simple stereo biquad pipeline JSON
pipeline_json = {
"ir_version": 1,
"producer_name": "test_biquad",
"producer_version": "0.1",
"graph": {
"name": "Simple Biquad",
"fs": 48000,
"nodes": [
{
"op_type": "Biquad",
"parameters": {
"filter_type": {
"type": "lowpass",
"filter_freq": 1000,
"q_factor": 0.707
},
},
"placement": {
"input": [["inputs", 0], ["inputs", 1]],
"name": "StereoBiquad",
"thread": 0
}
}
],
"inputs": [
{
"name": "inputs",
"channels": 2
}
],
"outputs": [
{
"name": "outputs",
"input": [["StereoBiquad", 0], ["StereoBiquad", 1]]
}
]
}
}
dsp_json = DspJson(**pipeline_json)
pipeline = make_pipeline(dsp_json)
# Find our biquad stage
biquad_stage = None
for stage in pipeline.stages:
if stage.name == "biquad":
biquad_stage = stage
break
assert biquad_stage is not None, "Could not find Biquad stage in pipeline"
assert biquad_stage.parameters.filter_type.type == "lowpass", \
f"Expected filter_type 'lowpass', got {biquad_stage.parameters.filter_type.type}"
assert biquad_stage.parameters.filter_type.filter_freq == 1000, \
f"Expected filter_freq 1000, got {biquad_stage.parameters.filter_type.filter_freq}"
assert biquad_stage.parameters.filter_type.q_factor == 0.707, \
f"Expected q_factor 0.707, got {biquad_stage.parameters.filter_type.q_factor}"
new_json = pipeline_to_dspjson(pipeline)
assert dsp_json.graph == new_json.graph, "Pipeline JSON does not match original"
if __name__ == "__main__":
test_simple_biquad_pipeline()