AcousticLocalizationSnapshot.java
package org.hammer.audio.experimental.acoustic;
import java.util.List;
import org.hammer.audio.experimental.acoustic.DelayAndSumBeamformer.BeamformingPoint;
import org.hammer.audio.geometry.LocalizationConstraint2D;
import org.hammer.audio.geometry.Vector2;
/** Visualization-ready output from the experimental acoustic localization pipeline. */
public record AcousticLocalizationSnapshot(
long sourceFrameIndex,
long sourceTimestampNanos,
SpectralPeak trackedFrequency,
List<TdoaEstimate> tdoaEstimates,
List<LocalizationConstraint2D> constraints,
List<BeamformingPoint> heatmap,
Vector2 estimatedPositionMeters) {
/** Create an immutable acoustic-localization snapshot. */
public AcousticLocalizationSnapshot {
if (trackedFrequency == null || estimatedPositionMeters == null) {
throw new IllegalArgumentException(
"trackedFrequency and estimatedPositionMeters must not be null");
}
tdoaEstimates = List.copyOf(tdoaEstimates);
constraints = List.copyOf(constraints);
heatmap = List.copyOf(heatmap);
}
}