Operational Audio
PagePoint Audio Standard V1
Deterministic, lossless audio assets and one shared stored-message playback path.
Approved Format
- WAV container
- Linear PCM
- 16,000 Hz
- 16-bit
- Mono
Playback Policy
Stored zone message: CHIME -> ZONE ID -> MESSAGE
Stored All Call: CHIME -> LP_ALL -> MESSAGE
Live page: CHIME -> LIVE MICROPHONE. Live pages do not play a spoken zone-identification file.
Sequence-generated messages: use the exact same stored-message path as manual stored messages.
Approved Operational Files
Msg1_EN.wavthroughMsg6_EN.wavLP_A.wavLP_B.wavLP_C.wavLP_D.wavLP_ALL.wav
Deployment Record
Activated on 2026-07-16 after structural validation, checksum verification, backup, service recovery, and four-zone simultaneous playback testing. Rollback bundle: /home/paul/ppoe-backups/messages-pre-audio-standard-v1-20260716T180152Z.
Duration Cache Standard
Stored-message playback must not perform synchronous duration probing in the command path. Required chime, zone-ID, and message assets are validated once at service startup; the cache is authoritative for durations used by playMessage().
- If startup validation succeeds, health reports duration cache ready.
- If startup validation fails, health reports not ready and stored-message playback refuses the missing asset.
- No live fallback to synchronous
ffprobeis allowed inplayMessage(). - DYY9 validation reduced trigger latency from about 2.5 seconds to about 0.52 seconds before the stored delay was tuned to 300 ms.
Chime Policy
The current DYY9 release candidate still uses the existing approved chime for both stored messages and live pages. The next approved change is to split chimes by operational purpose:
message_chime.wavfor stored messages and sequences.page_chime.wavfor zone and All Call live pages.
The split should not modify the chime files in place. Validate supplied files first, then make the smallest server.js change: separate constants, startup validation entries, and existing playback references.
Live Audio Release Standard
- RoutedAudioMixer is the single ALSA/aplay owner.
- Live-page chime is routed as a normal mixer file source.
- Live microphone PCM is fed into RoutedAudioMixer by
audio_receiver.js. - Live PCM queues are bounded and cleared when a live page ends so delayed microphone audio cannot play afterward.
- Brief occasional click/pop is acceptable. Failing to open a live page reliably or adding unacceptable live-page latency is not acceptable.
External FFmpeg Status
FFmpeg remains installed on the PPOE head-end and is invoked as an external executable. PagePoint does not link FFmpeg libraries into its Node.js code. Current production uses include file decoding/resampling for mixer input and startup duration probing. FFmpeg removal is not a DYY9 release blocker.
Candidate PCM-Native Solution
- Convert active chimes to approved PCM WAV.
- Add an in-process 16-bit mono WAV reader and duration parser.
- Replace FFmpeg-backed mixer input with deterministic PCM read/resampling.
- Remove
ffprobe, unused legacy FFmpeg helpers, and FFmpeg process-kill paths after validation.
Acceptance Gates Before Removing FFmpeg
Do not remove FFmpeg from an appliance until four-zone simultaneous playback, stored All Call, sequences, live-page chimes, live mic, interruption/resume, missing/invalid audio handling, underrun behavior, and timing comparisons against the current implementation pass. Keep the current FFmpeg path available as rollback during evaluation.