Source: https://guthlabs.ai/docs/instruments/beat-measure-duration-song-length-estimator/

instrument / verified-clean

# Beat/Measure Duration & Song Length Estimator

The current ledger marks this instrument verified clean within the source-bound verification corpus.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Inspectable records

[01**Overview**Purpose and lifecycle](<https://guthlabs.ai/docs/instruments/beat-measure-duration-song-length-estimator/>)[02**Mechanism**Method and assumptions](<https://guthlabs.ai/docs/instruments/beat-measure-duration-song-length-estimator/mechanism/>)[03**Implementation**Binding and validation](<https://guthlabs.ai/docs/instruments/beat-measure-duration-song-length-estimator/implementation/>)[04**Qualification**Evidence and errata](<https://guthlabs.ai/docs/instruments/beat-measure-duration-song-length-estimator/qualification/>)

## Ledger state

The current ledger marks this instrument verified clean within the source-bound verification corpus.

**Area**: Audio, Music, Photography & Color

**Tranche**: tranche-4

**Evidence ID**: t4-145

**Ledger rows**: 1

No ledger note is attached.

## Review findings

The duration arithmetic is standard under the stated unit assumptions, but the instrument cannot be verified unambiguously until the BPM beat unit, time-signature-to-beatsPerBar mapping, reverse formula, and whole-bar policy are specified. The empty honest_label is a concern: the label should disclose that results assume constant tempo, a fixed meter, and a defined BPM beat unit.

### Formula and scope findings

- The duration formula is correct only when BPM means the number of beats represented by beatsPerBar and the tempo is constant: duration_seconds = bars × beatsPerBar × 60/BPM.

- The claimed reverse operation has no formula in the specification. It should explicitly define bars = targetDurationSeconds × BPM / (beatsPerBar × 60).

- The specification does not define how BPM relates to the time signature. In compound meters such as 6/8, BPM may refer to eighth notes or dotted-quarter beats, producing different results.

- The specification does not define whether bars must be whole numbers when calculating bars needed for a target duration.

### Unit assumptions

- BPM is beats per minute for the beat counted by beatsPerBar.

- 60/BPM converts one beat into seconds.

- bars is dimensionless and beatsPerBar is beats per bar.

- target duration used by the reverse calculation is in seconds; minutes must first be converted by multiplying by 60.

- For a 6/8 example using beatsPerBar = 6, BPM is explicitly treated as eighth-note BPM, not dotted-quarter BPM.

## Boundary hardening

**BREAK_CLAIMED** · SELF_FLAGGED

BPM = 0 makes the duration formula undefined because it divides by zero; the instrument must reject that input. The 6/8 probe also exposes a convention hazard because treating the numerator as beatsPerBar differs from conventional compound-meter grouping.

## Errata and corrections

No applied erratum is attached to this unique-name record.

## Inspectable example

4 review vectors are recorded. One source-bound sample is shown below.

````
{
  "inputs": {
    "mode": "duration",
    "BPM": 120,
    "time_signature": "4/4",
    "beatsPerBar": 4,
    "bar_count": 16
  },
  "expected_outputs": {
    "duration_seconds": 32,
    "duration_minutes": 0.5333333333
  },
  "working": "Beat duration = 60/120 = 0.5 seconds. Beats in song = 16 × 4 = 64 beats. Duration = 64 × 0.5 = 32 seconds. Minutes = 32/60 = 0.5333333333 minutes."
}
````

## Related workflows

[Music Timing & Pitch Kitarrangement](<https://guthlabs.ai/docs/instrument-workflows/music-timing/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json · VERIFIED_CLEAN`

- `evidence-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
