1895 lines
107 KiB
HTML
1895 lines
107 KiB
HTML
<!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 id="slotSel1" style="width:120px"></select>
|
||
<select id="slotSel2" style="display:none;width:120px"></select>
|
||
<select id="slotSel3" style="display:none;width:120px"></select>
|
||
<select id="slotSel4" style="display:none;width:120px"></select>
|
||
<select id="slotSel5" style="display:none;width:120px"></select>
|
||
<div id="peakHistScrollWrap" style="display:none;align-items:center;gap:6px;margin-left:10px">
|
||
<label for="peakHistScrollSel">Geschwindigkeit</label>
|
||
<select id="peakHistScrollSel" style="width:140px">
|
||
<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 id="waveWindowSel" style="width:120px"></select>
|
||
</div>
|
||
<div id="waveModeWrap" style="display:none;align-items:center;gap:6px">
|
||
<label for="waveModeSel">Ansicht</label>
|
||
<select id="waveModeSel" style="width:140px"></select>
|
||
</div>
|
||
<div id="rtaBpoWrap" style="display:none;align-items:center;gap:6px">
|
||
<label for="rtaBpoSel">Oktaven</label>
|
||
<select id="rtaBpoSel" style="width:140px"></select>
|
||
</div>
|
||
<div id="gainWrap" style="display:none;align-items:center;gap:6px">
|
||
<label for="gainSel">Gain</label>
|
||
<select id="gainSel" style="width:110px"></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 id="splitLeftSel" style="width:150px"></select>
|
||
<span style="opacity:0.75">|</span>
|
||
<select id="splitRightSel" style="width:150px"></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 id="splitMeterSel1" style="width:220px"></select>
|
||
</div>
|
||
<div id="splitMeterRow2" class="split-popup__row">
|
||
<label for="splitMeterSel2" style="min-width:70px">Slot 2</label>
|
||
<select id="splitMeterSel2" style="width:220px"></select>
|
||
</div>
|
||
<div id="splitMeterRow3" class="split-popup__row">
|
||
<label for="splitMeterSel3" style="min-width:70px">Slot 3</label>
|
||
<select id="splitMeterSel3" style="width:220px"></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 id="quadPlotSelTL" style="width:220px"></select>
|
||
</div>
|
||
<div class="split-popup__row">
|
||
<label for="quadPlotSelTR" style="min-width:70px">Oben Rechts</label>
|
||
<select id="quadPlotSelTR" style="width:220px"></select>
|
||
</div>
|
||
<div class="split-popup__row">
|
||
<label for="quadPlotSelBL" style="min-width:70px">Unten Links</label>
|
||
<select id="quadPlotSelBL" style="width:220px"></select>
|
||
</div>
|
||
<div class="split-popup__row">
|
||
<label for="quadPlotSelBR" style="min-width:70px">Unten Rechts</label>
|
||
<select id="quadPlotSelBR" style="width:220px"></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 id="opt_fft" style="width:140px">
|
||
<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 id="opt_headerTextColor" type="color" style="width:120px">
|
||
<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 id="opt_lrFracDelaySamples" type="text" inputmode="decimal" spellcheck="false" style="width:120px">
|
||
<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 id="opt_phoenixBaseUrl" type="text" spellcheck="false" style="width:220px" 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 id="opt_screensaverColor" type="color" style="width:120px">
|
||
<small>Farbe fuer Clock- und DVD-Screensaver.</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label for="opt_screensaverIdleMin">Wartezeit (min)</label>
|
||
<input id="opt_screensaverIdleMin" type="number" min="0" max="120" step="0.5" style="width:120px">
|
||
<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 id="opt_screensaverActivityDb" type="number" min="-120" max="0" step="1" style="width:120px">
|
||
<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 id="opt_rtRenderMode" style="width:150px">
|
||
<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 id="opt_rtHold" type="number" min="100" max="5000" step="50" style="width:110px">
|
||
<small>Peak hold Zeit</small>
|
||
</div>
|
||
<div class="opt"><label>Real Time Decay (dB/s)</label>
|
||
<input id="opt_rtDecay" type="number" min="1" max="60" step="1" style="width:110px">
|
||
<small>Decay pro Sekunde</small>
|
||
</div>
|
||
|
||
<div class="opt">
|
||
<label>Engine</label>
|
||
<select id="opt_rtaEngine" style="width:150px">
|
||
<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>Bänder pro Oktave</label>
|
||
<select id="opt_rtaBpo" style="width:150px">
|
||
<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>Filterauflösung – Anzahl Bänder</small>
|
||
</div>
|
||
<div class="opt"><label>IIR Ordnung</label>
|
||
<input id="opt_rtaOrder" type="number" min="2" max="8" step="2" style="width:110px">
|
||
<small>Filtergüte – Ordnung des IIR-Filters</small>
|
||
</div>
|
||
<div class="opt"><label>IIR Fast τ (s)</label>
|
||
<input id="opt_rtaTauFast" type="number" min="0.01" max="1" step="0.01" style="width:110px">
|
||
<small>Schnelles Integrationsfenster</small>
|
||
</div>
|
||
<div class="opt"><label>IIR Slow τ (s)</label>
|
||
<input id="opt_rtaTauSlow" type="number" min="0.1" max="5" step="0.1" style="width:110px">
|
||
<small>Langsames Integrationsfenster</small>
|
||
</div>
|
||
<div class="opt"><label>Frequenzbereich</label>
|
||
<select id="opt_rtaFreq" style="width:150px">
|
||
<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 id="opt_rtaLayout" style="width:150px">
|
||
<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 id="opt_rtaBarBaseColor" type="color" style="width:120px">
|
||
<small>Grundfarbe der Balken; Peak-Bereiche bleiben rot</small>
|
||
</div>
|
||
<div class="opt"><label>Bewertung</label>
|
||
<select id="opt_rtaWeighting" style="width:150px">
|
||
<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>Integrationszeit</label>
|
||
<select id="opt_rtaIntegration" style="width:150px">
|
||
<option value="impulse">Impulse</option>
|
||
<option value="fast" selected>Fast</option>
|
||
<option value="medium">Medium</option>
|
||
<option value="slow">Slow</option>
|
||
<option value="average">Average</option>
|
||
<option value="peak">Peak (10 ms)</option>
|
||
</select>
|
||
<small>Reaktionsmodus</small>
|
||
</div>
|
||
<div class="opt"><label>RTA Ballistics</label>
|
||
<select id="opt_rtaBallistics" style="width:200px">
|
||
<option value="average" selected>Average (RMS)</option>
|
||
<option value="peak">Peak</option>
|
||
<option value="both">Average + Peak Overlay</option>
|
||
</select>
|
||
<small>Angezeigte Kurven</small>
|
||
</div>
|
||
<div class="opt"><label>Hold Mode</label>
|
||
<select id="opt_rtaHoldMode" style="width:150px">
|
||
<option value="off">Aus</option>
|
||
<option value="auto" selected>Auto</option>
|
||
<option value="manual">Manuell</option>
|
||
</select>
|
||
<small>Peak-Hold Verhalten</small>
|
||
</div>
|
||
<div class="opt"><label>Hold Time (s)</label>
|
||
<input id="opt_rtaHoldTime" type="number" min="0" max="30" step="0.5" style="width:110px">
|
||
<small>Dauer der Hold-Anzeige</small>
|
||
</div>
|
||
<div class="opt"><label>Hold Decay (dB/s)</label>
|
||
<input id="opt_rtaDecay" type="number" min="1" max="60" step="1" style="width:110px">
|
||
<small>Abfall des Hold-Peaks</small>
|
||
</div>
|
||
<div class="opt"><label>Display Hold (s)</label>
|
||
<input id="opt_rtaDisplayHold" type="number" min="0" max="5" step="0.1" style="width:110px">
|
||
<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 id="opt_spectroScroll" style="width:180px">
|
||
<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 id="opt_peakHistScroll" style="width:180px">
|
||
<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 id="opt_waveMode" style="width:150px">
|
||
<option value="stacked" selected>Gestapelt</option>
|
||
<option value="overlay">Überlagert</option>
|
||
<option value="diff">Differenz (L−R)</option>
|
||
</select>
|
||
<small>Darstellung der Kanäle: getrennt, überlagert oder Differenz</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label>Fenster (s)</label>
|
||
<select id="opt_waveWindow" style="width:150px">
|
||
<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>Gatet Goniometer & Korrelation bei Pegeln unterhalb der Schwelle</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label>Silence-Threshold [dBFS RMS]</label>
|
||
<input id="opt_xySilenceThr" type="number" min="-90" max="-40" step="1" style="width:120px">
|
||
<small>Default: -75 dBFS RMS (Mono)</small>
|
||
</div>
|
||
<div class="opt"><label>Korrelation Glättung</label>
|
||
<input id="opt_corrSmooth" type="range" min="0.5" max="0.98" step="0.01"><span id="val_corrSmooth"></span>
|
||
<small>Glättet die Korrelation für ruhigere Anzeige</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label class="row" style="align-items:center;gap:8px">
|
||
<input id="opt_corrZeroOnSilence" type="checkbox">
|
||
Sofortige Nullstellung wenn kein Pegel
|
||
</label>
|
||
<small>Setzt den Korrelations‑Würfel bei Stille sofort auf 0 (ohne Hold/Drift).</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 ms, Release 10 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 Fade-Out</label>
|
||
<input id="opt_goniFade" type="range" min="0" max="600" step="10"><span id="val_goniFade"></span>
|
||
<small>Nachleuchten der Spur (ms)</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 id="opt_phaseAmpMode" style="width:220px">
|
||
<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 id="opt_splitTapAction" style="width:220px">
|
||
<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 id="opt_splitLeftPlot" style="width:220px">
|
||
<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 id="opt_splitRightPlot" style="width:220px">
|
||
<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 id="opt_splitMeterCount" style="width:120px">
|
||
<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 id="opt_splitMeter1" style="width:220px">
|
||
<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 id="opt_splitMeter1Pos" style="width:140px">
|
||
<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 id="opt_splitMeter2" style="width:220px">
|
||
<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 id="opt_splitMeter2Pos" style="width:140px">
|
||
<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 id="opt_splitMeter3" style="width:220px">
|
||
<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 id="opt_splitMeter3Pos" style="width:140px">
|
||
<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 id="opt_quadTapAction" style="width:220px">
|
||
<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 id="opt_quadPlotTL" style="width:220px">
|
||
<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 id="opt_quadPlotTR" style="width:220px">
|
||
<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 id="opt_quadPlotBL" style="width:220px">
|
||
<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 id="opt_quadPlotBR" style="width:220px">
|
||
<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 id="opt_quadMeterCount" style="width:120px">
|
||
<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 id="opt_quadMeter1" style="width:220px">
|
||
<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 id="opt_quadMeter1Pos" style="width:140px">
|
||
<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 id="opt_quadMeter2" style="width:220px">
|
||
<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 id="opt_quadMeter2Pos" style="width:140px">
|
||
<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 id="opt_quadMeter3" style="width:220px">
|
||
<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 id="opt_quadMeter3Pos" style="width:140px">
|
||
<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 id="recTargetSel" style="width:220px"></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 id="opt_recFormat" style="width:220px">
|
||
<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 id="opt_recMp3Bitrate" style="width:220px">
|
||
<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 id="opt_recThreshDbfs" type="number" min="-120" max="20" step="0.1" style="width:120px">
|
||
<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 id="opt_recThreshPpmDin" type="number" min="-120" max="20" step="0.1" style="width:120px">
|
||
<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 id="opt_clockColor" type="color" style="width:120px">
|
||
<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 id="opt_softwarePreset" style="width:180px">
|
||
<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 id="opt_layoutPreset" style="width:120px">
|
||
<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>
|
||
</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: 0 VU = +4 dBu (statt 0 dBu)
|
||
</label>
|
||
<small>Deaktiviert: 0 VU liegt direkt auf 0 dBu (Digital-Referenz).</small>
|
||
</div>
|
||
<div class="opt"><label>0 VU Referenz (dBFS)</label>
|
||
<input id="opt_vuRef" type="number" min="-30" max="-6" step="0.1" style="width:120px"><small>typ. -18</small>
|
||
</div>
|
||
<div class="opt"><label>VU Offset (dB) – Anzeige</label>
|
||
<input id="opt_vuOff" type="number" min="-20" max="+20" step="0.1" style="width:120px"><small>addiert auf VU</small>
|
||
</div>
|
||
<div class="opt"><label>VU Hold (ms)</label>
|
||
<input id="opt_vuHold" type="number" min="100" max="5000" step="50" style="width:110px">
|
||
<small>Peak-Hold Zeit</small>
|
||
</div>
|
||
<div class="opt"><label>VU Decay (dB/s)</label>
|
||
<input id="opt_vuDecay" type="number" min="5" max="60" step="1" style="width:110px">
|
||
<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 id="opt_vuRedThr" type="number" min="-20" max="+12" step="0.5" style="width:110px">
|
||
<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">
|
||
DIN‑PPM: 0 dBu → −6 dB (statt −9 dB)
|
||
</label>
|
||
<small>Dokument‑Variante (PML=+6 dBu; AL=0 dBu → −6 dB). Deaktiviert: AL → −9 dB.</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label class="row">
|
||
<input id="opt_ppmDinFastAttack" type="checkbox">
|
||
PPM DIN: Fast‑Attack (sofort, nicht normgerecht)
|
||
</label>
|
||
<small>Umgeht die feste 10-ms-Normintegration und zeigt Sample-Peaks sofort an (kann gefühltes Anzeige-Lag reduzieren).</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 id="opt_tpOff" type="number" min="-20" max="+20" step="0.1" style="width:120px">
|
||
</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 id="opt_tpRedThr" type="number" min="-20" max="+6" step="0.5" style="width:110px">
|
||
<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 id="opt_tpHold" type="number" min="0" max="5000" step="50" style="width:110px">
|
||
</div>
|
||
<div class="opt"><label>TruePeak Decay (dB/s)</label>
|
||
<input id="opt_tpDecay" type="number" min="1" max="60" step="0.1" style="width:110px">
|
||
</div>
|
||
</div>
|
||
</details>
|
||
|
||
<details style="margin-left:12px">
|
||
<summary>HiFi Peak</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<label>Alignment</label>
|
||
<select id="opt_hifiAlign" style="width:220px">
|
||
<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 id="opt_rmsRefDbfs" type="number" min="-60" max="0" step="0.1" style="width:120px">
|
||
</div>
|
||
<div class="opt"><label>RMS Referenz (dBu)</label>
|
||
<input id="opt_rmsRefDbu" type="number" min="-20" max="+24" step="0.1" style="width:120px">
|
||
</div>
|
||
<div class="opt"><label>RMS Offset (dB)</label>
|
||
<input id="opt_rmsOff" type="number" min="-20" max="+20" step="0.1" style="width:120px">
|
||
</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 (dBFS)</label>
|
||
<input id="opt_rmsRedThr" type="number" min="-40" max="0" step="0.5" style="width:110px">
|
||
<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="impulse">Impulse (35 ms)</option>
|
||
<option value="none">Keine (instant)</option>
|
||
</select>
|
||
<small>IEC 60268: Impulse 35 ms, Fast 125 ms, Slow 1000 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 id="opt_lufsRedThr" type="number" min="-10" max="+0" step="0.1" style="width:110px">
|
||
<small>typ. -1.0</small>
|
||
</div>
|
||
<div class="opt"><label>LUFS: Gelb ab (LUFS)</label>
|
||
<input id="opt_lufsYellowThr" type="number" min="-10" max="+0" step="0.1" style="width:110px">
|
||
<small>typ. -2.0</small>
|
||
</div>
|
||
<div class="opt"><label>LUFS: Grün bis (LUFS)</label>
|
||
<input id="opt_lufsGreenThr" type="number" min="-10" max="+0" step="0.1" style="width:110px">
|
||
<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 1‑Minuten‑Schritten.</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 id="opt_stopwatchDisplay" style="width:220px">
|
||
<option value="mono">Standard (Monospace)</option>
|
||
<option value="seven">7‑Segment</option>
|
||
</select>
|
||
<small>Gilt für das Slot‑Meter „Stoppuhr“.</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label>Auto-Threshold (dBFS)</label>
|
||
<input id="opt_stopwatchThreshDbfs" type="number" min="-120" max="20" step="0.1" style="width:120px">
|
||
<small>Schwelle für automatisches Start/Stop der Stoppuhr in dBFS.</small>
|
||
</div>
|
||
<div class="opt">
|
||
<label>Auto-Threshold (PPM DIN)</label>
|
||
<input id="opt_stopwatchThreshPpmDin" type="number" min="-120" max="20" step="0.1" style="width:120px">
|
||
<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 style="margin:20px 0 0 5px">
|
||
<summary>Version / Änderungen</summary>
|
||
<div class="opt-group">
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.3.5 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 28.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Stoppuhr: Löschfunktion verbessert. Die X-Buttons neben den einzelnen Zeiten lassen sich jetzt über einen separaten X-Button ein- und ausblenden; Reset und Löschmodus sind optisch getrennt.</li>
|
||
<li>Online Update: Hinweis ergänzt, dass die Funktion nur für die reine Analyzer-Installation gedacht ist; Volumio-Systeme sollen per Snapshot bzw. manuell aktualisiert werden.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.3.4 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 24.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Studio-Clock und Clock-Screensaver beim Sekundenblinken angepasst: Der Doppelpunkt läuft jetzt mit exakt 50 % Duty Cycle und schaltet auf der Sekunde an sowie in der zweiten Halbsekunde wieder aus.</li>
|
||
<li>Online Update robuster gemacht: Update-Skripte laufen jetzt mit sicherer Fallback-Locale, damit fehlendes de_DE.UTF-8 auf Volumio keine bash-setlocale-Warnung mehr als Fehler anzeigt.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.3.2 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 21.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>INFO: Ein extern beobachtetes Start-/WebSocket-Problem in älteren Safari-Versionen lag nicht an Phoenix selbst, sondern an einem Safari-/WebKit-Bug; nach Safari-Update funktionierte der Analyzer wieder normal.</li>
|
||
<li>Recorder-Liste auf große Browserfenster verbessert: Die sichtbare Listenhöhe passt sich jetzt dynamisch an die tatsächlich verfügbare Fläche an, statt früh auf eine starre Anzahl sichtbarer Einträge zu begrenzen.</li>
|
||
<li>Recorder-Layout unten entschärft: Vor Timer und Buttons bleibt nun mehr Reserve, damit der letzte sichtbare Eintrag nicht in den Button-Bereich hineinragt, bevor gescrollt werden muss.</li>
|
||
<li>Stoppuhr-Liste ebenfalls dynamisiert: Die Anzahl sichtbarer Zeiten wird jetzt direkt aus der verfügbaren Meter-Höhe berechnet und reagiert sauberer auf unterschiedlich große Browserfenster.</li>
|
||
<li>Stoppuhr-Layout bei kleiner Höhe geglättet: Die unteren Start-/Reset-/Auto-Buttons schrumpfen bei knapper Höhe mit, damit die Liste beim Verkleinern nicht mehr schlagartig verschwindet.</li>
|
||
<li>Phoenix-Metrics-Stream robuster gemacht: Bei kurzzeitigem Rückstau werden verpasste Frames jetzt verworfen, ohne den WebSocket sofort zu beenden; zusätzlich wurde der interne Metrics-Puffer vergrößert.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.3.1 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 20.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Layout- und Preset-System weiter ausgebaut: Presets wurden im Optionen-Menü auf eine eigene Ebene gehoben und die Layout-Slots lassen sich zusätzlich direkt aktivieren.</li>
|
||
<li>Layout-Boot per URL stabilisiert: Toolbar, aktiver View und geladene Ansicht bleiben bei <code>?layout=1</code> und den übrigen Layout-Slots jetzt konsistenter synchron.</li>
|
||
<li>Layout-Speicherung korrigiert: Die Slot-Belegungen der Views werden beim Speichern eines Layout-Slots jetzt zuverlässig mitgesichert und beim Laden wiederhergestellt.</li>
|
||
<li>INFO: Ein zwischenzeitlich beobachtetes externes Start-/WebSocket-Problem in älteren Safari-Versionen lag nicht an Phoenix selbst, sondern an einem Safari-/WebKit-Bug; nach einem Safari-Update funktionierte der Analyzer wieder normal.</li>
|
||
<li>Weitere Anzeigeoptionen globalisiert: RTA-Oktaven, Peak-History-Optionen, Phase-Wheel-Optionen, Classic-Needles-Quelle, historische RTW-Loudness sowie die konfigurierbaren Farben laufen nun browserübergreifend über die globale Phoenix-Konfiguration.</li>
|
||
<li>Quad-/Registry-Pfad korrigiert: Peak History bleibt auch im Quad-View mit gültigen Live-Daten versorgt und fällt dort nicht mehr scheinbar auf 0 zurück.</li>
|
||
<li>Online-Update ergänzt: Phoenix kann eine feste Update-ZIP laden, in einen Stage-Ordner vorbereiten und beim Neustart mit Backup, Health-Check und automatischem Rollback auf den alten Stand umschalten.</li>
|
||
<li>Online-Update weiter gehärtet: Vor dem Neustart der Kiosk-Browser werden nur die Asset-Caches geleert, damit nach einem Update zuverlässig der neue Web-Stand geladen wird, ohne die eigentlichen Einstellungen zu verlieren.</li>
|
||
<li>Online-Update-Logging ergänzt: Download-, Entpack-, Stage-, Neustart- und Rollback-Schritte werden jetzt in eine gemeinsame Update-Logdatei geschrieben und können zusätzlich über einen Phoenix-Endpunkt direkt abgefragt werden.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.3 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 20.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Software-Presets weiter ausgebaut: Default, Claus und Michael lassen sich jetzt robuster speichern, laden, exportieren und importieren.</li>
|
||
<li>Preset-Speicherung bleibt aus Sicherheitsgründen auf den Analyzer direkt beschränkt; externe Browser dürfen Presets laden, aber nicht überschreiben.</li>
|
||
<li>Phoenix-URL-/Host-Pfad für Presets gehärtet: Wenn eine gespeicherte Loopback-URL für den aktuellen Browser nicht passt, wird sauber auf den aktuellen Analyzer-Host zurückgefallen.</li>
|
||
<li>Preset-Ladepfad stabilisiert: Benutzer-Presets übernehmen jetzt auch den getrennt gehaltenen UI-/View-Zustand zuverlässiger und laden nach Profil-/Cache-Reset wieder nachvollziehbar.</li>
|
||
<li>Neue Layout-Slots ergänzt: Vier separate Layout-Presets speichern reine Ansichts-/Fensterbelegungen, unabhängig von globalen Software-Presets.</li>
|
||
<li>Layout-Slots werden außerhalb des Browser-Profils serverseitig gespeichert und können per URL-Parameter wie <code>?layout=1</code> direkt in einem Fenster geladen werden.</li>
|
||
<li>Options-Menü neu geordnet: Unter <code>Meters → Presets</code> liegen jetzt sowohl die Software-Presets als auch die neuen Layout-Slots gebündelt an einer Stelle.</li>
|
||
<li>Erststart-Dialog überarbeitet: statt des alten Kalibrierhinweises erscheint nun eine neutrale Willkommensmeldung zum Phoenix Analyzer.</li>
|
||
<li>Header-Farbpfad vereinheitlicht: Header-Text/-Zahlen entkoppelt von Balkenfarben und zusätzlich über eine globale Header-Textfarbe einstellbar.</li>
|
||
<li>Waveform-Farben reagieren jetzt wieder korrekt auf Änderungen in den Optionen, auch im Worker-Pfad.</li>
|
||
<li>Split-/Quad-Views erweitert: Waveform und Spectrogram können dort als Plot verwendet werden; eingebettete Geometrie und Darstellung wurden dafür nachgezogen.</li>
|
||
<li>Weitere UI-/Detailkorrekturen: Peak-History-Geometrie, RTA-/Meter-Beschriftungen, PPM-DIN-%-Skala, Recorder-/Stoppuhr-Header sowie diverse kleinere Konsistenzfehler wurden bereinigt.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.1 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 18.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>GUI-Performance systematisch überarbeitet: statische Layer werden projektweit gecacht statt pro Frame neu gezeichnet.</li>
|
||
<li>Renderloop bereinigt: Hintergrund-Layer gecacht und Zeichenpfad stärker auf echte Audio-/UI-Änderungen ausgerichtet.</li>
|
||
<li>Spectrogram deutlich entlastet: Phoenix liefert Spectro-Spalten nur noch bei echten neuen FFT-Schritten, Worker-Takt reduziert und interne Renderauflösung angepasst.</li>
|
||
<li>Waveform deutlich entlastet: Worker-Takt reduziert, interne Renderauflösung angepasst und Grid-Layer gecacht.</li>
|
||
<li>Peak History deutlich entlastet: Grid, Rahmen und Zeit-/Werteskalen werden gecacht; Verlauf und Live-Meter bleiben dynamisch.</li>
|
||
<li>Peak History in der Geometrie nachkorrigiert: `now` rechts sichtbar, linke Endzeit wird explizit gesetzt, Füllung läuft bis zum unteren Rahmen, Verlauf kann unter den letzten Tick weiterlaufen und der Plot beginnt links ohne künstliche Rahmenlücke.</li>
|
||
<li>Meter-Views weiter entschlackt: feste Skalen, Ticks, Referenzlinien und Labels von VU, PPM DIN, PPM EBU, RMS, TP und LUFS werden nicht mehr jedes Frame neu gerastert.</li>
|
||
<li>Phase Wheel entlastet: tote Trace-Berechnung entfernt und Phase-Trail intern ausgedünnt.</li>
|
||
<li>Goniometer/XY weiter bereinigt: RTW-Look beibehalten, Alpha-/Trail-Dichte entschlackt und echte XY-History in Phoenix so angepasst, dass `XY Punkte` wieder sinnvoll wirkt.</li>
|
||
<li>Split- und Quad-View bereinigt: statische Containerteile, leere Plots und Meterhüllen werden gecacht statt pro Frame neu aufgebaut.</li>
|
||
<li>Recorder- und Classic-Needles-View weiter entschlackt: statische Bühnen, Rahmen und Instrumentenkörper gecacht; beim Recorder zusätzlich unnötige HUD-Layout-Schreiberei reduziert.</li>
|
||
<li>RTA/Realtime entlastet: Plot-Grid, Rahmen und rechte Meterhülle werden gecacht, während Balken/Line und Hold/Peak live bleiben.</li>
|
||
<li>Projektweit weiterer Cleanup: tote Frontend-Restlogik entfernt, Referenz-Configs für Analyzer/Volumio ergänzt und Doku zu Analyzer-vs.-Volumio-Pfaden/Ports nachgezogen.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.0.1 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 18.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>PPM/VU/RMS-Alignment korrigiert: PPM DIN, PPM EBU, VU und RMS liegen bei den vorgesehenen Referenzpegeln wieder konsistent zueinander.</li>
|
||
<li>RTW-Loudness-Boxen auf dokumentierbaren Momentary-Pfad umgestellt: 400 ms Integration, K-gewichtete Signalbasis, pro Kanal; keine freie ungefilterte Hauskurve mehr.</li>
|
||
<li>RTW-Loudness-Offset global gemacht: Der Offset wird jetzt in Phoenix gespeichert und zwischen verbundenen Browsern synchron gehalten.</li>
|
||
<li>RTW-Oktavwahl lokalisiert: Die sichtbare RTW-Auflösung 1/3, 1/6 und 1/12 ist jetzt browserlokal und schaltet andere Sessions nicht mehr um.</li>
|
||
<li>Fehler in der lokalen 1/6-Oktavdarstellung behoben: Center-Frequenzen und Bandwerte laufen wieder sauber synchron.</li>
|
||
<li>Goniometer weiter auf klassische RTW-Anmutung geschärft: dichtere Spur, dickere Linien, geglättete Kurven; dieser Stil ist jetzt fest der Standard.</li>
|
||
<li>Volumio-/Raspberry-Pi-Startpfad robuster gemacht: Toolchain-, Netzwerk-, Build- und Session-Handling wurden für frische Geräte und getrennte Volumio-Services nachgezogen.</li>
|
||
<li>Build-Kompatibilität für ältere Zielsysteme nachgezogen: Lockfile-/Toolchain-Themen, ALSA-/pkg-config-Abhängigkeiten und plattformspezifische ALSA-Frame-Typen abgefangen.</li>
|
||
<li>Volumio-Pfad weiter bereinigt: Analyzer-GUI läuft dort getrennt auf eigenem Port, `toggle-ext` liegt im Phoenix-Baum und der Tab-Umschalter zeigt wieder auf die richtigen Ziele.</li>
|
||
<li>Projektlayout weiter bereinigt: `toggle-ext` und die Volumio-spezifischen Startdateien liegen jetzt konsistent im Phoenix-Baum.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>3.0 (Phoenix 1.0)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 18.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Kompletter Architektur-Umbau: Der Analyzer läuft jetzt nativ auf Phoenix statt auf WebAudio/AudioWorklet im Browser.</li>
|
||
<li>Phoenix ist neue Single Source of Truth für Audio, Analyse und globale Gerätekonfiguration; die Web-GUI dient nur noch als Anzeige- und Bedienoberfläche.</li>
|
||
<li>Audio-Pfad vollständig in Rust/ALSA verlagert: Browser greift nicht mehr selbst auf Audio-Hardware zu.</li>
|
||
<li>Analysepfade nach Phoenix übertragen: Meter, RMS, VU, PPM DIN/EBU, True Peak, LUFS/LRA, RTW-Loudness-Boxen, RTA, Spectrogram, Waveform, XY und Phase Wheel werden jetzt nativ im Backend erzeugt.</li>
|
||
<li>Recorder komplett auf Phoenix umgestellt: native Aufnahme in WAV, MP3 und WebM/Opus ohne Browser-Chunking oder nachträgliches Zusammensetzen im Frontend.</li>
|
||
<li>Direktes Speichern über Phoenix ergänzt: Aufnahmen können ohne Chrome-Download direkt auf dem Gerät im Dateisystem abgelegt werden.</li>
|
||
<li>Globale Optionen in Phoenix verankert: geräterelevante Parameter wie Kalibrierung, LUFS-/PPM-Verhalten, Recorder-Defaults und Screensaver-Verhalten werden zentral gespeichert und an verbundene Browser synchronisiert.</li>
|
||
<li>Waveform- und XY-Datenpfad auf native Phoenix-Frames umgestellt; Browser verarbeitet keine eigenen Audio-Samples mehr.</li>
|
||
<li>Normnähe der Messpfade überarbeitet: True Peak, LUFS, VU sowie mehrere Ballistik- und Bewertungswege rechnerisch an die relevanten Standards angenähert.</li>
|
||
<li>Komplette Bereinigung des alten WebAudio-Stacks: Browser-Recorder, MediaRecorder-/Chunk-Logik, AudioWorklet-Altpfade und nicht mehr benötigte Umschaltlogik wurden entfernt.</li>
|
||
<li>Deployment/Boot für Raspberry Pi neu strukturiert: separater Webservice, Kiosk-Startskripte, automatischer Phoenix-Build bei Quellcode-Änderungen sowie Build-Logging beim Start.</li>
|
||
<li>Projektstruktur auf Phoenix konsolidiert: Runtime-Skripte, `www` und systemd-Units liegen jetzt gemeinsam unter dem Phoenix-Baum.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.9</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 09.04.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Recorder: Auto-Split-Threshold jetzt als gekoppelte Zahlenfelder in dBFS und PPM DIN einstellbar.</li>
|
||
<li>Stoppuhr: Auto-Threshold jetzt ebenfalls als gekoppelte Zahlenfelder in dBFS und PPM DIN einstellbar.</li>
|
||
<li>Optionen: Zusätzlichen Scroll-Puffer im Optionen-Menü ergänzt, damit untere Eingabefelder trotz On-Screen-Tastatur weiter nach oben gezogen werden können.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.8 (HOTFIX)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.03.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Audio/Timing: Zusätzlichen Display-/Interpolationspuffer entfernt; Anzeigen werden wieder direkt aus dem AudioWorklet gespeist.</li>
|
||
<li>Low Latency: Worklet-UI-Intervall auf 8 ms reduziert und Renderpfad auf 60 FPS gestellt.</li>
|
||
<li>Performance: Audio- und Analysepfade berechnen nur noch, was im aktuellen View und in den sichtbaren Slots wirklich benötigt wird.</li>
|
||
<li>Cold Start: XY-, RTA-, Waveform- und Meter-Zustände werden beim Umschalten sauber zurückgesetzt, damit keine alten Daten kurz wieder auftauchen.</li>
|
||
<li>Performance: FFT- sowie LUFS-/Box-Analyser laufen nur noch bei tatsächlichem Sichtbarkeitsbedarf.</li>
|
||
<li>RTA: Neue Option für die Balken-Grundfarbe; Peak-Bereiche bleiben weiterhin rot.</li>
|
||
<li>RTA: „Real Time Hold“ und „Real Time Decay“ wirken jetzt tatsächlich auf die Balkenanzeige; höherer Decay lässt die Balken schneller zurückfallen.</li>
|
||
<li>UI: Zahlenfelder committen jetzt sauber per Change/Blur/Enter; Eingaben über On-Screen-Keyboard und VNC springen nicht mehr vorzeitig auf Min-/Max-Werte.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.5</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 22.03.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Fix: Classic Needles im Quad-View werden nun korrekt angezeigt.</li>
|
||
<li>Audio/Timing: Umstellung auf Audio-Zeitstempel und frame-synchron berechnete Display-Pakete zur Glättung der Anzeige und Reduktion von Drift/Jitter.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.3.7</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 04.02.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Fix: Audio-Pfad bleibt zuverlässig aktiv und verhindert „Stall“ nach langem Idle/Screensaver.</li>
|
||
<li>Fix: Auto-Recovery bei „Audio lost“ nach Screensaver-Wake und User-Activity.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.3.6</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 04.02.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Fix: Loudness/LUFS – rechter Kanal korrekt normalisiert.</li>
|
||
<li>Optimierung: LRA/Loudness ohne wiederholte Array-Allokationen (Ringpuffer + Scratch-Buffer) für weniger GC/CPU-Spikes.</li>
|
||
<li>Fix: Config-Load ist jetzt idempotent (verhindert doppeltes Laden beim Start/Options-Init).</li>
|
||
<li>PPM DIN: Peak-Hold implementiert (rein visuell), steuerbar über PPM_DIN_HOLD_MS und PPM_DIN_HOLD_DECAY_DB_PER_S.</li>
|
||
<li>Peak History: Historie als Ringpuffer statt copyWithin-Shift (weniger CPU, stabilere Darstellung).</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.3.4</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 04.03.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>PPM DIN: Neue Option „Fast‑Attack“ (sofortes Anlaufen, nicht normgerecht) inkl. Hinweis‑Popup beim Aktivieren; Ballistik wird live aktualisiert.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.3.2</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 02.02.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Peak History: Nach dem Beenden des Bildschirmschoners wird die History nicht mehr in einem Frame mit einem Wert „aufgefüllt“ (kein Backfill nach Pause); nutzt nur frische Audiodaten.</li>
|
||
<li>XY / Korrelation: Neue Option „Sofortige Nullstellung wenn kein Pegel“ (setzt den Würfel bei Stille sofort auf 0, ohne Hold/Drift).</li>
|
||
<li>Stoppuhr (Slot‑Meter): Fix für Canvas‑State/Font‑Leak, der nach Aktivierung die Skalen‑Schrift in anderen Views riesig gemacht hat.</li>
|
||
<li>Audio/Timing: Anzeige-Update-Intervall reduziert und an die effektive Render‑FPS gekoppelt (verringert Jitter/Drift, verhindert Message‑Backlogs).</li>
|
||
<li>Default: FFT_SIZE auf 4096 reduziert (weniger CPU; betrifft v.a. Spectrogram/LUFS/FFT‑RTA).</li>
|
||
<li>Performance: Keine FFT‑Berechnung mehr, wenn kein Spectrogram aktiv ist und der Real Time Analyzer auf IIR läuft.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.3.1</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 30.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>XY / Korrelation: Nach dem Beenden des Bildschirmschoners wird die Anzeige sauber zurückgesetzt und nur mit frischen Audiodaten berechnet (kein Sprung auf +1 ohne Signal).</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.3</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 26.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Quad‑View: Klick‑Verhalten wählbar (direkt wechseln oder Popup‑Ansicht).</li>
|
||
<li>Quad‑View: Popup‑Ansicht rendert exakt wie die Einzel‑View (Layout/Skalen identisch); Tap/ESC schließt.</li>
|
||
<li>Split‑View: Klick‑Verhalten wählbar (direkt wechseln oder Popup‑Ansicht).</li>
|
||
<li>Split‑View: Popup‑Ansicht rendert exakt wie die Einzel‑View; Tap/ESC schließt.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.1</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 26.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Split‑View: kompaktere HUD‑Bedienung (schmalere Plot‑Dropdowns, Trennzeichen „|“).</li>
|
||
<li>Split‑View: Slot‑Zuordnung über Button + Popup (zeigt nur aktive Slots).</li>
|
||
<li>Split‑View: Popup schließt per Klick außerhalb oder ESC.</li>
|
||
<li>Split‑View: „Slot:“ wird nur angezeigt, wenn mindestens ein Slot aktiv ist.</li>
|
||
<li>Neu: Quad‑View (4 unabhängige Plots im 2×2‑Raster).</li>
|
||
<li>Quad‑View: Plot‑Auswahl über Popup; eigene Slot‑Konfiguration (unabhängig vom Split‑View).</li>
|
||
<li>Phase Wheel: Phase‑Box im Split‑View korrekt positioniert (stabil am Plot‑Panel, mit Abstand; Box kleiner).</li>
|
||
<li>Bildschirmschoner: Recorder‑UI/Modals sowie Slot‑Popup werden zuverlässig ausgeblendet.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>2.0</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 22.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Neu: Split‑View (zwei Plots nebeneinander, Links/Rechts wählbar).</li>
|
||
<li>Split‑View: optionale Meter‑Slots (0–3) mit frei wählbarer Position (links/mitte/rechts).</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.8</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 17.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>LUFS (Integrated): I‑Zeitfenster wird korrekt gespeichert und angewendet.</li>
|
||
<li>LUFS (Integrated): I bleibt bei Stille (unter −70 LUFS Gate) stehen und fällt nicht weiter ab.</li>
|
||
<li>Phasenrad: Zahlenanzeige folgt dem Zeiger besser (ruhiger, ohne Nachkommastelle).</li>
|
||
<li>Neu: Stoppuhr als auswählbarer Slot (Start/Stop/Reset/Auto, optional 7‑Segment‑Anzeige).</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.7.8</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 16.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>LUFS (Integrated): Zeitfenster per Slider (1–10 min) einstellbar.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.7.7</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 09.01.2026</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Input-Offset: kanalgetrennte Einstellung (L/R).</li>
|
||
<li>LUFS: Lesbarkeit der Skala angepasst.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.7.5</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 31.12.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Phase Wheel: Phasenrad gespiegelt (z. B. +90° liegt rechts).</li>
|
||
<li>PPM DIN: Ballistik im eigenen AudioWorklet; Anzeige/Ballistik nach IEC 60268-10 Type I (DIN) korrigiert.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.7.3</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 29.12.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Neuerungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>LUFS: Skalen-Zahlen & Skalen-Striche in eigener Farbe einstellbar.</li>
|
||
<li>Phase Wheel: Phasenanzeige (Box links oben) größer und weiter links; Zahl zusätzlich geglättet und Update-Rate begrenzt (max. 10×/s) für bessere Lesbarkeit.</li>
|
||
<li>PPM DIN: RTW-Loudness-Offset als Schieberegler (−7 … +7 dB).</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.7 (Auslieferungsversion)</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 21.12.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Neuerungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Slots können auf „(leer)“ gesetzt werden: der Slot wird ausgeblendet und die verbleibenden Anzeigen rücken nach (z. B. nutzt der Real Time Analyzer dann die volle Breite).</li>
|
||
<li>Peak History und Classic Needles benötigen einen belegten Slot; dort ist „(leer)“ deaktiviert.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.6</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 19.12.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Neuerungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Neuer View: „Classic Needles“.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.5.5</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 08.12.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Neuerungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Silence-Gate für Goniometer & Korrelation (RMS-basiert, Threshold einstellbar im XY-Menü).</li>
|
||
<li>Header-Werte pro Kanal: sauber zentriert über den Balken, Farbumschlag pro Kanal erst ab Rot-Schwelle.</li>
|
||
<li>Anzeige der vollen Pegel (auch unterhalb der Skala) mit sanfter Glättung der Zahlen.</li>
|
||
<li>RMS-Meter: hält jetzt den letzten gültigen Wert, kein kurzer Drop mehr auf den Floor bei sporadisch fehlenden RMS-Paketen.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px" open>
|
||
<summary>1.5</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 05.12.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Peak History – Neu hinzugefügt:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Neuer „Peak History“-View: verlaufende Pegelanzeige mit Meter rechts daneben.</li>
|
||
<li>Konfigurierbare Scroll-Geschwindigkeit (½×, 1×, 2×, 4×, 6×) wie beim Spectrogram.</li>
|
||
<li>Farbgenaue Linie: Rot erst ab Warnschwelle (z. B. PPM_DIN_RED_START), Segment-Splitting genau auf der Schwelle.</li>
|
||
<li>Optionale Flächenfüllung unter/über der Linie in Linienfarbe; invertierbar.</li>
|
||
<li>Zeitskala passt sich der Scroll-Geschwindigkeit an (länger bei ½×, kürzer bei 2×/4×/6×).</li>
|
||
<li>Peak-History-Optionen im Menü: Scroll-Speed, Fläche füllen, Fläche invertieren.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.2</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 28.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Studio Clock: neue Stile „Analog + PPM“ und „Digital + PPM“; optional LED-Band für PPM.</li>
|
||
<li>PPM in der Clock nutzt DIN-Skala, Offsets und Ballistik identisch zum PPM-DIN-Meter.</li>
|
||
<li>PPM-Skalenfarben vereinheitlicht (DIN-Orange), Warnfarbe nur oberhalb 0 dB.</li>
|
||
<li>Neue Uhr-Funktion: Studio Clock mit Stilen „Analog“, „Digital“, „Analog + PPM“, „Digital + PPM“, optional LED-Band.</li>
|
||
<li>Neuer Bildschirmschoner: DVD/Starfield/Clock, Vorschau ignoriert Pegel (endet nur per Klick/Touch), Optionen gebündelt.</li>
|
||
<li>Clock- und Screensaver-Optionen sind unabhängig im Menü steuerbar.</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1.4.1</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 26.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Goniometer-Korrelationswürfel: Clamping angepasst (bleibt sauber innerhalb des Balkens)</li>
|
||
<li>PPM DIN: Skala renormiert (Bottom sitzt am Balkenfuß), %-Label korrigiert</li>
|
||
<li>PPM DIN: Loudness-Boxen verlängerte Skala (bis −70 dB), sichtbarer Teil nur oberhalb −50 dB</li>
|
||
<li>Input-Offset: Slider auf 0,5-dB-Schritte gestellt</li>
|
||
<li>Recorder: Einmaliger Hinweis/Bestätigung bei Erstaufruf (WAV-Limit, WebM/Opus-Hinweis, Beta)</li>
|
||
<li>LUFS: Farben pro I/M/S separat einstellbar</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1.4</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>XY-Optionen wiederhergestellt und zugeordnet (Punkte/Stil/Korrelation/Gain/Fade/Gap)</li>
|
||
<li>XY Default-Punkte auf 1024 gesetzt; Hinweise ergänzt</li>
|
||
<li>Spectrogram/Waveform/Phase Wheel: Beschreibungen ergänzt</li>
|
||
<li>Spectrogram: Worker stabilisiert (Ringpuffer, Draw-Loop-Fix)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1.3.2</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Fix: Spectrogram-Worker stabilisiert (kein Stoppen nach wenigen Sekunden)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1.3.1</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Fix: RTW-Loudness-Boxen im PPM DIN Meter (fehlendes Timestamp-Init behoben)</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1.3</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Optionen-Überschrift umbenannt & unterstrichen</li>
|
||
<li>RMS: IEC-Zeitkonstanten (Impulse/Fast/Slow) auswählbar, EWMA entfernt</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1.2</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Einführung: Changelog im Optionen-Menü</li>
|
||
<li>Korrektur: PPM DIN & PPM EBU ohne doppelte Ballistik (UI-Glättung entfernt)</li>
|
||
<li>Korrektur: RMS-Anzeige ohne zusätzliche Glättung</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.1</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Veröffentlichung: 25.11.2025</p>
|
||
<p style="margin:4px 0 0 12px; color:#8fd3d4;">Änderungen:</p>
|
||
<ul style="margin:2px 0 0 24px; color:#b2c7d9;">
|
||
<li>Hinzugefügt: RTW-Style Loudnessanzeige auf PPM DIN Meter</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
<details style="margin-left:12px">
|
||
<summary>1.0</summary>
|
||
<div class="opt-group">
|
||
<div class="opt">
|
||
<p style="margin:0; color:#8fd3d4;">Erste Veröffentlichung: 21.11.2025</p>
|
||
</div>
|
||
</div>
|
||
</details>
|
||
</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="ppmDinFastWarn" class="rec-warning" style="display:none">
|
||
<div class="rec-warning-box">
|
||
<h3>PPM DIN – Fast‑Attack</h3>
|
||
<p>Dieser Sample-Peak-Sondermodus lässt das PPM DIN sofort ansteigen (ohne 10-ms-Normintegration).</p>
|
||
<p>Dadurch kann die Anzeige „schneller“ wirken, ist aber <b>nicht mehr normgerecht</b> (DIN 45406 / IEC 60268‑10).</p>
|
||
<p>Hinweis: Das ändert nur die Anzeige‑Ballistik und kompensiert keine echte Audio‑Latenz.</p>
|
||
<button id="ppmDinFastWarnBtn" class="btn btn-lg" type="button">Verstanden</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>
|