In the current version of VIBS, the "header" portion of the ballot is not spoken. Since the audio information for the header is contained within the database, having this information spoken should be relatively straightforward.
VIBS currently does not read play audio for headers, even though there is the ability to record audio with headers in GEMS. There are several header types in GEMS, race headers, race footers (not implemented), page headers, page footers.
Race headers are attached to a group of races, so it would seem natural to play them along with the first race of the race group. Easy enough.
VIBS does not have the concept of a "page", so when to play page footer/header audio is less obvious. When exactly should this audio be played? Once before any races are played, and never again might be one straightforward solution. Is that sufficient? Other options?
There is one final nagging problem that needs to be addressed for VIBS header audio. One of the most common uses of page headers/footers is to make use of the @precinct macro to substitute the precinct name into the header. As has been discussed in the past, we don't store multi-language rich text for the precinct names -- we just blindly substitute in the precinct label. Similarly, we don't store any audio for the precinct names either, and besides the concept of an @precinct macro is rather foreign to recorded audio.
Much the same as the multi-language issue, I don't see a really clean solution to this. Recording audio and entering rich text for all the precincts is just too ugly to consider. Would it be sufficient to punt on the issue and just not support precinct names in VIBS? Other options?