AcousticEmitter2D.java
package org.hammer.audio.experimental.acoustic.simulation;
import org.hammer.audio.experimental.acoustic.scenario.AcousticGroundTruth;
import org.hammer.audio.geometry.Vector2;
/** Deterministic 2D acoustic emitter used by the room simulator. */
public interface AcousticEmitter2D {
/** Start position in meters. */
Vector2 startMeters();
/** Constant source velocity in meters per second. */
Vector2 velocityMetersPerSecond();
/** Fundamental emitted frequency in Hz. */
double frequencyHz();
/** Source amplitude in the normalized range {@code [0, 1]}. */
double amplitude();
/** Position at simulation time {@code seconds}. */
default Vector2 positionAt(double seconds) {
return startMeters().plus(velocityMetersPerSecond().scale(seconds));
}
/** Sample emitted at simulation time {@code seconds}. */
double sampleAt(double seconds);
/** Sample emitted at simulation time {@code seconds} with a Doppler-shifted frequency. */
double sampleAt(double seconds, double observedFrequencyHz);
/** Acoustic metadata exported for scenario ground truth. */
default AcousticGroundTruth acousticGroundTruth() {
return AcousticGroundTruth.ofFrequency(frequencyHz());
}
}