Routenvorschlaege: Schwierigkeit aus Distanz+Hoehenmetern + Yaro-Navi mit echtem Gebell

Schwierigkeit (Wunsch Rene): ORS elevation=true -> ascent; leicht <4km & <50hm,
mittel <=7km & <150hm, sonst anspruchsvoll (vorher NUR km — flache 6km galten
als 'anspruchsvoll'). ACHTUNG: elevation=true codiert die Polyline 3D —
eigener _decode_polyline3d (Roundtrip-getestet), Track enthaelt jetzt alt;
Hoehenmeter im Vorschlag als Pill ('X hm') + in der API (hoehenmeter).

Navi-Sounds: echtes Schaeferhund-Gebell (Renes Aufnahme zugeschnitten):
/sounds/wuff.mp3 (0,34s Einzel-Beller, 2x=links 1x=rechts) +
/sounds/klaeffen.mp3 (2,8s Sequenz, falscher Weg — spielt 1x statt 4x);
mono, loudnorm -14 LUFS, Fades. /sounds-Mount (main.py), SW-Precache
(bellt auch im Funkloch). Synthese bleibt Fallback.
pytest 39 passed. Bump v1243
This commit is contained in:
rene 2026-06-06 19:51:20 +02:00
parent 0967623342
commit 2042a3f513
10 changed files with 65 additions and 24 deletions

View file

@ -102,13 +102,16 @@ window.Page_routes = (() => {
function _barks(n, pitch, gap) {
if (!enabled()) return;
const sample = files && (pitch > 1.3 ? files.klaeffen : files.wuff);
if (sample) { // echte Aufnahme: n-mal hintereinander
if (sample) { // echte Aufnahme (Schäferhund, /sounds/*.mp3)
// klaeffen.mp3 ist bereits eine ~2,8-s-Bell-SEQUENZ → nur 1× abspielen;
// wuff.mp3 ist ein einzelner Beller → n-mal mit Pause.
const reps = sample === files.klaeffen ? 1 : n;
let i = 0;
const play = () => {
if (i++ >= n) return;
if (i++ >= reps) return;
sample.currentTime = 0;
sample.play().catch(() => {});
setTimeout(play, gap * 1000 + 200);
setTimeout(play, gap * 1000 + 350);
};
play();
return;
@ -672,6 +675,9 @@ window.Page_routes = (() => {
<span style="${_pillStyle('rgba(107,114,128,0.10)','#9ca3af','rgba(107,114,128,0.30)')}">
${UI.icon('timer')} ${UI.escape(durStr)}
</span>
${result.hoehenmeter != null ? `<span style="${_pillStyle('rgba(107,114,128,0.10)','#9ca3af','rgba(107,114,128,0.30)')}">
${UI.icon('trend-up')} ${result.hoehenmeter} hm
</span>` : ''}
${diffLabel ? `<span style="${_pillStyle(
{leicht:'rgba(22,163,74,0.10)',mittel:'rgba(234,179,8,0.10)',anspruchsvoll:'rgba(220,38,38,0.10)'}[result.schwierigkeit]||'rgba(107,114,128,0.10)',
{leicht:'#4ade80',mittel:'#facc15',anspruchsvoll:'#f87171'}[result.schwierigkeit]||'#9ca3af',