from pydantic import BaseModel import yaml class FrequencyConfig(BaseModel): min: int max: int n_bins: int class AcousticalConstantsConfig(BaseModel): sound_speed: float air_density: float atmospheric_pressure: int reference_pressure: float measurement_distance: float directivity_factor: int class Config(BaseModel): default_loudspeaker_cfg: str frequency: FrequencyConfig acoustical_constants: AcousticalConstantsConfig def load_config(yaml_path: str) -> Config: with open(yaml_path, "r") as file: data = yaml.safe_load(file) return Config(**data) class ElectricalConfig(BaseModel): input_voltage: float coil_resistance: float coil_inductance: float class MechanicalConfig(BaseModel): mass: float compliance: float resistance: float class AcousticalConfig(BaseModel): effective_diameter: float class LoudspeakerConfig(BaseModel): electrical: ElectricalConfig electromechanical_factor: float mechanical: MechanicalConfig acoustical: AcousticalConfig def load_loudspeaker_config(yaml_path: str) -> LoudspeakerConfig: with open(yaml_path, "r") as file: data = yaml.safe_load(file) return LoudspeakerConfig(**data)