mirror of
https://github.com/Kpa-clawbot/meshcore-analyzer.git
synced 2026-06-06 01:23:17 +00:00
65 lines
4.4 KiB
Markdown
65 lines
4.4 KiB
Markdown
# v2.6.0 — Audio Sonification, Regional Hop Filtering, Audio Lab
|
|
|
|
## 🔊 Mesh Audio Sonification
|
|
|
|
Packets now have sound. Each packet's raw bytes become music through a modular voice engine.
|
|
|
|
- **Payload type → instrument + scale**: ADVERTs play triangle waves on C major pentatonic, GRP_TXT uses sine on A minor pentatonic, TXT_MSG on E natural minor, TRACE on D whole tone
|
|
- **Payload bytes → melody**: √(payload_length) bytes sampled evenly, quantized to scale
|
|
- **Byte value → note duration**: low bytes = staccato, high = sustained
|
|
- **Byte delta → note spacing**: small deltas = rapid fire, large = pauses
|
|
- **Observation count → volume + chord voicing**: more observers = louder + richer (up to 8 detuned voices via log₂ scaling)
|
|
- **Hop count → filter cutoff**: more hops = more muffled (lowpass 800-8000Hz)
|
|
- **Node longitude → stereo pan**
|
|
- **BPM tempo slider** for ambient ↔ techno feel
|
|
- **Per-packet limiter** prevents amplitude spikes from overlapping notes
|
|
- **Exponential envelopes** eliminate click/pop artifacts
|
|
- **"Tap to enable audio" overlay** handles browser autoplay policy
|
|
- **Modular voice architecture**: engine (`audio.js`) + swappable voice modules. New voices = new file + script tag.
|
|
|
|
## 🎵 Audio Lab (Packet Jukebox)
|
|
|
|
New `#/audio-lab` page for understanding and debugging the audio:
|
|
|
|
- **Packet buckets by type** — representative packets spanning size/observation ranges
|
|
- **Play/Loop/Speed controls** — trigger individual packets, 0.25x to 4x speed
|
|
- **Sound Mapping panel** — shows WHY each parameter has its value (formulas + computed results)
|
|
- **Note Sequence table** — every sampled byte → MIDI note → frequency → duration → gap, with derivation formulas
|
|
- **Real-time playback highlighting** — hex dump, note rows, and byte visualizer highlight in sync as each note plays
|
|
- **Click individual notes** — play any single note from the sequence
|
|
- **Byte Visualizer** — bar chart of payload bytes, sampled bytes colored by type
|
|
|
|
## 🗺️ Regional Hop Filtering (#117)
|
|
|
|
1-byte repeater IDs (0-255) collide globally. Previously, resolve-hops picked candidates from anywhere, causing false cross-regional paths (e.g., Eugene packet showing Vancouver repeaters).
|
|
|
|
- **Layered filtering**: GPS distance to IATA center (bridge-proof) → observer-based fallback → global fallback
|
|
- **60+ IATA airport coordinates** built in for geographic distance calculations
|
|
- **Regional candidates sorted by distance** — closest to region center wins when no sender GPS available
|
|
- **Sender GPS as origin anchor** — ADVERTs use their own coordinates; channel messages look up sender node GPS from previous ADVERTs in the database
|
|
- **Per-observer resolution** — packet list batch-resolves ambiguous hops per observer via server API
|
|
- **Conflict popover** — clickable ⚠ badges show all regional candidates with distances, each linking to node detail
|
|
- **Shared HopDisplay module** — consistent conflict display across packets, nodes, and detail views
|
|
|
|
## 🏷️ Region Dropdown Improvements (#116)
|
|
|
|
- **150+ built-in IATA-to-city mappings** — dropdown shows `SEA - Seattle, WA` automatically, no config needed
|
|
- **Layout fixes** — dropdown auto-sizes for longer labels, checkbox alignment, ellipsis overflow
|
|
|
|
## 📍 Location & Navigation
|
|
|
|
- **Packet detail shows location** for ADVERTs (direct GPS), channel texts (sender node lookup), and all resolvable senders
|
|
- **📍 Map link** navigates to `#/map?node=PUBKEY` — centers on the actual node and opens its popup
|
|
- **Observer IATA regions** shown in packet detail, node detail, and live map node panels
|
|
|
|
## 🔧 Fixes
|
|
|
|
- **Realistic mode fixed** — secondary WS broadcast paths (ADVERT, GRP_TXT, TXT_MSG, TRACE) were missing `hash` field, bypassing the 5-second grouping buffer entirely
|
|
- **Observation count passed to sonification** — realistic mode now provides actual observer count for volume/chord voicing
|
|
- **Packet list dedup** — O(1) hash index via Map prevents duplicate rows
|
|
- **Observer names in packet detail** — direct navigation to `#/packets/HASH` now loads observers first
|
|
- **Observer detail packet links** — fixed to use hash (not ID) and correct route
|
|
- **Time window bypassed for direct links** — `#/packets/HASH` always shows the packet regardless of time filter
|
|
- **CI: `docker rm -f`** — prevents stale container conflicts during deploy
|
|
- **CI: `paths-ignore`** — skips deploy on markdown/docs/license changes
|