RecordingInspection.java
package org.hammer.audio.recording;
import java.util.Objects;
import org.hammer.audio.core.AudioFormatDescriptor;
/**
* Immutable structural and integrity summary for one recording.
*
* @param formatVersion parsed binary format version
* @param format normalized audio format from the recording header
* @param integrity structural, finalization and checksum classification
* @param blockCount number of complete readable block records
* @param totalFrames total frames in complete readable blocks
* @param firstFrameIndex first complete block's frame index, or {@link Long#MIN_VALUE}
* @param lastFrameIndex last complete block's frame index, or {@link Long#MIN_VALUE}
* @param firstTimestampNanos first complete block's source timestamp, or {@link Long#MIN_VALUE}
* @param lastTimestampNanos last complete block's source timestamp, or {@link Long#MIN_VALUE}
* @param continuityGapCount detected discontinuities between complete source blocks
* @param payloadBytes serialized bytes occupied by complete block records
* @param sha256 verified lowercase SHA-256 for a complete version-2 file, otherwise empty
* @param detail human-readable integrity explanation
*/
public record RecordingInspection(
int formatVersion,
AudioFormatDescriptor format,
RecordingIntegrity integrity,
long blockCount,
long totalFrames,
long firstFrameIndex,
long lastFrameIndex,
long firstTimestampNanos,
long lastTimestampNanos,
long continuityGapCount,
long payloadBytes,
String sha256,
String detail) {
// Normalize required and optional fields.
public RecordingInspection {
Objects.requireNonNull(format, "format");
Objects.requireNonNull(integrity, "integrity");
sha256 = sha256 == null ? "" : sha256;
detail = detail == null ? "" : detail;
}
/** Returns whether this file proves a clean version-2 finalization. */
public boolean complete() {
return integrity == RecordingIntegrity.COMPLETE;
}
}