eeuz prd Phonetic Pronunciation Data - krcenov/RNS510-Map-Viewer GitHub Wiki

eeuz.prd β€” Phonetic Pronunciation Data

Status: βœ… Cracked Β· 279 MB compressed / 572 MB decompressed Β· FLAT_COMPRESSED (see container format) Β· Record format and all 3 per-record fields validated at full file scale β€” the last 2 fields cracked in a later session via eeu.mod's own schema.

A phonetic pronunciation catalog for road names β€” presumably feeding the same text-to-speech engine eeuz.pca's phoneme catalog serves for voice guidance. This file's content had never been examined before the session that cracked the record framing β€” only its FLAT_COMPRESSED container was known.

Record format

94-byte header, then self-delimiting variable-length records back-to-back:

uint8    name_len
bytes    name          -- name_len bytes, ASCII
uint8    phon_len
bytes    phon           -- phon_len bytes, ASCII
uint32 LE  roadID       -- eeu.rd record index (CRACKED, see below)
uint32 LE  minNumber    -- CRACKED (later session, see below)
uint32 LE  maxNumber    -- CRACKED (later session, see below)

Validated at FULL scale, not a sample: parsing the entire 572MB decompressed body this way consumes every byte with zero leftover bytes at EOF, producing exactly 11,960,527 well-formed records. A wrong record-format guess would almost certainly drift and crash or leave a large remainder well before reaching that much real data β€” about as strong a structural confirmation as a variable-length format can get without an explicit spec.

name β€” the natural-order full name

The full human-readable name, type word first, natural spoken order β€” e.g. "VIA LIDO AZZURRO". Unlike eeuz.prl's ;-demoted sort-key form (type word moved after the core name for alphabetical search), this is exactly how you'd want it spoken.

phon β€” the phonetic transcription

A custom, X-SAMPA-like phonetic alphabet: | separates syllables, " marks primary stress on the following syllable, % marks secondary stress. Confirmed genuinely linguistically correct across unrelated language families β€” strong evidence this is real phonetic data, not structured-looking noise:

Name Phonetic Why it's right
CONTRADA GUITGIA (Italian) kon|"tra|da "gwit|dZa dZ = the correct voiced postalveolar affricate for Italian soft "gi"
VIA MASSIMO D'AZEGLIO (Italian) "vi|a "mas|si|mo dad|"dzEL|Lo dz for the "z", E for the open-e, doubled L for the palatal "gli" /ʎ/
E75 (Norwegian) "e: s2|ti|"fem literally "E syttifem" ("E seventy-five") β€” genuine number-to-speech, not digit-by-digit playback
341 (Norwegian) "tre: ""h}n|dr@ %O f2|ti|"e:n "tre hundre og fΓΈrtiΓ©n" ("three hundred and forty-one")

roadID β€” cracked: the eeu.rd index

A direct eeu.rd record index. Validated on a 5,000-record random sample spanning the whole file: 100% are valid indices, and 100% of those have eeu.rd's own (type-word-free) name as an exact substring/suffix of this record's own name field.

Coverage: 5,981,409 / 8,809,081 (67.9%) of eeu.rd records have at least one .prd entry. Multiplicity: most roads get 1–3 entries (2 is the single most common count, 2,721,836 roads), tailing off sharply after that (max observed: 9, on 2 roads).

minNumber / maxNumber β€” cracked (later session): a real house-number address range

eeu.mod's own schema names this table phRoad with exactly these 2 field names right after roadID β€” immediately explaining why the two hypotheses tried in the original session (nearby-road index; same-name count) both failed: neither field was ever a pointer or a count.

Validated EXHAUSTIVELY, not sampled: minNumber <= maxNumber holds on every single one of the 11,960,527 records in the file, zero exceptions β€” about as strong a confirmation as a real min/max range invariant can get. 3,171,255 records (26.5%, matching the original session's own "f2==0 for 26.5% of records" finding exactly) have minNumber==maxNumber==0 β€” no house-number data for that road (plausible for piazzas, footpaths, and other non-addressed ways). Real, plausible examples: "VIA LIDO AZZURRO" β†’ 47-49 (a short street, small range); "VIA DEPOSITI" β†’ 1-95 (a longer street, wider range).

This also explains the original session's own "observed, not yet explained" finding that both fields are identical across every one of a road's own multiple .prd entries β€” a house-number range is a property of the road segment itself, not of any one phonetic-name variant.

A genuine cross-file curiosity, not a contradiction: eeuz.rl independently declares its own minNumber/maxNumber pair (packed, gated by a hasHouseNumbers flag), but that copy is ALWAYS ZERO on this disc β€” while eeuz.prd's own copy here IS populated with real data. Two different tables, sharing the schema's naming convention, populated independently and inconsistently at build time β€” not investigated further (would need a different region/market disc to check whether eeuz.rl's own range is ever populated there).

A real, useful side finding

Where a road has multiple .prd entries, a common (not universal) pattern is one bare-name entry plus one "<name>, <containing place>" entry β€” the same <place>, <parent place> convention eeu.cty uses. E.g. eeu.rd record 8 ("CRISTOFORO COLOMBO") has entries for plain "VIA CRISTOFORO COLOMBO" and for "VIA CRISTOFORO COLOMBO, LAMPEDUSA E LINOSA" β€” plausibly for disambiguating a common street name by speaking the containing city too (unconfirmed on hardware).

Reader code

research/prd_reader.py β€” iter_prd_records() (streams records from an already-decompressed buffer), rd_name_and_lonlat(). Full methodology and every validation number are in its module docstring.

⚠️ **GitHub.com Fallback** ⚠️