1#![forbid(unsafe_code)]
2#![deny(unsafe_op_in_unsafe_fn)]
3mod calibration;
6mod config;
7mod dsp_profile;
8mod error;
9mod irs;
10mod plan;
11mod project;
12pub mod pyjson;
13mod record;
14mod signature;
15mod target;
16
17pub use calibration::{calibration_from_project, store_calibration};
18pub use config::{Band, Speaker, SpeakerConfig, default_bands, ordered_speakers};
19pub use dsp_profile::DspProfile;
20pub use error::ProjectError;
21pub use irs::{
22 MAX_IR_BYTES, ir_directory, ir_file, load_ir, read_mono_float_wav, read_wav_float32, save_ir,
23 try_write_wav_float32, write_wav_float32,
24};
25pub use plan::{
26 MeasurementPlan, PlanValidationError, SWEEP_LENGTHS, TimingReference, default_ref_role,
27 measurement_roles, plan_from_project, position_seconds, split_role, start_delay_seconds,
28 sweep_length_samples, sweep_seconds, timing_settings,
29};
30pub use project::{
31 FOCUS_STEPS, PROJECT_VERSION, Project, migrate_calibration_keys, migrate_group_keys,
32 rename_keys, snap_focus,
33};
34pub use pyjson::{PyJson, PyJsonError, dumps, dumps_compact, loads};
35pub use record::{
36 AttachedCalibration, IR_CACHE_LIMIT_BYTES, IrCache, LoadedIr, MAX_PROJECT_BYTES,
37 MeasurementRecord, MeasurementResult, MeasurementStore, MigrationWarning, RemovedPosition,
38 attached_calibration, calibration_fingerprint, load_project_irs, load_project_sources,
39 load_source, save_source, source_path,
40};
41pub use signature::{
42 FloatKey, MeasurementSignatureEntry, estimate_seconds, estimate_subs_seconds,
43 estimate_xo_seconds, estimate_xo_seconds_on, measured_positions, measurement_signature,
44 project_spl_offset, target_key,
45};
46pub use target::{TargetCurve, TargetJson};