{
  "date": "2026-10-03",
  "checkedAtUtc": "2026-10-03T05:03:55.731Z",
  "environment": {
    "node": "v24.19.0",
    "platform": "win32",
    "midiLibrary": "2.0.28"
  },
  "scope": "MIDI file parsing and controlled tempo-map rewrites of the actual offline quiet-c4 export from October 2. Not another audio transcription, DAW import, or browser conversion.",
  "sourceMidiSha256": "7638c48369c254926a2a1db9983916016075b78df3dcddc8c97d6b553e01f379",
  "sourceAppSha256": "e42f9b0b60bb6fd73b2539a1ae9ca3b09f34ab874e35423162b384df68c19660",
  "sourceAudio": "../velocity-2026-10-02/quiet-c4.mp3",
  "formula": "seconds = ticks / PPQ * 60 / BPM for a constant tempo from tick zero",
  "results": [
    {
      "id": "original",
      "operation": "Unchanged October 2 export; no injected tempo event.",
      "bytes": 100,
      "sha256": "7638c48369c254926a2a1db9983916016075b78df3dcddc8c97d6b553e01f379",
      "ppq": 480,
      "tempoEvents": [],
      "notes": [
        {
          "pitch": 60,
          "ticks": 156,
          "durationTicks": 1594,
          "startSeconds": 0.1625,
          "durationSeconds": 1.6604166666666667,
          "velocity": 0.6062992125984252
        }
      ]
    },
    {
      "id": "tempo-60-same-ticks",
      "operation": "Set tempo to 60 at tick zero; leave note ticks and durationTicks unchanged.",
      "bytes": 107,
      "sha256": "e1d49ac56695d9f7d0d102165ea11b2d90575f725966eead7162857e386afb05",
      "ppq": 480,
      "tempoEvents": [
        {
          "ticks": 0,
          "microsecondsPerBeat": 1000000
        }
      ],
      "notes": [
        {
          "pitch": 60,
          "ticks": 156,
          "durationTicks": 1594,
          "startSeconds": 0.325,
          "durationSeconds": 3.3208333333333333,
          "velocity": 0.6062992125984252
        }
      ]
    },
    {
      "id": "tempo-90-same-ticks",
      "operation": "Set tempo to 90 at tick zero; leave note ticks and durationTicks unchanged.",
      "bytes": 107,
      "sha256": "f7e7820632d22781f261ecb812593ff7c98af6bf53e931231bdcb60fdb921d92",
      "ppq": 480,
      "tempoEvents": [
        {
          "ticks": 0,
          "microsecondsPerBeat": 666666
        }
      ],
      "notes": [
        {
          "pitch": 60,
          "ticks": 156,
          "durationTicks": 1594,
          "startSeconds": 0.21666645,
          "durationSeconds": 2.213886675,
          "velocity": 0.6062992125984252
        }
      ]
    },
    {
      "id": "tempo-60-same-seconds",
      "operation": "Set tempo to 60 first, then rebuild notes from the original parsed seconds. This changes ticks; rounding is retained.",
      "bytes": 99,
      "sha256": "849f46e2b13b564f42726b45df8b69b745b799b5c6751d1b6fd05ae9c172c513",
      "ppq": 480,
      "tempoEvents": [
        {
          "ticks": 0,
          "microsecondsPerBeat": 1000000
        }
      ],
      "notes": [
        {
          "pitch": 60,
          "ticks": 78,
          "durationTicks": 797,
          "startSeconds": 0.1625,
          "durationSeconds": 1.6604166666666667,
          "velocity": 0.6062992125984252
        }
      ]
    }
  ]
}
