Files

1355 lines
67 KiB
HTML
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Audio Analyzer RTW Look (dBFS)</title>
<link rel="stylesheet" href="./styles.css">
</head>
<body>
<canvas id="spectroCanvas" class="spectrogram-layer"></canvas>
<canvas id="waveformCanvas" class="waveform-layer"></canvas>
<canvas id="cv"></canvas>
<div class="hud">
<label for="styleSel">Sicht</label>
<select id="styleSel" style="width:220px">
<option value="realtime">Real Time Analyzer</option>
<option value="peak-history">Peak History</option>
<option value="spectrogram">Spectrogram</option>
<option value="waveform">Waveform</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="_divider1" disabled>------------------</option>
<option value="recorder">Recorder</option>
<option value="clock">Studio Clock</option>
<option value="split-view">Split-View</option>
<option value="quad-view">Quad-View</option>
<option value="_divider2" disabled>------------------</option>
<option value="options-panel">Optionen</option>
</select>
<!-- Slot-Dropdowns Real Time:1, Goniometer:3, Panel:5 -->
<div id="slotWrap" style="display:flex;gap:8px;align-items:center;flex-wrap:wrap">
<label id="slotLabel" style="margin-left:16px">Slots</label>
<select class="opt-w-120" id="slotSel1"></select>
<select class="opt-w-120" id="slotSel2" style="display:none"></select>
<select class="opt-w-120" id="slotSel3" style="display:none"></select>
<select class="opt-w-120" id="slotSel4" style="display:none"></select>
<select class="opt-w-120" id="slotSel5" style="display:none"></select>
<div id="peakHistScrollWrap" style="display:none;align-items:center;gap:6px;margin-left:10px">
<label for="peakHistScrollSel">Geschwindigkeit</label>
<select class="opt-w-140" id="peakHistScrollSel">
<option value="0.5">Langsam (½x)</option>
<option value="1" selected>Normal (1x)</option>
<option value="2">Schnell (2x)</option>
<option value="4">Turbo (4x)</option>
<option value="6">Max (6x)</option>
</select>
</div>
<label id="goniAgcToggle" class="row" style="display:none;align-items:center;gap:6px;margin-left:12px">
<input type="checkbox" id="goniAgcChk">
AGC
</label>
<label id="phaseTrailToggle" class="row" style="display:none;align-items:center;gap:6px;margin-left:12px">
<input type="checkbox" id="phaseTrailChk">
Trail
</label>
<div id="spectroLegendWrap" style="display:none;align-items:center;gap:6px;padding-left:8px">
<label>Skala</label>
<canvas id="spectroLegend" width="300" height="34" style="width:300px;height:34px;background:transparent"></canvas>
</div>
<div id="waveWindowWrap" style="display:none;align-items:center;gap:6px">
<label for="waveWindowSel">Fenster</label>
<select class="opt-w-120" id="waveWindowSel"></select>
</div>
<div id="waveModeWrap" style="display:none;align-items:center;gap:6px">
<label for="waveModeSel">Ansicht</label>
<select class="opt-w-140" id="waveModeSel"></select>
</div>
<div id="rtaBpoWrap" style="display:none;align-items:center;gap:6px">
<label for="rtaBpoSel">Oktaven</label>
<select class="opt-w-140" id="rtaBpoSel"></select>
</div>
<div id="gainWrap" style="display:none;align-items:center;gap:6px">
<label for="gainSel">Gain</label>
<select class="opt-w-110" id="gainSel"></select>
<button id="resetPeakBtn" class="btn" style="display:none;padding:6px 10px;">Reset Peak</button>
</div>
</div>
<div id="splitViewWrap" style="display:none;gap:8px;align-items:center;flex-wrap:wrap">
<label style="margin-left:16px">Split:</label>
<select class="opt-w-150" id="splitLeftSel"></select>
<span style="opacity:0.75">|</span>
<select class="opt-w-150" id="splitRightSel"></select>
<span id="splitMeterBtnWrap" style="display:none;align-items:center;gap:6px">
<label for="splitMeterBtn">Slot:</label>
<button id="splitMeterBtn" class="btn" type="button" style="padding:6px 10px;min-width:110px;white-space:nowrap;text-align:center">Zuordnen</button>
</span>
</div>
<div id="quadViewWrap" style="display:none;gap:8px;align-items:center;flex-wrap:wrap">
<label style="margin-left:16px">Quad:</label>
<button id="quadPlotBtn" class="btn" type="button" style="padding:6px 10px;min-width:100px;white-space:nowrap;text-align:center">Plots…</button>
<span id="quadMeterBtnWrap" style="display:none;align-items:center;gap:6px">
<label for="quadMeterBtn">Slot:</label>
<button id="quadMeterBtn" class="btn" type="button" style="padding:6px 10px;min-width:110px;white-space:nowrap;text-align:center">Zuordnen</button>
</span>
</div>
</div>
<div id="splitMeterPopup" class="split-popup" style="display:none">
<div class="split-popup__box">
<div class="split-popup__head">
<strong id="splitMeterPopupTitle">Slots</strong>
<button id="splitMeterPopupClose" class="btn" type="button" style="padding:6px 10px">Schließen</button>
</div>
<div id="splitMeterRow1" class="split-popup__row">
<label for="splitMeterSel1" style="min-width:70px">Slot 1</label>
<select class="opt-w-220" id="splitMeterSel1"></select>
</div>
<div id="splitMeterRow2" class="split-popup__row">
<label for="splitMeterSel2" style="min-width:70px">Slot 2</label>
<select class="opt-w-220" id="splitMeterSel2"></select>
</div>
<div id="splitMeterRow3" class="split-popup__row">
<label for="splitMeterSel3" style="min-width:70px">Slot 3</label>
<select class="opt-w-220" id="splitMeterSel3"></select>
</div>
</div>
</div>
<div id="quadPlotPopup" class="split-popup" style="display:none">
<div class="split-popup__box">
<div class="split-popup__head">
<strong>Quad-View Plots</strong>
<button id="quadPlotPopupClose" class="btn" type="button" style="padding:6px 10px">Schließen</button>
</div>
<div class="split-popup__row">
<label for="quadPlotSelTL" style="min-width:70px">Oben Links</label>
<select class="opt-w-220" id="quadPlotSelTL"></select>
</div>
<div class="split-popup__row">
<label for="quadPlotSelTR" style="min-width:70px">Oben Rechts</label>
<select class="opt-w-220" id="quadPlotSelTR"></select>
</div>
<div class="split-popup__row">
<label for="quadPlotSelBL" style="min-width:70px">Unten Links</label>
<select class="opt-w-220" id="quadPlotSelBL"></select>
</div>
<div class="split-popup__row">
<label for="quadPlotSelBR" style="min-width:70px">Unten Rechts</label>
<select class="opt-w-220" id="quadPlotSelBR"></select>
</div>
</div>
</div>
<div id="optionsPanelNew" class="options" style="display:none">
<h2 style="text-decoration:underline;">Optionen</h2>
<details open>
<summary>Global</summary>
<div class="opt-group">
<div class="opt"><label>Input Offset (dB)</label>
<div class="offset-block">
<div class="offset-row">
<span class="ch">L</span>
<input id="opt_inputOffsetDbL" type="range" min="-10" max="10" step="0.1">
<span class="offset-val" id="val_inputOffsetDbL"></span>
</div>
<div class="offset-row">
<span class="ch">R</span>
<input id="opt_inputOffsetDbR" type="range" min="-10" max="10" step="0.1">
<span class="offset-val" id="val_inputOffsetDbR"></span>
</div>
</div>
<div class="offset-notes">
<small>Hardware-Korrektur pro Kanal (Stereo)</small>
<small>Hinweis: Beim Behringer UCA202 entspricht ein Input von 1 dB dem Referenzpegel 0 dB.</small>
</div>
</div>
<div class="opt">
<label>Slots</label>
<button id="opt_resetSlots" class="btn" type="button">Alle Slots auf Standard</button>
<small>Setzt alle Slot-Belegungen (alle Views) auf die Default-Werte zurück.</small>
</div>
<div class="opt"><label>FFT Size</label>
<select class="opt-w-140" id="opt_fft">
<option>2048</option><option>4096</option><option>8192</option><option>16384</option>
</select>
<small>Basis-FFT für alle Analyser</small>
</div>
<div class="opt">
<label>
<input id="opt_alMarkers" type="checkbox" checked>
Alignment-Marker anzeigen
</label>
<small>Globale 0-dB Linien</small>
</div>
<div class="opt"><label>Meter Bar Breite (Faktor)</label>
<input id="opt_barThin" type="range" min="0.35" max="0.9" step="0.01"><span id="val_barThin"></span>
<small>Balkenbreite für Meter</small>
</div>
<div class="opt">
<label for="opt_headerTextColor">Header Textfarbe</label>
<input class="opt-w-120" id="opt_headerTextColor" type="color">
<small>Globale Farbe für Header-Text und Header-Zahlen der Meter.</small>
</div>
<div class="opt"><label>Felder-Trennlinien anzeigen</label>
<label class="row"><input id="opt_panelDividers" type="checkbox"></label>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_monoInput" type="checkbox">
Mono-Eingang
</label>
<small>Mischt L+R direkt am Audioeingang zu einem Monosignal</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_lrFracDelayEnabled" type="checkbox">
Fraktionale L/R-Laufzeitkorrektur (Allpass)
</label>
<small>Verzögert den linken Kanal per Allpass um den gewählten Bruchteil eines Samples</small>
</div>
<div class="opt">
<label for="opt_lrFracDelaySamples">Fraktionaler Delay (Samples)</label>
<input class="opt-w-120" id="opt_lrFracDelaySamples" type="text" inputmode="decimal" spellcheck="false">
<span id="val_lrFracDelaySamples"></span>
<small>Gemessene Korrektur in Samples; negative Werte verzögern den rechten, positive den linken Kanal.</small>
</div>
<div class="opt">
<label for="opt_phoenixBaseUrl">Phoenix URL</label>
<input class="opt-w-220" id="opt_phoenixBaseUrl" type="text" spellcheck="false" placeholder="http://127.0.0.1:8789">
<small>Basis-URL des Phoenix-Dienstes. Nach Änderung wird Audio neu verbunden.</small>
</div>
</div>
</details>
<details>
<summary>Bildschirmschoner</summary>
<div class="opt-group">
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_screensaverEnabled" type="checkbox">
Bildschirmschoner aktiv
</label>
</div>
<div class="opt">
<label>Screensaver Stil</label>
<select id="opt_screensaverMode" style="width:160px">
<option value="dvd">DVD Logo</option>
<option value="starfield">Sternenfeld</option>
<option value="clock">Clock</option>
<option value="black">Schwarz</option>
</select>
</div>
<div class="opt">
<label class="row" style="gap:8px;align-items:center">
<input id="opt_screensaverGlow" type="checkbox" checked>
LED-Glow
</label>
<small>Gilt fuer Clock- und DVD-Screensaver.</small>
</div>
<div class="opt">
<label for="opt_screensaverColor">LED Farbe</label>
<input class="opt-w-120" id="opt_screensaverColor" type="color">
<small>Farbe fuer Clock- und DVD-Screensaver.</small>
</div>
<div class="opt">
<label for="opt_screensaverIdleMin">Wartezeit (min)</label>
<input class="opt-w-120" id="opt_screensaverIdleMin" type="number" min="0" max="120" step="0.5">
<span id="val_screensaverIdleMin"></span>
<small>Legt fest, wie lange der Pegel unter der Schwelle sein muss (0 = sofort bei Schalter-Aus)</small>
</div>
<div class="opt">
<label for="opt_screensaverActivityDb">Aktivitätsschwelle (dBFS)</label>
<input class="opt-w-120" id="opt_screensaverActivityDb" type="number" min="-120" max="0" step="1">
<span id="val_screensaverActivityDb"></span>
<small>Pegel über dieser Schwelle halten den Schoner wach</small>
</div>
<div class="opt">
<button id="opt_screensaverTest" class="btn btn-compact" type="button">Vorschau</button>
</div>
</div>
</details>
<details>
<summary>Real Time Analyzer</summary>
<div class="opt-group">
<div class="opt">
<label>Darstellung</label>
<select class="opt-w-150" id="opt_rtRenderMode">
<option value="bars" selected>Balken</option>
<option value="line">Linie</option>
</select>
<small>Anzeigeform (Balken vs. Linie)</small>
</div>
<div class="opt"><label>Real Time Hold (ms)</label>
<input class="opt-w-110" id="opt_rtHold" type="number" min="100" max="5000" step="50">
<small>Peak hold Zeit</small>
</div>
<div class="opt"><label>Real Time Decay (dB/s)</label>
<input class="opt-w-110" id="opt_rtDecay" type="number" min="1" max="60" step="1">
<small>Decay pro Sekunde</small>
</div>
<div class="opt">
<label>Engine</label>
<select class="opt-w-150" id="opt_rtaEngine">
<option value="fft">FFT</option>
<option value="iir" selected>IIR (Filterbank)</option>
</select>
<small>FFT (fix) oder IIR-Filterbank</small>
</div>
<div class="opt">
<label>IIR-Filtercharakteristik</label>
<select id="opt_rtaFilterbank" style="width:230px">
<option value="legacy" selected>Legacy (Phoenix/RTW-Vergleich)</option>
<option value="butterworth">Butterworth 6. Ordnung</option>
</select>
<small>Beide Varianten sind IIR. Legacy bildet die bisherige Anzeige nach; Butterworth ist die neue mathematische Konstruktion.</small>
</div>
<div class="opt">
<label>Bänder pro Oktave</label>
<select class="opt-w-150" id="opt_rtaBpo">
<option value="1_3">1/3 Oktave</option>
<option value="1_6">1/6 Oktave</option>
<option value="1_12">1/12 Oktave</option>
</select>
<small>Im RTW-Profil stehen 1/3, 1/6 und 1/12 Oktave mit der IIR-Filterbank zur Verfügung.</small>
</div>
<div class="opt"><label>IIR Ordnung</label>
<input class="opt-w-110" id="opt_rtaOrder" type="number" min="2" max="8" step="2">
<small>Filtergüte Ordnung des IIR-Filters</small>
</div>
<div class="opt"><label>IIR Fast τ (s)</label>
<input class="opt-w-110" id="opt_rtaTauFast" type="number" value="0.125" disabled>
<small>Feste Standardreaktion: 125 ms</small>
</div>
<div class="opt"><label>IIR Slow τ (s)</label>
<input class="opt-w-110" id="opt_rtaTauSlow" type="number" value="1.0" disabled>
<small>Feste Standardreaktion: 1 Sekunde</small>
</div>
<div class="opt"><label>Frequenzbereich</label>
<select class="opt-w-150" id="opt_rtaFreq">
<option value="norm" selected>20 Hz 20 kHz</option>
<option value="lf">5 Hz 5 kHz</option>
</select>
<small>Messband</small>
</div>
<div class="opt"><label>Layout</label>
<select class="opt-w-150" id="opt_rtaLayout">
<option value="iec" selected>IEC (Bandbreite)</option>
<option value="rtw">RTW-Style (fix)</option>
</select>
<small>Balkenanordnung</small>
</div>
<div class="opt">
<label for="opt_rtaBarBaseColor">Balken Grundfarbe</label>
<input class="opt-w-120" id="opt_rtaBarBaseColor" type="color">
<small>Grundfarbe der Balken; Peak-Bereiche bleiben rot</small>
</div>
<div class="opt"><label>Bewertung</label>
<select class="opt-w-150" id="opt_rtaWeighting">
<option value="z" selected>Linear (Z)</option>
<option value="a">A-bewertet</option>
<option value="c">C-bewertet</option>
</select>
<small>Pegelgewichtung</small>
</div>
<div class="opt"><label>RTA-Detektor</label>
<select class="opt-w-180" id="opt_rtaDetector">
<option value="average" selected>Average (RMS)</option>
<option value="peak">Peak (10 ms)</option>
</select>
<small>RTW-Detektortyp: RMS mit gewählter Response oder feste 10-ms-Peakintegration</small>
</div>
<div class="opt"><label>Response</label>
<select class="opt-w-150" id="opt_rtaIntegration">
<option value="impulse">Impulse</option>
<option value="fast" selected>Fast</option>
<option value="medium">Medium</option>
<option value="slow">Slow</option>
</select>
<small>Average-Ballistik: Impulse 35 ms/1,5 s, Fast 125 ms, Medium 500 ms oder Slow 1 s</small>
</div>
<div class="opt"><label>RTA-Anzeige</label>
<select id="opt_rtaBallistics" style="width:200px">
<option value="average" selected>Detektorwert</option>
<option value="peak">Peak Hold</option>
<option value="both">Detektorwert + Peak Hold</option>
</select>
<small>Auswahl der angezeigten Mess- und Hold-Kurven</small>
</div>
<div class="opt"><label>Hold Mode</label>
<select class="opt-w-150" id="opt_rtaHoldMode">
<option value="off">Aus</option>
<option value="auto">Hold</option>
<option value="fall" selected>Hold + Fall</option>
<option value="manual">Manuell</option>
</select>
<small>Hold gibt nach Ablauf direkt frei; Hold + Fall läuft danach weich zurück; Manuell hält bis zum Reset.</small>
</div>
<div class="opt"><label>Hold Time (s)</label>
<input class="opt-w-110" id="opt_rtaHoldTime" type="number" min="0" max="30" step="0.5">
<small>Dauer der Hold-Anzeige</small>
</div>
<div class="opt"><label>Hold Fall (dB/s)</label>
<input class="opt-w-110" id="opt_rtaDecay" type="number" min="1" max="60" step="1">
<small>Rücklaufgeschwindigkeit im Modus Hold + Fall</small>
</div>
<div class="opt"><label>Display Hold (s)</label>
<input class="opt-w-110" id="opt_rtaDisplayHold" type="number" min="0" max="5" step="0.1">
<small>Zusatzhalt für Anzeige</small>
</div>
<div class="opt"><label>Display Gain FFT (dB) -25…+25</label>
<input id="opt_rtaDisplayGainFft" type="range" min="-25" max="25" step="1"><span id="val_rtaDisplayGainFft"></span>
<small>0 dB entspricht +12 dB Offset</small>
</div>
<div class="opt"><label>Display Gain IIR (dB) -25…+25</label>
<input id="opt_rtaDisplayGainIir" type="range" min="-25" max="25" step="1"><span id="val_rtaDisplayGainIir"></span>
<small>0 dB entspricht 6 dB Offset</small>
</div>
</div>
</details>
<details>
<summary>Spectrogram</summary>
<div class="opt-group">
<div class="opt">
<label>Spectrogram Gamma</label>
<input id="opt_spectroGamma" type="range" min="0.3" max="1.2" step="0.05">
<span id="val_spectroGamma"></span>
<small>Kontrast/Farbspreizung (höher = mehr Fokus auf hohe Pegel)</small>
</div>
<div class="opt">
<label>Scroll-Geschwindigkeit</label>
<select class="opt-w-180" id="opt_spectroScroll">
<option value="0.5">Langsam (½x)</option>
<option value="1" selected>Normal (1x)</option>
<option value="2">Schnell (2x)</option>
<option value="4">Turbo (4x)</option>
<option value="6">Max (6x)</option>
</select>
<small>Bestimmt, wie schnell die Zeitachse nach links scrollt</small>
</div>
</div>
</details>
<details>
<summary>Peak History</summary>
<div class="opt-group">
<div class="opt">
<label>Scroll-Geschwindigkeit</label>
<select class="opt-w-180" id="opt_peakHistScroll">
<option value="0.5">Langsam (½x)</option>
<option value="1" selected>Normal (1x)</option>
<option value="2">Schnell (2x)</option>
<option value="4">Turbo (4x)</option>
<option value="6">Max (6x)</option>
</select>
<small>Bestimmt, wie schnell die Verlaufslinie nach links läuft</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_peakHistFill" type="checkbox">
Fläche unter Verlauf einfärben
</label>
<small>Füllt den Bereich unter der Verlaufslinie in deren Farbe</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_peakHistFillInvert" type="checkbox">
Fläche über der Linie füllen (invertieren)
</label>
<small>Tauscht die Füllrichtung: füllt oberhalb der Linie statt darunter</small>
</div>
</div>
</details>
<details>
<summary>Waveform</summary>
<div class="opt-group">
<div class="opt">
<label>Ansicht</label>
<select class="opt-w-150" id="opt_waveMode">
<option value="stacked" selected>Gestapelt</option>
<option value="overlay">Überlagert</option>
<option value="diff">Differenz (LR)</option>
</select>
<small>Darstellung der Kanäle: getrennt, überlagert oder Differenz</small>
</div>
<div class="opt">
<label>Fenster (s)</label>
<select class="opt-w-150" id="opt_waveWindow">
<option value="0.05">0.05</option>
<option value="0.1">0.1</option>
<option value="0.5">0.5</option>
<option value="1" selected>1.0</option>
<option value="2">2.0</option>
<option value="5">5.0</option>
<option value="10">10.0</option>
<option value="15">15.0</option>
</select>
<small>Längeres Fenster zeigt mehr Verlauf, kostet aber mehr CPU</small>
</div>
<div class="opt"><label>Farben</label>
<span>L</span><input id="opt_waveColorL" type="color">
<span>R</span><input id="opt_waveColorR" type="color">
<span>Δ</span><input id="opt_waveColorDiff" type="color">
<small>Farben für Links, Rechts und Differenz</small>
</div>
</div>
</details>
<details>
<summary>XY-Display</summary>
<div class="opt-group">
<div class="opt"><label>XY Punkte</label>
<select id="opt_xyPoints">
<option>128</option><option>256</option><option>512</option><option selected>1024</option><option>2048</option>
</select>
<small>Mehr Punkte = feinere Darstellung (kann etwas mehr CPU brauchen)</small>
</div>
<div class="opt"><label>XY Stil</label>
<select id="opt_xyStyle">
<option value="points">Punkte</option>
<option value="lines">Linien</option>
</select>
<small>Punkte sind schneller, Linien wirken „analog“</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_xySilenceGate" type="checkbox" checked>
Silence-Gate aktivieren (RMS-basiert)
</label>
<small>Blendet die Goniometer-Spur bei Stille aus; der Threshold setzt außerdem die Korrelation auf Neutralstellung.</small>
</div>
<div class="opt">
<label>Silence-Threshold [dBFS RMS]</label>
<input class="opt-w-120" id="opt_xySilenceThr" type="number" min="-90" max="-40" step="1">
<small>Default: -75 dBFS RMS (Mono)</small>
</div>
<div class="opt"><label>Korrelation Ansprechzeit</label>
<select id="opt_corrResponse">
<option value="0.5">0,5 s</option>
<option value="1">1,0 s</option>
<option value="2.5">2,5 s</option>
</select>
<small>Kontinuierliche DSP-Integration; unabhängig von Bildrate und ALSA-Periode.</small>
</div>
<div class="opt"><label>Korrelations-Negativmarker</label>
<select id="opt_corrNegativeMarkerMode">
<option value="memory">Memory</option>
<option value="hold">Hold (4 Sekunden)</option>
<option value="off">Off</option>
</select>
<small>Memory bleibt bis zum Zurücksetzen stehen; Hold speichert die negativste Anzeige vier Sekunden.</small>
</div>
<div class="opt">
<button id="opt_corrResetPeak" type="button">Negativspitze zurücksetzen</button>
<small>Setzt den gespeicherten Negativmarker zurück. Im Modus Off bleibt der Marker ausgeblendet.</small>
</div>
<div class="opt"><label>Goniometer Display Gain (dB)</label>
<input id="opt_goniGain" type="range" min="-35" max="35" step="5"><span id="val_goniGain"></span>
<small>Skalierung des XY-Bildes</small>
</div>
<div class="opt"><label class="row"><input id="opt_goniAgc" type="checkbox"> Automatic Gain Control (AGC)</label>
<small>Attack 1&nbsp;ms, Release 10&nbsp;dB/s</small>
</div>
<div class="opt"><label>Gap Meter (Goniometer)</label>
<input id="opt_goniGap" type="range" min="2" max="24" step="1"><span id="val_goniGap"></span>
<small>Abstand zwischen den XY-Meter-Slots</small>
</div>
<div class="opt"><label>Goniometer-Persistenz</label>
<select id="opt_goniPersistence">
<option value="fast">Fast (50 ms)</option>
<option value="medium">Medium (150 ms)</option>
<option value="slow">Slow (300 ms)</option>
<option value="custom">Phoenix frei</option>
</select>
<small>Fast/Medium/Slow sind reproduzierbare Profile; die endgültige RTW-Abstimmung erfolgt am Referenzgerät.</small>
</div>
<div class="opt"><label>Freies Fade-Out</label>
<input id="opt_goniFade" type="range" min="0" max="600" step="10"><span id="val_goniFade"></span>
<small>Wird beim Verschieben automatisch als Phoenix-Profil aktiviert.</small>
</div>
</div>
</details>
<details>
<summary>Phase Wheel</summary>
<div class="opt-group">
<div class="opt"><label>Phase Display Gain (dB)</label>
<input id="opt_phaseGain" type="range" min="-35" max="35" step="5"><span id="val_phaseGain"></span>
<small>Skalierung des Phase-Wheel-Vektors</small>
</div>
<div class="opt"><label class="row"><input id="opt_phaseAgc" type="checkbox"> Automatic Gain Control (AGC)</label>
<small>Passt Zeiger-Länge automatisch an</small>
</div>
<div class="opt">
<label>Amplitude</label>
<select class="opt-w-220" id="opt_phaseAmpMode">
<option value="bandpass">Bandpass (wie Phase)</option>
<option value="ppm-din">PPM DIN (Fullband)</option>
</select>
<small>Phase bleibt Bandpass; nur die Zeiger-Länge wird umgestellt.</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_phaseTrail" type="checkbox">
Trail anzeigen
</label>
<small>Trail zeigt Bewegung/Verlauf des Vektors</small>
</div>
</div>
</details>
<details>
<summary>Split-View</summary>
<div class="opt-group">
<div class="opt">
<label>Plot Klick</label>
<select class="opt-w-220" id="opt_splitTapAction">
<option value="switch">Direkt in View wechseln</option>
<option value="popup">View als Popup (Tap schließt)</option>
</select>
</div>
<div class="opt">
<label>Plot Links</label>
<select class="opt-w-220" id="opt_splitLeftPlot">
<option value="none">(leer)</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="realtime">Real Time Analyzer</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="peak-history">Peak History</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="clock">Studio Clock</option>
<option value="waveform">Waveform</option>
<option value="spectrogram">Spectrogram</option>
</select>
<small>Linke Seite: nur Plot (ohne Slots des Views)</small>
</div>
<div class="opt">
<label>Plot Rechts</label>
<select class="opt-w-220" id="opt_splitRightPlot">
<option value="none">(leer)</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="realtime">Real Time Analyzer</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="peak-history">Peak History</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="clock">Studio Clock</option>
<option value="waveform">Waveform</option>
<option value="spectrogram">Spectrogram</option>
</select>
<small>Rechte Seite: nur Plot (ohne Slots des Views)</small>
</div>
<div class="opt">
<label>Meter Slots</label>
<select class="opt-w-120" id="opt_splitMeterCount">
<option value="0">Aus</option>
<option value="1">1 Slot</option>
<option value="2">2 Slots</option>
<option value="3">3 Slots</option>
</select>
<small>Bis zu drei unabhängige Slots, Position frei wählbar (links / mitte / rechts).</small>
</div>
<div class="opt">
<label>Slot 1</label>
<select class="opt-w-220" id="opt_splitMeter1">
<option value="vu">VU</option>
<option value="ppm-ebu">PPM (EBU Type IIb)</option>
<option value="ppm-din">PPM (DIN Type I)</option>
<option value="tp">True Peak</option>
<option value="rms">True RMS</option>
<option value="lufs">LUFS (EBU R128)</option>
<option value="stopwatch">Stoppuhr</option>
<option value="none">(leer)</option>
</select>
</div>
<div class="opt">
<label>Slot 1 Position</label>
<select class="opt-w-140" id="opt_splitMeter1Pos">
<option value="left">Links</option>
<option value="center">Mitte</option>
<option value="right" selected>Rechts</option>
</select>
</div>
<div class="opt">
<label>Slot 2</label>
<select class="opt-w-220" id="opt_splitMeter2">
<option value="vu">VU</option>
<option value="ppm-ebu">PPM (EBU Type IIb)</option>
<option value="ppm-din">PPM (DIN Type I)</option>
<option value="tp">True Peak</option>
<option value="rms">True RMS</option>
<option value="lufs">LUFS (EBU R128)</option>
<option value="stopwatch">Stoppuhr</option>
<option value="none">(leer)</option>
</select>
</div>
<div class="opt">
<label>Slot 2 Position</label>
<select class="opt-w-140" id="opt_splitMeter2Pos">
<option value="left">Links</option>
<option value="center">Mitte</option>
<option value="right" selected>Rechts</option>
</select>
</div>
<div class="opt">
<label>Slot 3</label>
<select class="opt-w-220" id="opt_splitMeter3">
<option value="vu">VU</option>
<option value="ppm-ebu">PPM (EBU Type IIb)</option>
<option value="ppm-din">PPM (DIN Type I)</option>
<option value="tp">True Peak</option>
<option value="rms">True RMS</option>
<option value="lufs">LUFS (EBU R128)</option>
<option value="stopwatch">Stoppuhr</option>
<option value="none">(leer)</option>
</select>
</div>
<div class="opt">
<label>Slot 3 Position</label>
<select class="opt-w-140" id="opt_splitMeter3Pos">
<option value="left">Links</option>
<option value="center">Mitte</option>
<option value="right" selected>Rechts</option>
</select>
</div>
</div>
</details>
<details>
<summary>Quad-View</summary>
<div class="opt-group">
<div class="opt">
<label>Quadrant Klick</label>
<select class="opt-w-220" id="opt_quadTapAction">
<option value="switch">Direkt in View wechseln</option>
<option value="popup">View als Popup (Tap außerhalb schließt)</option>
</select>
</div>
<div class="opt">
<label>Plot Oben Links</label>
<select class="opt-w-220" id="opt_quadPlotTL">
<option value="none">(leer)</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="realtime">Real Time Analyzer</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="peak-history">Peak History</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="clock">Studio Clock</option>
<option value="waveform">Waveform</option>
<option value="spectrogram">Spectrogram</option>
</select>
</div>
<div class="opt">
<label>Plot Oben Rechts</label>
<select class="opt-w-220" id="opt_quadPlotTR">
<option value="none">(leer)</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="realtime">Real Time Analyzer</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="peak-history">Peak History</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="clock">Studio Clock</option>
<option value="waveform">Waveform</option>
<option value="spectrogram">Spectrogram</option>
</select>
</div>
<div class="opt">
<label>Plot Unten Links</label>
<select class="opt-w-220" id="opt_quadPlotBL">
<option value="none">(leer)</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="realtime">Real Time Analyzer</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="peak-history">Peak History</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="clock">Studio Clock</option>
<option value="waveform">Waveform</option>
<option value="spectrogram">Spectrogram</option>
</select>
</div>
<div class="opt">
<label>Plot Unten Rechts</label>
<select class="opt-w-220" id="opt_quadPlotBR">
<option value="none">(leer)</option>
<option value="phase-wheel">Phase Wheel</option>
<option value="realtime">Real Time Analyzer</option>
<option value="goniometer-rtw">XY-Display</option>
<option value="peak-history">Peak History</option>
<option value="classic-needles">Classic Needles</option>
<option value="panel">Meters</option>
<option value="clock">Studio Clock</option>
<option value="waveform">Waveform</option>
<option value="spectrogram">Spectrogram</option>
</select>
</div>
<div class="opt">
<label>Meter Slots</label>
<select class="opt-w-120" id="opt_quadMeterCount">
<option value="0">Aus</option>
<option value="1">1 Slot</option>
<option value="2">2 Slots</option>
<option value="3">3 Slots</option>
</select>
</div>
<div class="opt">
<label>Slot 1</label>
<select class="opt-w-220" id="opt_quadMeter1">
<option value="vu">VU</option>
<option value="ppm-ebu">PPM (EBU Type IIb)</option>
<option value="ppm-din">PPM (DIN Type I)</option>
<option value="tp">True Peak</option>
<option value="rms">True RMS</option>
<option value="lufs">LUFS (EBU R128)</option>
<option value="stopwatch">Stoppuhr</option>
<option value="none">(leer)</option>
</select>
</div>
<div class="opt">
<label>Slot 1 Position</label>
<select class="opt-w-140" id="opt_quadMeter1Pos">
<option value="left">Links</option>
<option value="center">Mitte</option>
<option value="right" selected>Rechts</option>
</select>
</div>
<div class="opt">
<label>Slot 2</label>
<select class="opt-w-220" id="opt_quadMeter2">
<option value="vu">VU</option>
<option value="ppm-ebu">PPM (EBU Type IIb)</option>
<option value="ppm-din">PPM (DIN Type I)</option>
<option value="tp">True Peak</option>
<option value="rms">True RMS</option>
<option value="lufs">LUFS (EBU R128)</option>
<option value="stopwatch">Stoppuhr</option>
<option value="none">(leer)</option>
</select>
</div>
<div class="opt">
<label>Slot 2 Position</label>
<select class="opt-w-140" id="opt_quadMeter2Pos">
<option value="left">Links</option>
<option value="center">Mitte</option>
<option value="right" selected>Rechts</option>
</select>
</div>
<div class="opt">
<label>Slot 3</label>
<select class="opt-w-220" id="opt_quadMeter3">
<option value="vu">VU</option>
<option value="ppm-ebu">PPM (EBU Type IIb)</option>
<option value="ppm-din">PPM (DIN Type I)</option>
<option value="tp">True Peak</option>
<option value="rms">True RMS</option>
<option value="lufs">LUFS (EBU R128)</option>
<option value="stopwatch">Stoppuhr</option>
<option value="none">(leer)</option>
</select>
</div>
<div class="opt">
<label>Slot 3 Position</label>
<select class="opt-w-140" id="opt_quadMeter3Pos">
<option value="left">Links</option>
<option value="center">Mitte</option>
<option value="right" selected>Rechts</option>
</select>
</div>
</div>
</details>
<details>
<summary>Recorder</summary>
<div class="opt-group">
<div class="opt">
<label>Speicherort</label>
<select class="opt-w-220" id="recTargetSel"></select>
<small>Lädt lokal auf diesem Rechner herunter oder speichert direkt auf Phoenix/Pi.</small>
</div>
<div class="opt">
<label>Recorder-Format</label>
<select class="opt-w-220" id="opt_recFormat">
<option value="wav">WAV (verlustfrei, groß)</option>
<option value="mp3">MP3 (kompakt)</option>
<option value="webm">WebM/Opus (kleiner)</option>
</select>
<small>Phoenix unterstützt WAV, MP3 und WebM/Opus.</small>
</div>
<div class="opt" id="opt_recMp3BitrateWrap">
<label>MP3-Bitrate</label>
<select class="opt-w-220" id="opt_recMp3Bitrate">
<option value="64">64 kbit/s</option>
<option value="128">128 kbit/s</option>
<option value="192">192 kbit/s</option>
<option value="256">256 kbit/s</option>
<option value="320">320 kbit/s</option>
</select>
<small>Wird nur für MP3 verwendet.</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_recAutoDownload" type="checkbox">
Auto-Speichern
</label>
<small>Lädt neue Takes automatisch herunter, sobald sie in der Liste erscheinen.</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_recShowAb" type="checkbox">
Recorder A/B anzeigen
</label>
<small>Blendet links oben die aktiven Recorder-Kennungen A und B ein.</small>
</div>
<div class="opt">
<label>Auto-Split Gap</label>
<input id="opt_recAutoGap" type="range" min="0.5" max="3" step="0.5">
<span id="val_recAutoGap"></span>
<small>Nach dieser Ruhezeit wird im Auto-Modus ein neuer Titel begonnen.</small>
</div>
<div class="opt">
<label>Auto-Split Threshold (dBFS)</label>
<input class="opt-w-120" id="opt_recThreshDbfs" type="number" min="-120" max="20" step="0.1">
<small>Schwelle für Signal/Ruhe im Recorder-Auto-Modus in dBFS.</small>
</div>
<div class="opt">
<label>Auto-Split Threshold (PPM DIN)</label>
<input class="opt-w-120" id="opt_recThreshPpmDin" type="number" min="-120" max="20" step="0.1">
<small>Alternative Eingabe in PPM DIN; beide Felder bleiben gekoppelt.</small>
</div>
</div>
</details>
<details>
<summary>Studio Clock</summary>
<div class="opt-group">
<div class="opt">
<label for="opt_clockStyle">Stil</label>
<select id="opt_clockStyle" style="width:240px">
<option value="analog">Analog (Ring)</option>
<option value="analog-ppm">Analog + PPM</option>
<option value="digital">Digital</option>
<option value="digital-ppm">Digital + PPM</option>
</select>
<small>Darstellung der Studio Clock</small>
</div>
<div class="opt">
<label for="opt_clockColor">LED Farbe</label>
<input class="opt-w-120" id="opt_clockColor" type="color">
<small>Farbe der Punkte und des Rings</small>
</div>
<div class="opt">
<label class="row" style="gap:8px;align-items:center">
<input id="opt_clockGlow" type="checkbox" checked>
LED-Glow für Punkte
</label>
<small>Simuliert leuchtende LEDs für Ringe und Ziffern</small>
</div>
<div class="opt">
<label class="row" style="gap:8px;align-items:center">
<input id="opt_clockPpmLed" type="checkbox">
PPM als LED-Band
</label>
<small>Zeigt das PPM unter der Uhr als Punkte statt durchgehender Balken</small>
</div>
</div>
</details>
<details>
<summary>Presets</summary>
<div class="opt-group">
<div class="opt">
<label for="opt_softwarePreset">Software-Preset</label>
<div class="row" style="gap:8px;align-items:center;flex-wrap:wrap">
<select class="opt-w-180" id="opt_softwarePreset">
<option value="default">Default</option>
<option value="claus">Claus</option>
<option value="michael">Michael</option>
</select>
<button id="btnSoftwarePresetLoad" class="btn btn-compact" type="button">Laden</button>
<button id="btnSoftwarePresetSave" class="btn btn-compact" type="button">Speichern</button>
<button id="btnSoftwarePresetExport" class="btn btn-compact" type="button">Export</button>
<label for="impSoftwarePreset" class="btn btn-compact" id="btnSoftwarePresetImport" style="cursor:pointer">Import</label>
<input id="impSoftwarePreset" type="file" accept="application/json" style="display:none">
</div>
<small>Default lädt den Werkstand. Claus und Michael können als komplette Benutzer-Presets extern gespeichert und später wieder geladen werden.</small>
</div>
<div class="opt">
<label for="opt_layoutPreset">Layout-Slot</label>
<div class="row" style="gap:8px;align-items:center;flex-wrap:wrap">
<select class="opt-w-120" id="opt_layoutPreset">
<option value="1">Layout 1</option>
<option value="2">Layout 2</option>
<option value="3">Layout 3</option>
<option value="4">Layout 4</option>
</select>
<button id="btnLayoutPresetSave" class="btn btn-compact" type="button">Speichern</button>
</div>
<div class="row" style="gap:8px;align-items:center;flex-wrap:wrap; margin-top:8px">
<button id="btnLayoutPresetLoad1" class="btn btn-compact" type="button">Layout 1 aktivieren</button>
<button id="btnLayoutPresetLoad2" class="btn btn-compact" type="button">Layout 2 aktivieren</button>
<button id="btnLayoutPresetLoad3" class="btn btn-compact" type="button">Layout 3 aktivieren</button>
<button id="btnLayoutPresetLoad4" class="btn btn-compact" type="button">Layout 4 aktivieren</button>
</div>
<small>Speichert nur Ansicht und Layout. Layouts können per URL, z. B. <code>?layout=1</code>, oder über die Aktivieren-Tasten geladen werden.</small>
</div>
<div class="opt">
<label>Gerätesicherung</label>
<div class="row" style="gap:8px;align-items:center;flex-wrap:wrap">
<button id="btnDeviceBackupExport" class="btn btn-compact" type="button">Gesamtbackup herunterladen</button>
<label for="impDeviceBackup" class="btn btn-compact" style="cursor:pointer">Gesamtbackup einlesen</label>
<input id="impDeviceBackup" type="file" accept="application/json" style="display:none">
</div>
<small id="deviceBackupStatus">Enthält globale Geräteeinstellungen, RTA-Laufzeitkonfiguration, Software-Presets und Layout-Slots. Browserlokale Ansichten sind nicht enthalten.</small>
</div>
</div>
</details>
<details>
<summary>Meters</summary>
<div class="opt-group">
<details style="margin-left:12px">
<summary>VU-Meter</summary>
<div class="opt-group">
<div class="opt">
<label class="row">
<input id="opt_vu_plus4" type="checkbox" checked>
VU: 0VU = +4dBu (statt 0dBu)
</label>
<small>Deaktiviert: 0VU liegt direkt auf 0dBu (Digital-Referenz).</small>
</div>
<div class="opt"><label>0 VU Referenz (dBFS)</label>
<input class="opt-w-120" id="opt_vuRef" type="number" min="-30" max="-6" step="0.1"><small>typ. -18</small>
</div>
<div class="opt"><label>VU Offset (dB) Anzeige</label>
<input class="opt-w-120" id="opt_vuOff" type="number" min="-20" max="+20" step="0.1"><small>addiert auf VU</small>
</div>
<div class="opt"><label>VU Hold (ms)</label>
<input class="opt-w-110" id="opt_vuHold" type="number" min="100" max="5000" step="50">
<small>Peak-Hold Zeit</small>
</div>
<div class="opt"><label>VU Decay (dB/s)</label>
<input class="opt-w-110" id="opt_vuDecay" type="number" min="5" max="60" step="1">
<small>Abfall pro Sekunde</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_vuHeaderValue" type="checkbox">
Header: Pegel statt Name
</label>
<small>Blendet „Volume Units“ aus und zeigt oben den aktuellen Wert</small>
</div>
<div class="opt"><label>VU: Rot ab (VU)</label>
<input class="opt-w-110" id="opt_vuRedThr" type="number" min="-20" max="+12" step="0.5">
<label class="row"><input id="opt_vuRedBarOnly" type="checkbox"> nur roter Teil</label>
</div>
<div class="opt"><label>VU Farben</label>
<span>Normal</span><input id="opt_vuColNorm" type="color">
<span>Warn</span><input id="opt_vuColWarn" type="color">
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>PPM DIN</summary>
<div class="opt-group">
<div class="opt">
<label class="row">
<input id="opt_din_al_minus6" type="checkbox">
DINPPM: 0dBu → 6dB (statt 9dB)
</label>
<small>DokumentVariante (PML=+6dBu; AL=0dBu → 6dB). Deaktiviert: AL → 9dB.</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_ppmDinHeaderValue" type="checkbox">
Header: Pegel statt Name
</label>
<small>Blendet „PPM (DIN)“ aus und zeigt oben den aktuellen Wert</small>
</div>
<div class="opt"><label>PPM Farben</label>
<span>Normal</span><input id="opt_ppmDinColNorm" type="color">
<span>Warn</span><input id="opt_ppmDinColWarn" type="color">
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_ppmDinLoudnessBox" type="checkbox">
Historische „RTW-Loudness“
</label>
<small>RTW-artige Momentary-Loudness: 400 ms Integration, K-gewichtet, pro Kanal. Historische Zusatzanzeige, nicht als normierte EBU-R128-Anzeige zu verstehen.</small>
</div>
<div class="opt"><label>RTW-Loudness Offset (dB)</label>
<input id="opt_ppmDinLoudOff" type="range" min="-7" max="7" step="0.1"><span id="val_ppmDinLoudOff"></span>
<small>Addiert auf die RTW-Loudness-Box</small>
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>PPM EBU</summary>
<div class="opt-group">
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_ppmEbuHeaderValue" type="checkbox">
Header: Pegel statt Name
</label>
<small>Blendet „PPM (EBU)“ aus und zeigt oben den aktuellen Wert</small>
</div>
<div class="opt"><label>PPM Farben</label>
<span>Normal</span><input id="opt_ppmEbuColNorm" type="color">
<span>Warn</span><input id="opt_ppmEbuColWarn" type="color">
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>True Peak</summary>
<div class="opt-group">
<div class="opt"><label>TruePeak Offset (dB)</label>
<input class="opt-w-120" id="opt_tpOff" type="number" min="-20" max="+20" step="0.1">
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_tpHeaderValue" type="checkbox">
Header: Pegel statt Name
</label>
<small>Blendet „True Peak“ aus und zeigt oben den aktuellen Wert</small>
</div>
<div class="opt"><label>TruePeak: Rot ab (dBFS)</label>
<input class="opt-w-110" id="opt_tpRedThr" type="number" min="-20" max="+6" step="0.5">
<label class="row"><input id="opt_tpRedBarOnly" type="checkbox"> nur roter Teil</label>
</div>
<div class="opt"><label>TruePeak Farben</label>
<span>Normal</span><input id="opt_tpColNorm" type="color">
<span>Warn</span><input id="opt_tpColWarn" type="color">
</div>
<div class="opt"><label>TruePeak Hold (ms)</label>
<input class="opt-w-110" id="opt_tpHold" type="number" min="0" max="5000" step="50">
</div>
<div class="opt"><label>TruePeak Decay (dB/s)</label>
<input class="opt-w-110" id="opt_tpDecay" type="number" min="1" max="60" step="0.1">
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>HiFi Peak</summary>
<div class="opt-group">
<div class="opt">
<label>Alignment</label>
<select class="opt-w-220" id="opt_hifiAlign">
<option value="ppm_din_minus5" selected>PPM DIN -5 dB = HiFi 0 dB</option>
<option value="ppm_din_zero">PPM DIN 0 dB = HiFi 0 dB</option>
</select>
<small>Legt fest, worauf sich 0 dB auf dem HiFi-Peak-Meter bezieht.</small>
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>RMS</summary>
<div class="opt-group">
<div class="opt"><label>RMS Modus</label>
<select id="opt_rmsMode">
<option value="dbu">dBu (Studio)</option>
<option value="dbfs">dBFS</option>
</select>
</div>
<div class="opt"><label>RMS Referenz (dBFS @ 0 dBu)</label>
<input class="opt-w-120" id="opt_rmsRefDbfs" type="number" min="-60" max="0" step="0.1">
</div>
<div class="opt"><label>RMS Referenz (dBu)</label>
<input class="opt-w-120" id="opt_rmsRefDbu" type="number" min="-20" max="+24" step="0.1">
</div>
<div class="opt"><label>RMS Offset (dB)</label>
<input class="opt-w-120" id="opt_rmsOff" type="number" min="-20" max="+20" step="0.1">
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_rmsHeaderValue" type="checkbox">
Header: Pegel statt Name
</label>
<small>Blendet „RMS …“ aus und zeigt oben den aktuellen Wert</small>
</div>
<div class="opt"><label>RMS: Rot ab (Anzeigeeinheit)</label>
<input class="opt-w-110" id="opt_rmsRedThr" type="number" min="-60" max="24" step="0.5">
<label class="row"><input id="opt_rmsRedBarOnly" type="checkbox"> nur roter Teil</label>
</div>
<div class="opt"><label>RMS Farben</label>
<span>Normal</span><input id="opt_rmsColNorm" type="color">
<span>Warn</span><input id="opt_rmsColWarn" type="color">
</div>
<div class="opt"><label>RMS Zeitkonstante</label>
<select id="opt_rmsTc" style="width:170px">
<option value="fast">Fast (125 ms)</option>
<option value="slow">Slow (1000 ms)</option>
<option value="window">Fenster (300 ms)</option>
</select>
<small>Integration der linearen Signalleistung im Audiokern. Fast/Slow verwenden 125 ms beziehungsweise 1 s; Fenster misst gleitend über exakt 300 ms.</small>
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>LUFS</summary>
<div class="opt-group">
<div class="opt"><label>LUFS: Rot ab (LUFS)</label>
<input class="opt-w-110" id="opt_lufsRedThr" type="number" min="-10" max="+0" step="0.1">
<small>typ. -1.0</small>
</div>
<div class="opt"><label>LUFS: Gelb ab (LUFS)</label>
<input class="opt-w-110" id="opt_lufsYellowThr" type="number" min="-10" max="+0" step="0.1">
<small>typ. -2.0</small>
</div>
<div class="opt"><label>LUFS: Grün bis (LUFS)</label>
<input class="opt-w-110" id="opt_lufsGreenThr" type="number" min="-10" max="+0" step="0.1">
<small>typ. -5.0</small>
</div>
<div class="opt"><label>LUFS Farbe I</label>
<input id="opt_lufsColI" type="color">
</div>
<div class="opt"><label>LUFS Farbe M</label>
<input id="opt_lufsColM" type="color">
</div>
<div class="opt"><label>LUFS Farbe S</label>
<input id="opt_lufsColS" type="color">
</div>
<div class="opt"><label>LUFS Skala-Zahlen</label>
<input id="opt_lufsScaleCol" type="color">
<small>Farbe der Skalenwerte (z.B. 23/18/10)</small>
</div>
<div class="opt"><label>LUFS I: Zeitfenster (min)</label>
<input id="opt_lufsIWindowMin" type="range" min="1" max="10" step="1"><span id="val_lufsIWindowMin"></span>
<small>Rollierendes Fenster für „I (Integrated)“ in 1MinutenSchritten.</small>
</div>
<div class="opt">
<label class="row" style="align-items:center;gap:8px">
<input id="opt_lufsINorm" type="checkbox">
LUFS I: Normgerecht (seit Reset)
</label>
<small>Misst Integrated über die gesamte Laufzeit (seit Aktivierung/Reset) und deaktiviert das rollierende Fenster.</small>
</div>
</div>
</details>
<details style="margin-left:12px">
<summary>Stoppuhr</summary>
<div class="opt-group">
<div class="opt"><label>Anzeige</label>
<select class="opt-w-220" id="opt_stopwatchDisplay">
<option value="mono">Standard (Monospace)</option>
<option value="seven">7Segment</option>
</select>
<small>Gilt für das SlotMeter „Stoppuhr“.</small>
</div>
<div class="opt">
<label>Auto-Threshold (dBFS)</label>
<input class="opt-w-120" id="opt_stopwatchThreshDbfs" type="number" min="-120" max="20" step="0.1">
<small>Schwelle für automatisches Start/Stop der Stoppuhr in dBFS.</small>
</div>
<div class="opt">
<label>Auto-Threshold (PPM DIN)</label>
<input class="opt-w-120" id="opt_stopwatchThreshPpmDin" type="number" min="-120" max="20" step="0.1">
<small>Alternative Eingabe in PPM DIN; beide Felder bleiben gekoppelt.</small>
</div>
</div>
</details>
</div>
</details>
<div style="margin:16px 0 0 0; display:flex; gap:12px; flex-wrap:wrap; padding:0 4px;">
<button id="btnOnlineUpdate" class="btn">Online Update</button>
<button id="btnReloadAudio" class="btn">Audio neu initialisieren</button>
<button id="btnReset" class="btn">Werkseinstellungen</button>
</div>
<p style="margin:6px 4px 0 4px; color:#b2c7d9; font-size:12px;">
Hinweis: Online Update ist nur für die reine Analyzer-Installation gedacht. In der Volumio-Variante bitte per Snapshot bzw. manuell aktualisieren.
</p>
<details id="changelogDetails" class="changelog-details">
<summary>Version / Änderungen</summary>
<div id="changelogContent" class="changelog-content"></div>
</details>
</div>
<div id="recorderHud" style="display:none">
<span id="recLabel" class="rec-label rec-floating">Aufnahme</span>
<div id="recList" class="rec-list rec-floating"></div>
<span id="recTimer" class="rec-timer rec-floating">00:00:00:00</span>
<button id="recStartBtn" class="btn btn-lg btn-danger-border rec-floating">Aufnehmen</button>
<button id="recStopBtn" class="btn btn-lg rec-floating" disabled>Stop</button>
<button id="recAutoBtn" class="btn btn-lg rec-floating">Auto</button>
</div>
<div id="recProcessing" class="rec-processing" style="display:none">
<div class="rec-processing-box">
<div class="rec-spinner"></div>
<div class="rec-processing-text">Verarbeite…</div>
<div class="rec-processing-sub">Die Aufnahme wird zusammengefügt.</div>
</div>
</div>
<div id="calibrationNotice" class="calibration-modal" style="display:none">
<div class="calibration-box">
<h3>Willkommen zum Phoenix Analyzer</h3>
<p>Willkommen. Phoenix Analyzer ist bereit und startet mit den Werkseinstellungen.</p>
<p>Alle Ansichten, Farben, Meter-Slots und Optionen lassen sich jederzeit im laufenden Betrieb anpassen.</p>
<p>Wenn du eigene Einstellungen dauerhaft behalten willst, nutze die Software-Presets zum Speichern, Laden, Exportieren und Importieren.</p>
<button id="calibrationNoticeBtn" class="btn btn-lg" type="button">Los geht's</button>
</div>
</div>
<div id="recWarning" class="rec-warning" style="display:none">
<div class="rec-warning-box">
<h3>Hinweis</h3>
<p>Bei WAV-Aufnahmen wird empfohlen, nicht länger als ca. 1 Stunde aufzuzeichnen. Bei Datenverlust durch zu lange WAV-Aufnahmen wird keine Haftung übernommen.</p>
<p>Für sehr lange Aufnahmen kann in den Optionen auf WebM/Opus umgestellt werden, um Speicher zu sparen.</p>
<p>Grundsätzlich sollte die Recorder-Funktion als BETA betrachtet werden; Nutzung auf eigene Verantwortung.</p>
<label class="rec-warning-ack row">
<input id="recWarningAck" type="checkbox">
<span>Ich habe verstanden</span>
</label>
<button id="recWarningBtn" class="btn btn-lg" disabled>Weiter</button>
</div>
</div>
<div id="presetSaveRemoteNotice" class="rec-warning" style="display:none">
<div class="rec-warning-box">
<h3>Preset hier nicht speichern</h3>
<p>Presets sollen direkt am Analyzer über <strong>localhost</strong> gespeichert werden.</p>
<p>Wenn du von einer anderen Adresse zugreifst, würde sonst der Zustand dieses Browsers gespeichert werden.</p>
<div class="row" style="gap:10px">
<button id="presetSaveRemoteOkBtn" class="btn btn-lg" type="button">OK</button>
</div>
</div>
</div>
<div id="onlineUpdateReadyNotice" class="rec-warning" style="display:none">
<div class="rec-warning-box">
<h3>Online Update</h3>
<p>download beendet, es wird neu gestartet</p>
<div class="row" style="gap:10px">
<button id="onlineUpdateRestartBtn" class="btn btn-lg" type="button">Neustart</button>
</div>
</div>
</div>
<div id="factoryResetConfirm" class="rec-warning" style="display:none">
<div class="rec-warning-box">
<h3>Werkseinstellungen laden?</h3>
<p>Dadurch werden alle gespeicherten Einstellungen (inkl. Slots, letzter View, Presets, Offsets und Hinweise) gelöscht — Es erfolgt ein Neustart wie beim ersten Einschalten.</p>
<label class="rec-warning-ack row">
<input id="factoryResetAck" type="checkbox">
<span>Ich bin mir sicher</span>
</label>
<div class="row" style="gap:10px">
<button id="factoryResetCancelBtn" class="btn btn-lg" type="button">Abbrechen</button>
<button id="factoryResetConfirmBtn" class="btn btn-lg btn-danger-border" type="button" disabled>JA</button>
</div>
</div>
</div>
<div id="err" class="err"></div>
<script type="module" src="./main.js"></script>
</body>
</html>