{
  "date": "2026-10-02",
  "question": "How closely did this site's balanced-mode MIDI note durations match the known durations in one generated MP3 fixture?",
  "fixture": {
    "description": "A 3.60-second mono sequence of four isolated sine notes with known pitches, start times, and gate durations; 8 ms linear attack/release edges; no reverb or overlap.",
    "sampleRateHz": 44100,
    "channels": 1,
    "bitDepth": 16,
    "targetNotes": [
      {
        "pitch": 60,
        "start": 0.2,
        "duration": 0.24
      },
      {
        "pitch": 64,
        "start": 0.75,
        "duration": 0.36
      },
      {
        "pitch": 67,
        "start": 1.45,
        "duration": 0.5
      },
      {
        "pitch": 72,
        "start": 2.3,
        "duration": 0.72
      }
    ]
  },
  "encoding": "FFmpeg libmp3lame, constant 192 kbit/s, mono 44.1 kHz",
  "decoding": "ffmpeg version N-92722-gf22fcd4483 Copyright (c) 2000-2018 the FFmpeg developers; mono 44.1 kHz float PCM; this is not the browser AudioContext decoder",
  "detector": "Unmodified downsample, detectNotes, and buildMidi functions extracted from dist/script.js; Balanced mode (2), 11.025 kHz detector rate.",
  "matchingRule": "Greedy nearest same-pitch onset match within 0.35 seconds; duration is compared only after a pitch/onset match.",
  "metrics": {
    "targets": 4,
    "matched": 4,
    "missed": 0,
    "extraEvents": 0,
    "meanAbsoluteDurationErrorSeconds": 0.16
  },
  "matches": [
    {
      "pitch": 60,
      "targetStart": 0.2,
      "detectedStart": 0.046,
      "targetDuration": 0.24,
      "detectedDuration": 0.418,
      "durationErrorSeconds": 0.178,
      "absoluteDurationErrorSeconds": 0.178
    },
    {
      "pitch": 64,
      "targetStart": 0.75,
      "detectedStart": 0.604,
      "targetDuration": 0.36,
      "detectedDuration": 0.511,
      "durationErrorSeconds": 0.151,
      "absoluteDurationErrorSeconds": 0.151
    },
    {
      "pitch": 67,
      "targetStart": 1.45,
      "detectedStart": 1.3,
      "targetDuration": 0.5,
      "detectedDuration": 0.65,
      "durationErrorSeconds": 0.15,
      "absoluteDurationErrorSeconds": 0.15
    },
    {
      "pitch": 72,
      "targetStart": 2.3,
      "detectedStart": 2.136,
      "targetDuration": 0.72,
      "detectedDuration": 0.882,
      "durationErrorSeconds": 0.162,
      "absoluteDurationErrorSeconds": 0.162
    }
  ],
  "missed": [],
  "extras": [],
  "midiOutputEvents": [
    {
      "pitch": 60,
      "start": 0.046,
      "duration": 0.418
    },
    {
      "pitch": 64,
      "start": 0.604,
      "duration": 0.511
    },
    {
      "pitch": 67,
      "start": 1.3,
      "duration": 0.65
    },
    {
      "pitch": 72,
      "start": 2.136,
      "duration": 0.882
    }
  ],
  "assets": {
    "inputMp3": {
      "file": "known-duration-four-note-192k.mp3",
      "bytes": 87815,
      "sha256": "4fb053df828c33c72c06a64e1543424c736d3586cd280944c3bfb404379c6e42"
    },
    "midi": {
      "file": "site-balanced-output.mid",
      "bytes": 72,
      "sha256": "0e376a36ec27798ca99821025bfa1ccc4e6f2bb304710b36b7296f90c0d0ba4b"
    }
  },
  "limitations": [
    "One generated, monophonic sine-wave fixture only; not recorded instruments, voice, a full song, another converter, or a general accuracy score.",
    "The input is MP3-decoded by FFmpeg, not passed through the browser file picker or AudioContext path.",
    "Duration matching is evaluated only for events with the exact target pitch and an onset within the stated 0.35-second analysis window.",
    "The detector represents note ends using accepted analysis frames, so the measured duration is quantized by its frame/hop method."
  ]
}
