RESI VOX: two leads - the song's Audio note in PCO says whose mic goes out
User 2026-10-25: 'check the notes if there's 2 people on a song'. 'V3' or a lead's name in the Audio note picks; without one it stays flagged and nothing switches. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
+19
-12
@@ -2226,26 +2226,33 @@ def eval_resi_vox(rc, plan, lineup, now_vox, now_got):
|
||||
if v is None:
|
||||
line.fault(WARN, "%s NOT ON LINEUP" % short(n, 10), "%s leads %s, but %s" % (n, where, (
|
||||
"more than one person fits: " + who) if who else "nobody of that name has a VOX on the lineup or in PCO"))
|
||||
want = None
|
||||
if len(voxes) == 1 and all(v for _, v, _, _ in found):
|
||||
want, lead = None, found[0]
|
||||
audio = (song.get("notes") or {}).get(rv.get("note", "Audio"), "") or ""
|
||||
said = re.search(r"\bV(?:OX)?\s*(\d)\b", audio, re.I)
|
||||
if len(found) > 1:
|
||||
# Two leads: the song's Audio note in PCO says whose mic goes out ("V3", or a name: "DJ"). User, 2026-10-25.
|
||||
picked = [f for f in found if f[1] and ((said and f[1] == int(said.group(1))) or re.search(r"\b%s\b" % re.escape(f[0]), audio, re.I))]
|
||||
if len(picked) == 1:
|
||||
want, lead = picked[0][1], picked[0]
|
||||
line.notes.append("%s: %d leads; PCO's Audio note (%s) picks %s" % (where, len(found), audio, lead[2] or lead[0]))
|
||||
elif all(v for _, v, _, _ in found):
|
||||
line.fault(WARN, "%d LEADS: %s" % (len(found), " ".join(short(n, 6) for n, _, _, _ in found)),
|
||||
"%s has %s leading (VOX %s): say whose mic goes out in the song's Audio note in PCO (\"V3\" or a name)%s" % (
|
||||
where, " and ".join(n for n, _, _, _ in found), ", ".join(str(v) for _, v, _, _ in found),
|
||||
("; it says \"%s\", which is none of them" % audio) if audio else ""))
|
||||
elif voxes:
|
||||
want = voxes.pop()
|
||||
elif len(voxes) > 1:
|
||||
line.fault(WARN, "%d LEADS: %s" % (len(found), " ".join(short(n, 6) for n, _, _, _ in found)),
|
||||
"%s has %s leading (VOX %s): pick the one Resi gets by hand" % (
|
||||
where, " and ".join(n for n, _, _, _ in found), ", ".join(str(v) for _, v, _, _ in found)))
|
||||
audio = (song.get("notes") or {}).get(rv.get("note", "Audio"), "")
|
||||
said = re.search(r"\bV(?:OX)?\s*(\d)\b", audio or "", re.I)
|
||||
if want and said and int(said.group(1)) != want: # the lineup is right (user, 2026-10-25: "V2 was a mistake")
|
||||
line.notes.append("%s: PCO's Audio note says %s; the lineup (VOX %d) is what counts" % (where, audio, want))
|
||||
if said and int(said.group(1)) != want: # the lineup is right (user, 2026-10-25: "V2 was a mistake")
|
||||
line.notes.append("%s: PCO's Audio note says %s; the lineup (VOX %d) is what counts" % (where, audio, want))
|
||||
if want and buttons and want not in buttons:
|
||||
line.fault(ERR, "LEAD ON VOX %d: NO BUTTON" % want, "%s is on VOX %d; page 13 only has VOX %s AJA" % (
|
||||
found[0][2], want, ", ".join(str(b) for b in sorted(buttons))))
|
||||
lead[2], want, ", ".join(str(b) for b in sorted(buttons))))
|
||||
want = None
|
||||
have = "VOX %d" % now_vox if now_vox else "%s @ %s" % (now_got.get("tx_channel") or "nothing", now_got.get("tx_device") or "-")
|
||||
if want and now_vox != want:
|
||||
line.fault(ERR, "RESI %s NOT VOX %d" % (("V%d" % now_vox) if now_vox else "MIC WRONG", want),
|
||||
"%s: %s leads (VOX %d on the %s); the Resi AJA's lead channel gets %s" % (
|
||||
where, found[0][2], want, found[0][3], have))
|
||||
where, lead[2], want, lead[3], have))
|
||||
who = next(((w or n).split()[0] for n, v, w, _ in found if v and v == now_vox), "")
|
||||
line.info = ("VOX %d %s" % (now_vox, short(who, 10))).strip() if now_vox else have[:16]
|
||||
line.notes.append("%s: lead %s; AJA %s receives %s" % (where, ", ".join("%s = VOX %s (%s)" % (w or n, v, s) for n, v, w, s in found),
|
||||
|
||||
Reference in New Issue
Block a user