Commit b3546c65 by PLN (Algolia)

gig: the set that logged itself, and the 17m44s before REC

Reconstruct 2026-09-24 from four independent lenses: gig-log eval, the
lcxl3-driver journal, gig-log focus, and full-resolution per-second levels
off the eleven Ardour stems. Eval and the surface journal agree to the
second on all fifteen boundaries, so nothing here is a statistical guess
the way CosmicFest's recovery had to be.

What the numbers say: 94 minutes, all fourteen planned tracks in order plus
sunny_side_up sixth, five xruns, zero throttle events. REC landed 17m44s
into the set, so salut_nu and love_first have no audio at all. Orbit 08 was
never record-armed and the control map lists it in every track. Neither
MIDI recorder captured a single control move.
parent 25b7ec8c
---
log: 048
title: "The set that logged itself"
date: 2026-09-25
task: "n/a — post-gig reconstruction, 2026-09-24"
tags: [tooling, salvage, mastering, gig]
shareable: true
---
## Cap (what & why)
CosmicFest-26 had to be recovered from one phone recording by three statistical
lenses, and six of eighteen rows came back `unresolved`. Thirteen months of
instrumentation later, Thu 24 asked the same question — *what did I actually
play, and what got recorded* — and this time the rig already knew.
## Manœuvre (how)
Four lenses, none trusted alone. gig-log's `eval` (a real ctrl+enter reached
GHCi) and the `lcxl3-driver` journal's `track ->` lines agreed **to the second**
on all 15 boundaries, so the timeline needed no fusion verdict at all — two
independent witnesses saying the same thing. The Ardour stems were then only
*measured* inside those windows, never used to guess a name.
One trap on the way: the first level pass read 4096 of every 48000 frames and
reported most orbits at 0% active. That was the window landing between hits, not
silence. Reading every sample of a 19 GB take costs 28 seconds. Decimation on
percussive material is not an optimisation, it is a wrong answer.
## Prise (findings / artifacts)
- `armada/tide-table/build_gig_reconstruction.py` — re-runnable, four lenses in.
- `take103_2026-09-24_recovered_set.md` + `.json` — the set, per-orbit levels.
- **Set: 18:09:57 → 19:44:06, 94 min, 15 tracks.** All 14 planned, in order,
plus `sunny_side_up` inserted 6th — the encore candidate the setlist had
deliberately parked.
- **5 xruns in 94 minutes. 0 throttle events.** The session's other 1177 belong
to soundcheck and the two laptop-sink nodes nobody cut. Four earlier sessions
logged 5172 / 4852 / 1114 / 987 Ardour xruns; the thread demotion holds.
- **REC at 18:27:41 — 17m44s late.** `salut_nu` and `love_first` exist in no
audio; `piment_bresilien` starts 3:10 in. 81% of the set on disk.
- **Orbit 08 was never armed** (`rec-enable value="0"`, alone among 12), and the
control map lists it in all 15 tracks. No file was created — an absent stem,
not a silent one.
- **No MIDI from either recorder.** gig-log bound seq port `133:0` at 00:59 and
never rebound; Ardour's `Keys` wrote 24 files of 26 bytes each.
## Sel (the shareable learning)
**The lens that saved the night was not built for it.** gig-log has a MIDI lens,
a recording lens, an eval lens, a thermal lens — and the reconstruction stands on
the *LED driver's log lines*, written to explain surface repaints. Meanwhile the
purpose-built MIDI lens had been dead since the night before and the purpose-built
OSC recording lens was wrong for the entire 76 minutes (`conflict: true` from the
first record to the last: Ardour's own transport feedback never once said
"recording" while it was recording).
Redundancy is not three copies of the good instrument. It is four instruments
that fail differently.
Corollary, learned the same morning: **the session file no longer holds the mix
you played.** Nine of twelve faders read −∞ in `Tidal Live.ardour`, saved at
19:44:41, twenty-six seconds after a surface `lap reset` zeroed the board. The
stems prove those faders were up — orbit 04 sits at a −17 dBFS median and is the
loudest orbit in 13 of 15 tracks. Audit the artifact, not the config.
## Hameçon (hook)
"I forgot to hit record." Ninety-four minutes later the laptop could still name
every track he played, to the second, from a log written by the thing that paints
the LEDs.
## Sillage (what it unlocks)
- Mastering can start: 11 stems, 76m19s, t0 = 18:27:41.201, per-orbit levels done.
- Peaks over 0 dBFS on 13 of 15 tracks (worst +7.7) — the limiter was working.
His ear decides whether that is the sound.
- A REC reminder is now buildable **and** the lens it must not use is identified.
- Two open holes with names: orbit 08's arm, and gig-log's MIDI rebind.
#!/usr/bin/env python3
"""Reconstruct a performed set from the rig's own logs plus the Ardour stems.
WHY THIS EXISTS
CosmicFest-26 had to be recovered from a single phone recording by three
statistical lenses, and six of eighteen rows came back `unresolved`
(`cosmicfest26_recovered_tracklist.md`). From 2026-09-24 the rig logs enough
that a set does not need guessing at all: this fuses four lenses that each
know something the others cannot, and only *measures* the audio — it never
uses audio to guess a name.
focus gig-log `track` — which .tidal was ON SCREEN. #148: looking at a
file is not playing it, so this is never a boundary on its own.
eval gig-log `eval` — a real ctrl+enter reached GHCi, with the dN
streams the block defined. This is the honest "the pattern changed".
surface lcxl3-driver journal `track ->` — the control map that got painted,
carrying the per-track orbit list: what the INSTRUMENT believed the
track uses. Independent of gig-log; it survived the gig where
gig-log's MIDI lens did not (it had bound port 133:0 at 00:59 and
never rebound, so `cc` is empty for the whole set).
stems full-resolution 1 s RMS/peak per orbit from the Ardour take. Ground
truth for what actually reached the DAW.
Boundaries come from surface+eval (they agree to the second). Stems are then
measured INSIDE those windows.
TWO READINGS THAT ARE NOT ERRORS
* an orbit MAPPED BUT QUIET — a knob existed, the orbit stayed under the
floor. Same reading as an unresolved sample name: normal, never an error.
* an orbit HEARD OFF-MAP — it played with no knob on the surface. Can also be
a previous pattern still running, so it is reported, not interpreted.
DECIMATION IS A TRAP HERE. The first pass read 4096 of every 48000 frames and
the window kept landing between hits, so most orbits looked 0% active. Every
level number below comes from every sample; the full pass costs ~30 s for a
90-minute 11-orbit take, which is cheaper than being wrong.
USAGE
build_gig_reconstruction.py --log ~/.local/share/parvagues/gig-log/gig-*.jsonl \
--take Take103 --date 2026-09-24 --window 18:09 19:45 --setlist armada/setlist_thu24.txt
"""
from __future__ import annotations
import argparse
import datetime as dt
import json
import math
import os
import re
import struct
import subprocess
import sys
from pathlib import Path
import numpy as np
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "tools"))
SR = 48000
STEM_DIR_DEFAULT = Path(
"/home/pln/Work/Sound/Ardour/Tidal Live/interchange/Tidal Live/audiofiles")
ACTIVE_FLOOR = 1e-3 # -60 dBFS: below this an orbit is not sounding
ACTIVE_FRAC = 0.10 # heard = above the floor for >10% of the window
# ── stems ────────────────────────────────────────────────────────────────────
def data_chunk(path: Path) -> tuple[int, int]:
"""(byte offset, byte size) of the WAV `data` chunk. Ardour writes plain
RIFF/WAVE float32 here — no `bext`, so there is no BWF origination time to
read and the take's wall clock has to come from mtime - duration."""
with path.open("rb") as f:
f.read(12)
pos = 12
while True:
f.seek(pos)
head = f.read(8)
if len(head) < 8:
raise ValueError(f"no data chunk in {path}")
cid, size = head[:4], struct.unpack("<I", head[4:8])[0]
if cid == b"data":
return pos + 8, size
pos += 8 + size + (size & 1)
def stem_levels(stem_dir: Path, take: str) -> tuple[dict[int, dict], float, float]:
"""Per-second RMS and peak for every orbit stem of `take`, the take's wall-clock
t0, and its duration. Orbits absent from disk are absent from the result —
that gap is a finding, not an error to paper over."""
orbits: dict[int, dict] = {}
t0 = dur = None
for orb in range(1, 17):
chans = []
for ch in ("L", "R"):
p = stem_dir / f"{take}_Tidal {orb:02d}-1%{ch}.wav"
if not p.exists():
chans = []
break
off, size = data_chunk(p)
secs = (size // 4) // SR
rms = np.empty(secs, "f8")
peak = np.empty(secs, "f8")
with p.open("rb") as f:
f.seek(off)
done = 0
while done < secs:
k = min(60, secs - done)
buf = np.frombuffer(f.read(k * SR * 4), dtype="<f4")
buf = buf.astype("f8").reshape(k, SR)
rms[done:done + k] = np.sqrt((buf * buf).mean(axis=1))
peak[done:done + k] = np.abs(buf).max(axis=1)
done += k
chans.append((rms, peak))
if dur is None:
dur = (size // 4) / SR
t0 = p.stat().st_mtime - dur
if not chans:
continue
orbits[orb] = {"rms": np.maximum(chans[0][0], chans[1][0]),
"peak": np.maximum(chans[0][1], chans[1][1])}
if t0 is None:
raise SystemExit(f"no stems found for {take} under {stem_dir}")
return orbits, t0, dur
# ── lenses ───────────────────────────────────────────────────────────────────
def gig_log(log: Path, day: str, lo: str, hi: str):
"""(eval events, rec transitions, session stats) inside the window."""
evals, recs, samples = [], [], []
for line in log.open(errors="replace"):
if not line.strip():
continue
try:
r = json.loads(line)
except json.JSONDecodeError:
continue
t = r.get("t")
if not isinstance(t, (int, float)):
continue
d = dt.datetime.fromtimestamp(t)
if d.strftime("%F") != day or not (lo <= d.strftime("%H:%M") <= hi):
continue
k = r.get("k")
if k == "eval":
evals.append((t, r.get("path", ""), r.get("d") or []))
elif k == "rec":
recs.append(r)
elif k == "s":
samples.append(r)
return evals, recs, samples
def surface_loads(day: str, lo: str, hi: str):
"""(t, track, orbits) per `track ->` line of lcxl3-driver.
The one lens that kept working all night. Orbit numbers here are the LCXL
column numbering, which is dN — BootTidal.hs maps dN to `orbit N-1`, and
Ardour's `Tidal NN` stem carries orbit NN-1, so LCXL orbit N == stem
`Tidal NN`."""
out = subprocess.run(
["journalctl", "--user", "-u", "lcxl3-driver.service", "--no-pager",
"-o", "short-iso", "--since", f"{day} {lo}", "--until", f"{day} {hi}"],
capture_output=True, text=True).stdout
loads = []
for line in out.splitlines():
m = re.search(r"^(\S+) .*track -> (\S+): .*orbits \[([0-9, ]*)\]", line)
if not m:
continue
loads.append((dt.datetime.fromisoformat(m.group(1)).timestamp(),
m.group(2),
[int(x) for x in m.group(3).replace(" ", "").split(",") if x]))
return loads
# ── fusion ───────────────────────────────────────────────────────────────────
def db(x: float) -> float:
return -999.0 if x <= 0 else round(20 * math.log10(x), 1)
def build(args) -> dict:
day = args.date
lo, hi = args.window
evals, recs, samples = gig_log(Path(args.log), day, lo, hi)
loads = surface_loads(day, lo, hi)
if not loads:
raise SystemExit("surface lens empty — is lcxl3-driver's journal still there?")
orbits, t0, dur = stem_levels(Path(args.stems), args.take)
missing = [o for o in range(1, max(orbits) + 1) if o not in orbits]
rec_on = next((r["t"] for r in recs if r.get("rec")), None)
rec_off = next((r["t"] for r in recs if r.get("rec") is False), None)
conflicts = [r for r in recs if r.get("conflict")]
# windows: consecutive loads, re-loads of the same track folded in
seq = []
for t, name, orbs in loads:
if seq and seq[-1]["track"] == name:
seq[-1]["orbits_mapped"] = sorted(set(seq[-1]["orbits_mapped"]) | set(orbs))
continue
seq.append({"track": name, "start": t, "orbits_mapped": sorted(orbs)})
# anything loaded at/after the rec stop is post-set surface noise, not music
cut = (rec_off or seq[-1]["start"]) - 5
post = [s["track"] for s in seq if s["start"] >= cut]
seq = [s for s in seq if s["start"] < cut]
for a, b in zip(seq, seq[1:]):
a["end"] = b["start"]
seq[-1]["end"] = rec_off or seq[-1]["start"]
planned = []
if args.setlist:
planned = [l.split()[0].rsplit("/", 1)[1][:-6]
for l in Path(args.setlist).read_text().splitlines()
if l.strip() and not l.startswith("#")]
hm = lambda t: dt.datetime.fromtimestamp(t).strftime("%H:%M:%S")
tracks = []
for i, s in enumerate(seq, 1):
ev = [(t, d) for t, p, d in evals
if p.rsplit("/", 1)[-1][:-6] == s["track"] and s["start"] - 3 <= t < s["end"]]
row = {"n": i, "track": s["track"], "start": hm(s["start"]), "end": hm(s["end"]),
"len_s": round(s["end"] - s["start"]),
"in_setlist": s["track"] in planned,
"orbits_mapped": s["orbits_mapped"],
"evals": [hm(t) for t, _ in ev],
"streams_evaled": sorted({x for _, d in ev for x in d}, key=lambda x: int(x[1:]))}
a, b = int(max(0, s["start"] - t0)), int(min(dur, s["end"] - t0))
row["captured_s"] = max(0, b - a) if s["end"] > t0 else 0
row["captured_pct"] = round(100 * row["captured_s"] / max(1, row["len_s"]))
if row["captured_s"] > 5:
lv, heard = {}, []
for o in sorted(orbits):
r, pk = orbits[o]["rms"][a:b], orbits[o]["peak"][a:b]
frac = float(np.mean(r > ACTIVE_FLOOR))
lv[o] = {"active_pct": round(100 * frac),
"rms_p50_db": db(float(np.median(r))),
"rms_max_db": db(float(r.max())),
"peak_db": db(float(pk.max()))}
if frac > ACTIVE_FRAC:
heard.append(o)
row["orbits_heard"] = heard
row["mapped_but_quiet"] = [o for o in s["orbits_mapped"]
if o in orbits and o not in heard]
row["heard_off_map"] = [o for o in heard if o not in s["orbits_mapped"]]
row["peak_db"] = max(v["peak_db"] for v in lv.values())
row["loudest_orbit"] = max(lv, key=lambda o: lv[o]["rms_p50_db"])
row["levels"] = lv
tracks.append(row)
played = [s["track"] for s in seq]
return {
"take": args.take, "date": day,
"set_start": hm(seq[0]["start"]), "set_end": hm(seq[-1]["end"]),
"set_len_s": round(seq[-1]["end"] - seq[0]["start"]),
"stem_t0": dt.datetime.fromtimestamp(t0).strftime("%H:%M:%S.%f")[:-3],
"stem_len_s": round(dur),
"rec_started": hm(rec_on) if rec_on else None,
"rec_stopped": hm(rec_off) if rec_off else None,
"head_lost_s": round(t0 - seq[0]["start"]),
"captured_pct": round(100 * dur / (seq[-1]["end"] - seq[0]["start"])),
"orbits_missing_from_take": missing,
"rec_lens_conflicts": len(conflicts),
"midi_cc_in_window": 0 if not any(r.get("k") == "cc" for r in samples) else None,
"planned_not_played": [p for p in planned if p not in played],
"played_not_planned": [p for p in played if p not in planned],
"post_set_loads": post,
"tracks": tracks,
}
def table(out: dict) -> str:
f = lambda L: ",".join(f"{x:02d}" for x in L) if L else "—"
rows = ["| # | track | start | len | cap% | mapped | heard | quiet | off-map | pk dBFS | loudest |",
"|---|---|---|---|---|---|---|---|---|---|---|"]
for r in out["tracks"]:
rows.append(
f"| {r['n']} | `{r['track']}`{'' if r['in_setlist'] else ' ⚠' } | {r['start']} | "
f"{r['len_s']//60}:{r['len_s']%60:02d} | {r['captured_pct']} | "
f"{f(r['orbits_mapped'])} | {f(r.get('orbits_heard') or [])} | "
f"{f(r.get('mapped_but_quiet'))} | {f(r.get('heard_off_map'))} | "
f"{r.get('peak_db', '—')} | {r.get('loudest_orbit', '—')} |")
return "\n".join(rows)
def main() -> int:
ap = argparse.ArgumentParser(description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter)
ap.add_argument("--log", required=True, help="gig-log JSONL covering the set")
ap.add_argument("--take", required=True, help="Ardour take id, e.g. Take103")
ap.add_argument("--date", required=True, help="YYYY-MM-DD of the set")
ap.add_argument("--window", nargs=2, metavar=("HH:MM", "HH:MM"), required=True)
ap.add_argument("--setlist", help="planned setlist, to diff against")
ap.add_argument("--stems", default=str(STEM_DIR_DEFAULT))
ap.add_argument("--out", help="JSON path")
a = ap.parse_args()
out = build(a)
if a.out:
Path(a.out).write_text(json.dumps(out, indent=1))
print(f"{out['take']} {out['date']} set {out['set_start']}–{out['set_end']} "
f"({out['set_len_s']//60} min), stems from {out['stem_t0']} "
f"({out['stem_len_s']//60} min = {out['captured_pct']}%)")
if out["head_lost_s"] > 0:
print(f" head lost: {out['head_lost_s']//60}m{out['head_lost_s']%60:02d}s")
if out["orbits_missing_from_take"]:
print(f" orbits with NO stem: {out['orbits_missing_from_take']}")
print()
print(table(out))
if out["played_not_planned"]:
print("\nplayed, not on the setlist:", ", ".join(out["played_not_planned"]))
if out["planned_not_played"]:
print("planned, never played :", ", ".join(out["planned_not_played"]))
return 0
if __name__ == "__main__":
raise SystemExit(main())
...@@ -743,3 +743,38 @@ no number. The launcher now reads the knobs and names their owner. ...@@ -743,3 +743,38 @@ no number. The launcher now reads the knobs and names their owner.
a thirteen-minute silence caused by a diagnostic SuperDirt restart. Worth a thirteen-minute silence caused by a diagnostic SuperDirt restart. Worth
recording as pacing data: the gig-eve session that produced the most repairs also recording as pacing data: the gig-eve session that produced the most repairs also
produced the least playing, and he called it himself rather than grinding. produced the least playing, and he called it himself rather than grinding.
---
## 2026-09-24 — the AI ENGINEER set (Take103)
**"boom, was a good live!"** and **"overall great gig bro"** — the whole-set
verdict, unprompted, the morning after. First unqualified positive on a full
two-hour slot. Worth holding against the measurements: 5 xruns in 94 minutes,
zero throttle events, all 14 planned tracks in the planned order. The night the
rig stopped being the subject.
**"the midiviz had great success"** — audience reaction to the MIDI lens, not his
own. Third independent signal that the *visual is part of the instrument*,
after "the midi mon is beautiful" and the `salut_nu`-has-no-backdrop complaint.
The taste is consistent and it is not about his comfort: he wants the visual
layer treated as a deliverable of the performance, because the room responds to
it. Note the irony worth telling: the surface the audience loved is the one whose
own log captured nothing — gig-log's `cc` stream is empty for the entire set.
**"i had forgotten to REC at first (we can discuss how to make that reminded!)"**
— measured: REC landed at 18:27:41, the set started 18:09:57, so **17m44s** and
two whole tracks (`salut_nu`, `love_first`) exist in no recording. He raised it
himself before being told, and asked for a reminder rather than a fix. Pacing
signal: the miss is at the *start* of the set, where attention is on the room and
the first pattern, not on the DAW.
**He played `sunny_side_up` 6th, off the setlist.** `setlist_thu24.txt`
deliberately parked it as the encore candidate ("the most-played thing in the
catalog, and it is NOT in the 14"). It went in at 18:42:41, right after
`bain_electrique`, the set's fastest. Not a mistake to log — a live decision, and
the only deviation from the written order in 94 minutes. Ask him what it was for:
a lift after the 128 BPM, or a reach for something safe?
**`rose_rouge` ran 11m34s**, nearly double the set's median track. The closer
took its time. Consistent with the "closes on the slowest" design note.
# Take103 — 2026-09-24, the set as it actually happened
Reconstructed from the rig's own logs plus the Ardour stems, by
`build_gig_reconstruction.py`. Re-runnable:
armada/tide-table/build_gig_reconstruction.py \
--log ~/.local/share/parvagues/gig-log/gig-20260924-005926.jsonl \
--take Take103 --date 2026-09-24 --window 18:09 19:45 \
--setlist armada/setlist_thu24.txt \
--out armada/tide-table/take103_2026-09-24_set.json
Audio identity is **Take103 + 2026-09-24**. Gig metadata (venue, set title,
poster, lineup) is not in this file and was not invented: there is no entry under
`~/Work/Perso/www/content/lives/2026/` for this date. "AI ENGINEER" is the label
in `backlog.md`; the play order is `armada/setlist_thu24.txt`.
Unlike CosmicFest-26, nothing here is a statistical guess. Four lenses, each
independent, and the audio is only ever *measured* — never used to name a track.
| lens | what it knows | independent of |
|---|---|---|
| **surface** | `lcxl3-driver` journal `track ->`: the control map painted, with its per-track orbit list | gig-log entirely — separate process, separate journal |
| **eval** | gig-log `eval`: a real ctrl+enter reached GHCi, and which `dN` the block defined | the surface |
| **focus** | gig-log `track`: which `.tidal` was on screen. #148 — looking is not playing, never a boundary alone | — |
| **stems** | full-resolution 1 s RMS/peak per orbit, every sample read | all of the above; it is bytes on disk |
Surface and eval agree to the second on all 15 boundaries, so the timeline below
is not a fusion verdict — it is two witnesses saying the same thing.
## Headline
```
set 18:09:57 → 19:44:06 94 min, 15 tracks
stems 18:27:41 → 19:43:59 76 min = 81% of the set
lost 17m44s off the head salut_nu, love_first, and 3:10 of piment_bresilien
orbits 11 of 12 on disk Tidal 08 has no stem at all
xruns 5, in 94 minutes core 0 / package 0 throttle events
```
The 14 planned tracks were all played, in the planned order, with
**`sunny_side_up` inserted 6th** — the encore candidate `setlist_thu24.txt`
deliberately left out of the 14. Nothing was dropped.
## The set
⚠ = played but not on the setlist. `mapped` = orbits the LCXL control map covered.
`heard` = orbits above −60 dBFS for >10% of the window, from the stems. `pk dBFS`
is the loudest single orbit peak in the window; stems are float, so >0 is loud,
not clipped.
| # | track | start | len | cap% | mapped | heard | quiet | off-map | pk dBFS | loudest |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | `salut_nu` | 18:09:57 | 9:21 | 0 | 01–10 | — | — | — | — | — |
| 2 | `love_first` | 18:19:18 | 5:13 | 0 | 01–06,08–12 | — | — | — | — | — |
| 3 | `piment_bresilien` | 18:24:31 | 5:54 | 46 | 01–06,08,09 | 01–06,09,12 | — | 12 | −4.1 | 1 |
| 4 | `take_5_drops` | 18:30:25 | 8:43 | 100 | 01,02,03,05,06,08,10,11,12 | 01–06,09,12 | 10,11 | 04,09 | **+7.7** | 4 |
| 5 | `bain_electrique` | 18:39:08 | 3:33 | 100 | 01–04,06–11 | 01–07,09,10,12 | 11 | 05,12 | +5.3 | 4 |
| 6 | `sunny_side_up` ⚠ | 18:42:41 | 5:22 | 100 | 01–08,10,11 | 01–07,09 | 10,11 | 09 | +1.4 | 4 |
| 7 | `oct_16_haunted_house_insouciance` | 18:48:03 | 6:24 | 100 | 01,02,03,05–11 | 01–07,09 | 10,11 | 04 | +5.1 | 4 |
| 8 | `ete_a_mauerpark` | 18:54:27 | 5:16 | 100 | 01–06,08,09 | 01–05,07,09 | 06 | 07 | +4.2 | 4 |
| 9 | `chere_mireille` | 18:59:43 | 6:04 | 100 | 01–09,11,12 | 01–05,07,11 | 06,09,12 | — | +5.3 | 4 |
| 10 | `sept1` | 19:05:47 | 7:18 | 100 | 01–06,08–12 | 01–05,09,11 | 06,10,12 | — | +6.7 | 4 |
| 11 | `cafe_bouillant` | 19:13:05 | 5:50 | 100 | 01–08,11 | 01–06 | 07,11 | — | **+7.6** | 4 |
| 12 | `cafe_tiede` | 19:18:55 | 5:30 | 100 | 01–06,08,10,11,12 | 01–06,11 | 10,12 | — | +2.6 | 4 |
| 13 | `force_motrice` | 19:24:25 | 3:50 | 100 | 02–11 | 01–05,09,11 | 06,07,10 | 01 | +4.7 | 4 |
| 14 | `cafe_glace` | 19:28:15 | 4:17 | 100 | 01–08 | 01–06 | 07 | — | +3.5 | 4 |
| 15 | `rose_rouge` | 19:32:32 | 11:34 | 99 | 01–08,10,11,12 | 01–07,11,12 | 10 | — | +5.8 | 5 |
Per-orbit `active_pct`, median and max RMS, and peak for every window are in
`take103_2026-09-24_set.json`.
Two readings in that table are **not errors**. *quiet* means a knob existed and
the orbit stayed under the floor — the same reading as an unresolved sample name.
*off-map* means an orbit sounded with no knob painted for it, which can equally be
a previous pattern still running; `piment_bresilien`'s orbit 12 arrives with
`love_first` still in the room, and is reported, not interpreted.
## What the recording is missing, and why
**1. The head: 17m44s.** REC was pressed at **18:27:41**, and the files lens
caught bytes landing at 18:27:47. The set had started at 18:09:57. So
`salut_nu` (9:21) and `love_first` (5:13) exist in no audio at all, and
`piment_bresilien` is captured from 3:10 in. This is the one PLN already knew
about; the two numbers he did not have are *when* and *how much*.
**2. Orbit 08, the whole night.** `Tidal 08` in
`../Ardour/Tidal Live/Tidal Live.ardour` carries
`<Controllable name="rec-enable" … value="0"/>`. Every other Tidal route is
`value="1"`. It was never armed, so no `Take103_Tidal 08` file was ever created —
not a silent stem, an absent one.
That costs something in every single track: the surface lens lists orbit 8 in the
control map of **all 15**. `d8` is `xfade 8 . (|< orbit 7)` (`BootTidal.hs:222`),
Ardour's `Tidal 08` is that orbit's stem, and the gig-log `eval` stream lists
`d8` in every evaluated block of the night. Whatever it was carrying per track is
not recoverable from this take — and cannot be measured, because the Master bus
was not recorded either, so there is no reference to subtract the 11 stems from.
**3. No MIDI, from either recorder.** gig-log's `cc` stream has 145 records, all
between 00:59 and 01:01 the night *before*: it bound sequencer port `133:0` at
startup and never rebound after the board was replugged. That is the known bug
already written down in `TODO_GIG.md` ("gig-log loses its MIDI address and never
looks for it again"). Ardour's `Keys` track wrote `Take104_Keys-1.mid` and
23 others at 26 bytes each — empty files. So **not one fader move or knob turn
from the performance was captured as MIDI.**
What survived instead is the `lcxl3-driver` journal: 89 lines across the gig,
every track load with its orbit list, its control count, its lap reset. That is
what made this reconstruction possible, and it is the lens nobody designed for
the job.
## The rig, measured
From gig-log, 18:09:57 → 19:44:06, cumulative counters differenced across the
window (the raw fields are totals; a sum of them is meaningless):
```
samples 5650 ticks over a 5650 s window — gig-log missed nothing
xruns 5 1 SuperCollider · 3 UMC input · 1 laptop sink
throttle 0 / 0 core / package, zero events for 94 minutes
package temp 66–77 °C, median 70
fan median 2950, max 3168 rpm
cpu median 18% average, hottest core median 49% / max 92%
scsynth 20.1% cpu median (max 42.8), RSS pinned at 5325 MB start to end
sclang 2.0% cpu median, RSS pinned at 324 MB
ArdourGUI 30.8% median (max 141), RSS 585 → 679 MB
pulsar 108% median (max 265), RSS 1332 → 1482 MB, peak 1685
```
**Five xruns in ninety-four minutes** is the number of the night. The session's
full 1182 belong to soundcheck and to the two `sof_sdw` laptop-sink nodes
(466 + 464) — the laptop speakers `TODO_GIG` step 4 said to cut and whose
checkbox stayed unticked. Ardour itself: 60 for the whole session, and the audio
path took 5 during the actual set. The `parvagues-protect` thread demotion from
the 22nd holds up under load: four earlier sessions logged 5172 / 4852 / 1114 /
987 Ardour xruns.
Two things the log says happened and memory would not:
* **ArdourGUI was absent for 349 s of the window** — up at 17:12:45, gone at
17:21:00, back at 17:21:06. Both during soundcheck, both before the set.
* **pulsar disappeared at 19:44:22**, sixteen seconds after REC stopped. Not
during the music.
* **gig-log itself was killed**, not stopped: no `end` record.
## Two instrument bugs this take exposes
**The OSC recording lens was wrong all night.** The 18:27:47 `rec` record is
`"conflict": true` — the files lens saw bytes landing while OSC reported
`arm:false roll:false`. It stayed that way for the entire 76 minutes and only
agreed at the stop. Ardour's own transport feedback never once said "recording"
while it was recording. Anything built on that signal — a REC reminder above all
— would have fired continuously through a perfectly good take.
**The saved session no longer holds the gig's mix.** `Tidal Live.ardour` was
written at 19:44:41 and has `Tidal 02, 03, 04, 05, 06, 07, 08, 10, 12` at
`gaincontrol` = 0 → −∞ dB. The stems prove those faders were up while playing:
orbit 04 alone sits at a −17 dBFS median and is the loudest orbit in 13 of the
15 tracks. Between the last note and the save, the LCXL logged two `lap reset`
lines (19:44:15, 19:44:16) and `surface-state.json` went to all-zero. So the
faders on disk are the post-gig surface state, not the performance — do not read
that file as a mix reference. (`TODO_GIG` step 6, "Master fader up with the
mouse. Then Ctrl+S", was never checked off either.)
## For the mastering pass
* **Source of truth is 11 stems, 76m19s, starting 18:27:41.201.** The take is
plain RIFF/WAVE float32 — Ardour wrote no `bext` chunk, so there is no BWF
origination timestamp and the wall clock comes from `mtime − duration`,
corroborated within 6 s by the files lens at 18:27:47.
* **Peaks are over 0 dBFS on 13 of 15 tracks**, worst `take_5_drops` at +7.7 and
`cafe_bouillant` at +7.6. Float, so nothing clipped on disk; but the Master
bus ran at −5.0 dB into an ACE Compressor and an LSP Limiter, and those numbers
say the limiter was doing real work. Whether that is the sound wanted is PLN's
ear to decide — there is no Master recording to measure it against.
* **Orbit 04 is the spine**: loudest orbit in 13 of 15 tracks, 89.8% active
across the whole take, median −17 dBFS. Its role per track still has to be
measured, never read off a name.
* **`rose_rouge` ran 11m34s**, by far the longest — the set closed slow and long,
as designed.
{
"take": "Take103",
"date": "2026-09-24",
"set_start": "18:09:57",
"set_end": "19:44:06",
"set_len_s": 5649,
"stem_t0": "18:27:41.201",
"stem_len_s": 4579,
"rec_started": "18:27:47",
"rec_stopped": "19:44:06",
"head_lost_s": 1064,
"captured_pct": 81,
"orbits_missing_from_take": [
8
],
"rec_lens_conflicts": 4579,
"midi_cc_in_window": 0,
"planned_not_played": [],
"played_not_planned": [
"sunny_side_up"
],
"post_set_loads": [
"bain_electrique",
"oct_16_haunted_house_insouciance"
],
"tracks": [
{
"n": 1,
"track": "salut_nu",
"start": "18:09:57",
"end": "18:19:18",
"len_s": 561,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10
],
"evals": [
"18:13:31"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"d10"
],
"captured_s": 0,
"captured_pct": 0
},
{
"n": 2,
"track": "love_first",
"start": "18:19:18",
"end": "18:24:31",
"len_s": 313,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
8,
9,
10,
11,
12
],
"evals": [
"18:19:46",
"18:20:58"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d8",
"d9",
"d10",
"d11",
"d12"
],
"captured_s": 0,
"captured_pct": 0
},
{
"n": 3,
"track": "piment_bresilien",
"start": "18:24:31",
"end": "18:30:25",
"len_s": 354,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
8,
9
],
"evals": [
"18:24:51"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d8",
"d9"
],
"captured_s": 163,
"captured_pct": 46,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
9,
12
],
"mapped_but_quiet": [],
"heard_off_map": [
12
],
"peak_db": -4.1,
"loudest_orbit": 1,
"levels": {
"1": {
"active_pct": 88,
"rms_p50_db": -18.0,
"rms_max_db": -11.7,
"peak_db": -4.1
},
"2": {
"active_pct": 92,
"rms_p50_db": -39.9,
"rms_max_db": -32.3,
"peak_db": -15.4
},
"3": {
"active_pct": 93,
"rms_p50_db": -39.8,
"rms_max_db": -33.9,
"peak_db": -13.6
},
"4": {
"active_pct": 98,
"rms_p50_db": -20.2,
"rms_max_db": -14.2,
"peak_db": -4.1
},
"5": {
"active_pct": 77,
"rms_p50_db": -39.6,
"rms_max_db": -26.8,
"peak_db": -11.3
},
"6": {
"active_pct": 50,
"rms_p50_db": -62.1,
"rms_max_db": -21.8,
"peak_db": -15.0
},
"7": {
"active_pct": 2,
"rms_p50_db": -999.0,
"rms_max_db": -37.0,
"peak_db": -17.8
},
"9": {
"active_pct": 71,
"rms_p50_db": -46.9,
"rms_max_db": -42.4,
"peak_db": -24.6
},
"10": {
"active_pct": 7,
"rms_p50_db": -999.0,
"rms_max_db": -29.3,
"peak_db": -14.6
},
"11": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"12": {
"active_pct": 25,
"rms_p50_db": -70.8,
"rms_max_db": -43.4,
"peak_db": -22.1
}
}
},
{
"n": 4,
"track": "take_5_drops",
"start": "18:30:25",
"end": "18:39:08",
"len_s": 523,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
5,
6,
8,
10,
11,
12
],
"evals": [
"18:32:36"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d8",
"d10",
"d11",
"d12"
],
"captured_s": 523,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
9,
12
],
"mapped_but_quiet": [
10,
11
],
"heard_off_map": [
4,
9
],
"peak_db": 7.7,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 72,
"rms_p50_db": -17.0,
"rms_max_db": -7.4,
"peak_db": -0.2
},
"2": {
"active_pct": 57,
"rms_p50_db": -42.2,
"rms_max_db": -17.9,
"peak_db": -0.2
},
"3": {
"active_pct": 67,
"rms_p50_db": -44.2,
"rms_max_db": -28.6,
"peak_db": -8.9
},
"4": {
"active_pct": 99,
"rms_p50_db": -12.2,
"rms_max_db": -2.9,
"peak_db": 1.9
},
"5": {
"active_pct": 53,
"rms_p50_db": -32.2,
"rms_max_db": -11.9,
"peak_db": 1.3
},
"6": {
"active_pct": 36,
"rms_p50_db": -999.0,
"rms_max_db": -29.5,
"peak_db": -21.3
},
"7": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"9": {
"active_pct": 90,
"rms_p50_db": -33.1,
"rms_max_db": -29.9,
"peak_db": -24.6
},
"10": {
"active_pct": 3,
"rms_p50_db": -999.0,
"rms_max_db": -40.0,
"peak_db": -27.2
},
"11": {
"active_pct": 9,
"rms_p50_db": -999.0,
"rms_max_db": -17.4,
"peak_db": -3.8
},
"12": {
"active_pct": 84,
"rms_p50_db": -38.6,
"rms_max_db": -6.3,
"peak_db": 7.7
}
}
},
{
"n": 5,
"track": "bain_electrique",
"start": "18:39:08",
"end": "18:42:41",
"len_s": 213,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
6,
7,
8,
9,
10,
11
],
"evals": [
"18:39:37",
"18:41:10"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"d10",
"d11"
],
"captured_s": 213,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
7,
9,
10,
12
],
"mapped_but_quiet": [
11
],
"heard_off_map": [
5,
12
],
"peak_db": 5.3,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 55,
"rms_p50_db": -20.1,
"rms_max_db": -7.3,
"peak_db": 0.4
},
"2": {
"active_pct": 53,
"rms_p50_db": -40.7,
"rms_max_db": -21.2,
"peak_db": -6.0
},
"3": {
"active_pct": 68,
"rms_p50_db": -32.3,
"rms_max_db": -24.4,
"peak_db": -3.6
},
"4": {
"active_pct": 95,
"rms_p50_db": -14.0,
"rms_max_db": 1.1,
"peak_db": 5.3
},
"5": {
"active_pct": 66,
"rms_p50_db": -21.2,
"rms_max_db": -13.9,
"peak_db": -0.0
},
"6": {
"active_pct": 46,
"rms_p50_db": -999.0,
"rms_max_db": -31.3,
"peak_db": -10.5
},
"7": {
"active_pct": 55,
"rms_p50_db": -47.8,
"rms_max_db": -32.5,
"peak_db": -15.3
},
"9": {
"active_pct": 48,
"rms_p50_db": -65.7,
"rms_max_db": -24.9,
"peak_db": -9.2
},
"10": {
"active_pct": 85,
"rms_p50_db": -35.8,
"rms_max_db": -11.2,
"peak_db": -0.2
},
"11": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -72.9,
"peak_db": -55.1
},
"12": {
"active_pct": 59,
"rms_p50_db": -41.8,
"rms_max_db": -14.8,
"peak_db": -2.1
}
}
},
{
"n": 6,
"track": "sunny_side_up",
"start": "18:42:41",
"end": "18:48:03",
"len_s": 322,
"in_setlist": false,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
7,
8,
10,
11
],
"evals": [
"18:42:42"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d10",
"d11"
],
"captured_s": 322,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
7,
9
],
"mapped_but_quiet": [
10,
11
],
"heard_off_map": [
9
],
"peak_db": 1.4,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 45,
"rms_p50_db": -999.0,
"rms_max_db": -6.8,
"peak_db": -0.4
},
"2": {
"active_pct": 49,
"rms_p50_db": -999.0,
"rms_max_db": -25.5,
"peak_db": -3.1
},
"3": {
"active_pct": 76,
"rms_p50_db": -41.5,
"rms_max_db": -36.6,
"peak_db": -15.0
},
"4": {
"active_pct": 94,
"rms_p50_db": -23.2,
"rms_max_db": -13.5,
"peak_db": -2.4
},
"5": {
"active_pct": 94,
"rms_p50_db": -23.6,
"rms_max_db": -15.0,
"peak_db": 1.0
},
"6": {
"active_pct": 56,
"rms_p50_db": -47.6,
"rms_max_db": -31.4,
"peak_db": -12.4
},
"7": {
"active_pct": 39,
"rms_p50_db": -999.0,
"rms_max_db": -8.9,
"peak_db": 1.4
},
"9": {
"active_pct": 33,
"rms_p50_db": -999.0,
"rms_max_db": -24.4,
"peak_db": -9.2
},
"10": {
"active_pct": 2,
"rms_p50_db": -999.0,
"rms_max_db": -35.8,
"peak_db": -22.1
},
"11": {
"active_pct": 4,
"rms_p50_db": -999.0,
"rms_max_db": -26.1,
"peak_db": -10.2
},
"12": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
}
}
},
{
"n": 7,
"track": "oct_16_haunted_house_insouciance",
"start": "18:48:03",
"end": "18:54:27",
"len_s": 384,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
5,
6,
7,
8,
9,
10,
11
],
"evals": [
"18:48:25",
"18:48:55",
"18:52:38"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"d10",
"d11"
],
"captured_s": 384,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
7,
9
],
"mapped_but_quiet": [
10,
11
],
"heard_off_map": [
4
],
"peak_db": 5.1,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 54,
"rms_p50_db": -30.2,
"rms_max_db": -13.9,
"peak_db": 1.8
},
"2": {
"active_pct": 44,
"rms_p50_db": -144.3,
"rms_max_db": -24.9,
"peak_db": 0.5
},
"3": {
"active_pct": 87,
"rms_p50_db": -40.1,
"rms_max_db": -27.4,
"peak_db": -5.7
},
"4": {
"active_pct": 99,
"rms_p50_db": -9.3,
"rms_max_db": 0.1,
"peak_db": 5.1
},
"5": {
"active_pct": 86,
"rms_p50_db": -35.5,
"rms_max_db": -16.3,
"peak_db": -0.1
},
"6": {
"active_pct": 56,
"rms_p50_db": -44.8,
"rms_max_db": -31.6,
"peak_db": -13.4
},
"7": {
"active_pct": 20,
"rms_p50_db": -999.0,
"rms_max_db": -13.4,
"peak_db": 3.4
},
"9": {
"active_pct": 80,
"rms_p50_db": -54.3,
"rms_max_db": -24.3,
"peak_db": -9.2
},
"10": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"11": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"12": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
}
}
},
{
"n": 8,
"track": "ete_a_mauerpark",
"start": "18:54:27",
"end": "18:59:43",
"len_s": 316,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
8,
9
],
"evals": [
"18:54:50",
"18:56:55"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d8",
"d9"
],
"captured_s": 316,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
7,
9
],
"mapped_but_quiet": [
6
],
"heard_off_map": [
7
],
"peak_db": 4.2,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 60,
"rms_p50_db": -22.4,
"rms_max_db": -10.5,
"peak_db": 0.2
},
"2": {
"active_pct": 33,
"rms_p50_db": -999.0,
"rms_max_db": -20.6,
"peak_db": -1.5
},
"3": {
"active_pct": 71,
"rms_p50_db": -43.0,
"rms_max_db": -31.5,
"peak_db": -10.8
},
"4": {
"active_pct": 100,
"rms_p50_db": -12.5,
"rms_max_db": -2.4,
"peak_db": 4.2
},
"5": {
"active_pct": 76,
"rms_p50_db": -46.6,
"rms_max_db": -30.9,
"peak_db": -20.4
},
"6": {
"active_pct": 4,
"rms_p50_db": -999.0,
"rms_max_db": -35.8,
"peak_db": -3.7
},
"7": {
"active_pct": 30,
"rms_p50_db": -999.0,
"rms_max_db": -11.6,
"peak_db": 1.1
},
"9": {
"active_pct": 45,
"rms_p50_db": -63.9,
"rms_max_db": -23.5,
"peak_db": -3.8
},
"10": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"11": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"12": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
}
}
},
{
"n": 9,
"track": "chere_mireille",
"start": "18:59:43",
"end": "19:05:47",
"len_s": 364,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
11,
12
],
"evals": [
"19:00:09",
"19:03:14",
"19:03:22",
"19:03:34",
"19:03:47"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"d11",
"d12"
],
"captured_s": 364,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
7,
11
],
"mapped_but_quiet": [
6,
9,
12
],
"heard_off_map": [],
"peak_db": 5.3,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 78,
"rms_p50_db": -22.1,
"rms_max_db": -11.4,
"peak_db": 2.4
},
"2": {
"active_pct": 38,
"rms_p50_db": -999.0,
"rms_max_db": -20.6,
"peak_db": 1.6
},
"3": {
"active_pct": 71,
"rms_p50_db": -35.5,
"rms_max_db": -25.2,
"peak_db": -12.7
},
"4": {
"active_pct": 100,
"rms_p50_db": -15.9,
"rms_max_db": -2.3,
"peak_db": 5.3
},
"5": {
"active_pct": 35,
"rms_p50_db": -999.0,
"rms_max_db": -11.9,
"peak_db": 2.8
},
"6": {
"active_pct": 5,
"rms_p50_db": -999.0,
"rms_max_db": -47.4,
"peak_db": -20.8
},
"7": {
"active_pct": 52,
"rms_p50_db": -38.8,
"rms_max_db": -11.2,
"peak_db": 2.6
},
"9": {
"active_pct": 8,
"rms_p50_db": -999.0,
"rms_max_db": -18.6,
"peak_db": -6.4
},
"10": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"11": {
"active_pct": 36,
"rms_p50_db": -155.0,
"rms_max_db": -50.0,
"peak_db": -32.6
},
"12": {
"active_pct": 0,
"rms_p50_db": -170.8,
"rms_max_db": -101.2,
"peak_db": -83.3
}
}
},
{
"n": 10,
"track": "sept1",
"start": "19:05:47",
"end": "19:13:05",
"len_s": 438,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
8,
9,
10,
11,
12
],
"evals": [
"19:05:56"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d8",
"d9",
"d10",
"d11",
"d12"
],
"captured_s": 438,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
9,
11
],
"mapped_but_quiet": [
6,
10,
12
],
"heard_off_map": [],
"peak_db": 6.7,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 55,
"rms_p50_db": -24.6,
"rms_max_db": -10.8,
"peak_db": 3.5
},
"2": {
"active_pct": 52,
"rms_p50_db": -49.9,
"rms_max_db": -31.4,
"peak_db": -11.2
},
"3": {
"active_pct": 69,
"rms_p50_db": -51.2,
"rms_max_db": -36.1,
"peak_db": -9.2
},
"4": {
"active_pct": 83,
"rms_p50_db": -22.9,
"rms_max_db": -12.7,
"peak_db": -1.3
},
"5": {
"active_pct": 58,
"rms_p50_db": -31.1,
"rms_max_db": -9.7,
"peak_db": 6.7
},
"6": {
"active_pct": 1,
"rms_p50_db": -999.0,
"rms_max_db": -36.1,
"peak_db": -14.7
},
"7": {
"active_pct": 6,
"rms_p50_db": -999.0,
"rms_max_db": -12.8,
"peak_db": 0.1
},
"9": {
"active_pct": 21,
"rms_p50_db": -111.7,
"rms_max_db": -19.6,
"peak_db": -6.5
},
"10": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -106.0,
"peak_db": -92.6
},
"11": {
"active_pct": 74,
"rms_p50_db": -23.2,
"rms_max_db": -14.5,
"peak_db": 0.3
},
"12": {
"active_pct": 1,
"rms_p50_db": -114.2,
"rms_max_db": -41.6,
"peak_db": -20.8
}
}
},
{
"n": 11,
"track": "cafe_bouillant",
"start": "19:13:05",
"end": "19:18:55",
"len_s": 350,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
7,
8,
11
],
"evals": [
"19:13:11"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d11"
],
"captured_s": 350,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6
],
"mapped_but_quiet": [
7,
11
],
"heard_off_map": [],
"peak_db": 7.6,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 64,
"rms_p50_db": -23.5,
"rms_max_db": -12.8,
"peak_db": 1.0
},
"2": {
"active_pct": 75,
"rms_p50_db": -35.2,
"rms_max_db": -24.6,
"peak_db": 0.3
},
"3": {
"active_pct": 80,
"rms_p50_db": -46.4,
"rms_max_db": -37.9,
"peak_db": -17.9
},
"4": {
"active_pct": 73,
"rms_p50_db": -19.7,
"rms_max_db": -5.8,
"peak_db": 6.2
},
"5": {
"active_pct": 67,
"rms_p50_db": -31.5,
"rms_max_db": -14.9,
"peak_db": 1.1
},
"6": {
"active_pct": 45,
"rms_p50_db": -999.0,
"rms_max_db": -6.5,
"peak_db": 6.8
},
"7": {
"active_pct": 8,
"rms_p50_db": -999.0,
"rms_max_db": -17.6,
"peak_db": -2.1
},
"9": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"10": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -105.6,
"peak_db": -92.6
},
"11": {
"active_pct": 4,
"rms_p50_db": -999.0,
"rms_max_db": -6.8,
"peak_db": 7.6
},
"12": {
"active_pct": 0,
"rms_p50_db": -114.2,
"rms_max_db": -103.4,
"peak_db": -83.6
}
}
},
{
"n": 12,
"track": "cafe_tiede",
"start": "19:18:55",
"end": "19:24:25",
"len_s": 330,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
8,
10,
11,
12
],
"evals": [
"19:19:04"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d8",
"d10",
"d11",
"d12"
],
"captured_s": 330,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
11
],
"mapped_but_quiet": [
10,
12
],
"heard_off_map": [],
"peak_db": 2.6,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 60,
"rms_p50_db": -27.3,
"rms_max_db": -17.5,
"peak_db": 2.6
},
"2": {
"active_pct": 62,
"rms_p50_db": -36.1,
"rms_max_db": -25.9,
"peak_db": 1.8
},
"3": {
"active_pct": 70,
"rms_p50_db": -44.3,
"rms_max_db": -30.5,
"peak_db": -10.7
},
"4": {
"active_pct": 94,
"rms_p50_db": -17.0,
"rms_max_db": -8.5,
"peak_db": 1.3
},
"5": {
"active_pct": 51,
"rms_p50_db": -42.6,
"rms_max_db": -17.2,
"peak_db": 2.5
},
"6": {
"active_pct": 47,
"rms_p50_db": -999.0,
"rms_max_db": -18.7,
"peak_db": 0.6
},
"7": {
"active_pct": 0,
"rms_p50_db": -99.4,
"rms_max_db": -71.2,
"peak_db": -53.7
},
"9": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"10": {
"active_pct": 0,
"rms_p50_db": -104.0,
"rms_max_db": -102.6,
"peak_db": -91.1
},
"11": {
"active_pct": 22,
"rms_p50_db": -999.0,
"rms_max_db": -14.3,
"peak_db": -3.5
},
"12": {
"active_pct": 6,
"rms_p50_db": -113.5,
"rms_max_db": -31.7,
"peak_db": -19.5
}
}
},
{
"n": 13,
"track": "force_motrice",
"start": "19:24:25",
"end": "19:28:15",
"len_s": 230,
"in_setlist": true,
"orbits_mapped": [
2,
3,
4,
5,
6,
7,
8,
9,
10,
11
],
"evals": [
"19:24:28",
"19:25:39",
"19:26:42",
"19:26:58"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d9",
"d10",
"d11"
],
"captured_s": 230,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
9,
11
],
"mapped_but_quiet": [
6,
7,
10
],
"heard_off_map": [
1
],
"peak_db": 4.7,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 56,
"rms_p50_db": -31.8,
"rms_max_db": -16.4,
"peak_db": -3.4
},
"2": {
"active_pct": 44,
"rms_p50_db": -69.3,
"rms_max_db": -30.2,
"peak_db": -5.9
},
"3": {
"active_pct": 50,
"rms_p50_db": -60.2,
"rms_max_db": -43.8,
"peak_db": -24.1
},
"4": {
"active_pct": 100,
"rms_p50_db": -17.4,
"rms_max_db": -7.2,
"peak_db": 4.7
},
"5": {
"active_pct": 42,
"rms_p50_db": -999.0,
"rms_max_db": -17.9,
"peak_db": -0.5
},
"6": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"7": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -60.2,
"peak_db": -49.9
},
"9": {
"active_pct": 39,
"rms_p50_db": -93.3,
"rms_max_db": -26.6,
"peak_db": -14.5
},
"10": {
"active_pct": 0,
"rms_p50_db": -161.9,
"rms_max_db": -112.8,
"peak_db": -101.0
},
"11": {
"active_pct": 24,
"rms_p50_db": -999.0,
"rms_max_db": -16.5,
"peak_db": -3.9
},
"12": {
"active_pct": 0,
"rms_p50_db": -113.5,
"rms_max_db": -111.8,
"peak_db": -98.9
}
}
},
{
"n": 14,
"track": "cafe_glace",
"start": "19:28:15",
"end": "19:32:32",
"len_s": 257,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
7,
8
],
"evals": [
"19:28:33"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8"
],
"captured_s": 257,
"captured_pct": 100,
"orbits_heard": [
1,
2,
3,
4,
5,
6
],
"mapped_but_quiet": [
7
],
"heard_off_map": [],
"peak_db": 3.5,
"loudest_orbit": 4,
"levels": {
"1": {
"active_pct": 60,
"rms_p50_db": -38.0,
"rms_max_db": -19.4,
"peak_db": -5.2
},
"2": {
"active_pct": 42,
"rms_p50_db": -93.6,
"rms_max_db": -17.1,
"peak_db": 3.5
},
"3": {
"active_pct": 82,
"rms_p50_db": -41.8,
"rms_max_db": -30.1,
"peak_db": -8.4
},
"4": {
"active_pct": 68,
"rms_p50_db": -17.4,
"rms_max_db": -13.1,
"peak_db": 3.2
},
"5": {
"active_pct": 96,
"rms_p50_db": -25.5,
"rms_max_db": -14.9,
"peak_db": -0.8
},
"6": {
"active_pct": 12,
"rms_p50_db": -999.0,
"rms_max_db": -15.0,
"peak_db": -5.6
},
"7": {
"active_pct": 7,
"rms_p50_db": -999.0,
"rms_max_db": -24.3,
"peak_db": -1.1
},
"9": {
"active_pct": 4,
"rms_p50_db": -999.0,
"rms_max_db": -27.8,
"peak_db": -14.5
},
"10": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -134.0,
"peak_db": -116.9
},
"11": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"12": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -111.8,
"peak_db": -99.5
}
}
},
{
"n": 15,
"track": "rose_rouge",
"start": "19:32:32",
"end": "19:44:06",
"len_s": 694,
"in_setlist": true,
"orbits_mapped": [
1,
2,
3,
4,
5,
6,
7,
8,
10,
11,
12
],
"evals": [
"19:32:33"
],
"streams_evaled": [
"d1",
"d2",
"d3",
"d4",
"d5",
"d6",
"d7",
"d8",
"d10",
"d11",
"d12"
],
"captured_s": 688,
"captured_pct": 99,
"orbits_heard": [
1,
2,
3,
4,
5,
6,
7,
11,
12
],
"mapped_but_quiet": [
10
],
"heard_off_map": [],
"peak_db": 5.8,
"loudest_orbit": 5,
"levels": {
"1": {
"active_pct": 49,
"rms_p50_db": -64.7,
"rms_max_db": -17.6,
"peak_db": 4.7
},
"2": {
"active_pct": 51,
"rms_p50_db": -47.2,
"rms_max_db": -22.5,
"peak_db": -0.7
},
"3": {
"active_pct": 54,
"rms_p50_db": -55.0,
"rms_max_db": -36.3,
"peak_db": -15.2
},
"4": {
"active_pct": 78,
"rms_p50_db": -18.9,
"rms_max_db": -8.3,
"peak_db": 2.3
},
"5": {
"active_pct": 69,
"rms_p50_db": -18.1,
"rms_max_db": -7.1,
"peak_db": 5.4
},
"6": {
"active_pct": 36,
"rms_p50_db": -999.0,
"rms_max_db": -15.6,
"peak_db": -0.3
},
"7": {
"active_pct": 22,
"rms_p50_db": -999.0,
"rms_max_db": -11.2,
"peak_db": -0.2
},
"9": {
"active_pct": 0,
"rms_p50_db": -999.0,
"rms_max_db": -999.0,
"peak_db": -999.0
},
"10": {
"active_pct": 2,
"rms_p50_db": -83.9,
"rms_max_db": -7.7,
"peak_db": 5.8
},
"11": {
"active_pct": 46,
"rms_p50_db": -999.0,
"rms_max_db": -10.3,
"peak_db": 3.0
},
"12": {
"active_pct": 31,
"rms_p50_db": -999.0,
"rms_max_db": -13.1,
"peak_db": -0.6
}
}
}
]
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment