Files
Adminator 1e51ef7def Nachtrag: alle bisher untracked Ordner + hängende Änderungen mit-committen
- Konzept/, didaktik_geografie/, didaktik_simulation/, v2-modules/, v2-platform/
- 12 code-workspace-Files
- STATUS-*.md
- viele M/D/R-Änderungen an bereits getrackten Files
- .gitignore verstärkt: **/.humaninput/, **/secret_keys.txt

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-08 02:27:02 +02:00

57 lines
2.3 KiB
HTML

<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<title>Stimm-Probe</title>
<style>
body { font-family: system-ui, sans-serif; max-width: 640px; margin: 40px auto; padding: 0 20px; background:#f5efe0; color:#1f2a24; }
h1 { font-size: 20px; color:#2d5434; }
.row { margin: 20px 0; padding:16px; background:#fff; border-radius:8px; box-shadow:0 2px 8px rgba(0,0,0,.06); }
.row h2 { margin:0 0 8px; font-size:14px; color:#3d5165; }
.row audio { width:100%; }
button { padding:10px 16px; border:none; border-radius:6px; background:#2d5434; color:#fff; cursor:pointer; margin-right:8px; font-weight:600; }
button:hover { background:#3d6a44; }
small { color:#3d5165; }
</style>
</head>
<body>
<h1>Stimm-Probe · OpenAI Nova, Speed 1.12</h1>
<div class="row">
<h2>1. Direkt (ohne Funk-Effekt)</h2>
<audio id="audRaw" controls></audio>
<script>document.getElementById('audRaw').src = 'sounds/radio/_probe_nova.mp3?v=' + Date.now();</script>
</div>
<div class="row">
<h2>2. Mit Funk-Effekt (wie im Spiel)</h2>
<button id="playFilt">Funk-Variante abspielen</button>
<button id="stopFilt">Stop</button>
<br><small>Bandpass ~1800&nbsp;Hz + leichte Distortion</small>
</div>
<script>
const audioCtx = new (window.AudioContext || window.webkitAudioContext)();
let src = null, gain = null;
async function playFiltered() {
if (audioCtx.state === 'suspended') await audioCtx.resume();
if (src) { try { src.stop(); } catch(e){} src = null; }
const buf = await (await fetch('sounds/radio/_probe_nova.mp3?v=' + Date.now())).arrayBuffer();
const audioBuf = await audioCtx.decodeAudioData(buf);
src = audioCtx.createBufferSource(); src.buffer = audioBuf;
const bp = audioCtx.createBiquadFilter();
bp.type = 'bandpass'; bp.frequency.value = 1800; bp.Q.value = 3;
const dist = audioCtx.createWaveShaper();
const curve = new Float32Array(256);
for (let i=0;i<256;i++){const x=(i/128)-1;curve[i]=Math.sign(x)*Math.pow(Math.abs(x),0.6);}
dist.curve = curve;
gain = audioCtx.createGain(); gain.gain.value = 2.8;
src.connect(bp); bp.connect(dist); dist.connect(gain); gain.connect(audioCtx.destination);
src.start(0);
}
document.getElementById('playFilt').addEventListener('click', playFiltered);
document.getElementById('stopFilt').addEventListener('click', () => { if (src) { try { src.stop(); } catch(e){} src = null; } });
</script>
</body>
</html>