Apollo II for NVDA

Version 1.2. Requires NVDA 2026.2 or later on 64-bit Windows.

This add-on provides two UK English voice profiles based on the Dolphin Apollo II. The Juno profile's pronunciation, intonation and tone have been adjusted using recordings from a real Dolphin Juno. These profiles are approximations, not exact reproductions of every Apollo or Juno revision. No hardware, voice download or network connection is needed.

Getting started

  1. Install the add-on and restart NVDA.
  2. Open the synthesizer dialog with NVDA+Control+S.
  3. Choose Apollo II for NVDA.

The add-on uses NVDA's selected speech output device. Control stops speech; Shift pauses or resumes it. The previous synthesizer remains available in the synthesizer dialog.

Speech settings

Voice, rate, pitch, volume, intonation, bass and treble are available in NVDA's Speech settings and the synthesizer settings ring. Save NVDA's configuration to retain changes.

Voice controls
ControlDefaultMeaning
VoiceJuno (calibrated)Choose the calibrated Juno sound or the original Apollo II Reborn profile.
Rate50The original engine's nine speed settings, with 50 selecting its normal rate.
Pitch50Lower or raise the voice. The engine has sixteen pitch settings, so adjacent slider values may sound identical.
Volume100Reduce the speech level without changing pitch. Zero silences the voice.
Intonation43Controls eight levels of pitch movement. Zero is flat. Higher rates limit pitch movement according to the selected profile.
Bass50Adjust low-frequency body. 50 is neutral; 0 cuts by 12 dB and 100 boosts by 12 dB.
Treble50Adjust brightness. 50 is neutral; 0 cuts by 12 dB and 100 boosts by 12 dB.

Louder passages automatically use less gain when needed to avoid clipping; this does not change your saved volume setting.

Bass and treble changes apply to subsequent speech. Strong boosts may reduce the overall level to leave safe headroom. Set both to 50 to restore the calibrated sound. NVDA's capital-letter pitch change is supported; the engine's sixteen pitch steps still mean some adjacent slider values sound identical.

Comparing the voices

Juno (calibrated) keeps the sound of version 1.0, including the pronunciation corrections, measured intonation contours and tonal adjustments. It remains selected when upgrading an existing installation.

Apollo II (original) uses the upstream Apollo II Reborn pronunciations, prosody, pitch mapping and tone before the Juno adjustments. It refers to the upstream reconstruction, not an exact recording or emulation of the original hardware DSP.

Choose Voice in Speech settings or the synthesizer settings ring. Both profiles use the same controls, audio device, spelling, Say All and pause support. Set bass and treble to 50 for a comparison without extra EQ. Turn off Read numbers as words to compare the original digit pronunciations: when enabled, it changes 1 to the word one before either voice receives it. NVDA's dictionaries can also change text before synthesis. Volume and clipping protection still apply to both, so this is a comparison of voice character rather than original hardware output level. Save NVDA's configuration to retain the selected voice.

On upgrading from version 1.0, an existing NVDA voice dictionary is copied to Juno (calibrated), leaving the old file intact. An existing dictionary for the new voice name is never overwritten. Apollo II (original) has its own voice dictionary; NVDA's default dictionary continues to apply to both profiles.

Reading numbers

Enable Read numbers as words in Speech settings to expand ordinary integers, decimals and ordinals before speaking. For example, 123 becomes one hundred and twenty-three, 3.05 becomes three point zero five, and 21st becomes twenty-first. The option is off by default, preserving hardware-style reading.

Leading-zero codes, phone-like groups, IP addresses, version strings, dates, email addresses and web links are left unchanged. Valid 24-hour times are read as times: 16:30:29 becomes sixteen thirty and twenty-nine seconds; 09:05 becomes nine oh five. Invalid times are left unchanged. Ambiguous or unusually long numbers are also left alone. This is not a date, currency or telephone interpretation service. Save NVDA's configuration to retain your choice.

With Juno (calibrated), intonation at faster rates is reduced in smaller steps, following the Juno's behaviour rather than the older Apollo firmware's abrupt limits. The highest rate is nearly flat. This does not change your selected intonation value; lowering the rate restores its effect. Apollo II (original) retains the older firmware's more abrupt high-rate limits.

Inline commands

Enable Allow inline commands in NVDA's Speech settings to interpret commands inside double braces. This checkbox is off by default and is not in the synthesizer ring. Enable it only when you want marked text to control the voice or play effects. Marked text from documents or websites can then do so.

Use one command per marker. Commands are case-insensitive; spaces just inside the braces are optional. Ordinary unwrapped commands are not executed. Unsupported, invalid, nested or incomplete markers remain ordinary text, subject to NVDA's normal punctuation settings. Spelling reads characters rather than executing markers.

Normal speech. {{@W5}}{{@R7}}Faster and more expressive!
{{@F4}}Lower pitch. {{@A6}}Quieter speech.
{{@T8}}{{reset}}Back to my configured controls.

Changes apply within one supplied speech sequence, including its internal text chunks and playback indexes. They do not change saved voice settings. {{reset}} restores your configured controls immediately for the next text. New speech sequences and cancellation start cleanly. During Say All, NVDA can supply separate paragraphs or lines as separate sequences; repeat markers where needed rather than expecting them to stay active for the entire document.

SoundWave's normal text capture can use the same markers. Enable this option and save NVDA's configuration before opening SoundWave's voice dialog, so its separate driver instance loads the choice. You do not need a special SoundWave plug-in. Text supplied as one render keeps its command changes until reset or the end of that input. Normal NVDA speech does not inherit changes from a render.

Supported inline commands
MarkerValuesMeaning
{{@W5}}1 to 9Native speech rate, slowest to fastest.
{{@F8}}0 to 9, A to FSixteen native pitch levels, lowest to highest. 8 is the engine's normal centre.
{{@F+}}, {{@F-}}Plus or minusThe firmware's small pitch-step variation. These do not accumulate like repeated slider presses. A numbered pitch command restores the normal step.
{{@R7}}0 to 7Intonation, flat to most expressive. The selected profile still limits intonation at high rates.
{{@Q3}}0 to 9Word-pause level in native units, not milliseconds.
{{@DB}}0 to 9, A to FPhrase-pause level in native units, not milliseconds.
{{@B8}}1 to 8Voicing, from breathy whisper at 1 to full voicing at 8.
{{@K1}}0 or 1Male or non-male speaker table, using the firmware's terminology.
{{@V2}}1 to 6Six native presets. These reset pitch, voicing, speaker table and formant offsets, but do not switch the NVDA Juno/original profile.
{{@U010+}}Parameter 0 to 9, exactly two hex digits, then plus or minusAdvanced formant offsets. This example applies hexadecimal 10 to parameter 0. Large offsets can make speech unnatural. A voice preset clears these offsets.
{{@S1}}0 or 1Firmware spelling mode off or on.
{{@P1}}0 or 1Firmware punctuation mode off or on. NVDA may already have expanded punctuation before the driver receives it; raw SoundWave text avoids that preprocessing.
{{@H1}}0 or 1Content-only mode off or on. When on, connecting words can be omitted deliberately.
{{@A6}}0 to 9, A to FRelative output volume: 0 is silent, F is your configured volume, and intermediate values reduce it. Implemented in software after peak protection.
{{@T0}} to {{@TF}}0 to 9, A to FPlay one effect. 0 to 3 are whooshes, 4 to 7 buzzers, 8 to B the first warble, and C to F the second warble. Each group runs shortest to longest.
{{@TX}}XA short silent effect. This implementation produces approximately 210 milliseconds including its boundary silence; it is not an exact timing control.
{{reset}}No argumentRestore your configured controls for subsequent text in this input.

Hexadecimal uses 0 to 9 followed by A, B, C, D, E and F for values ten through fifteen. Each command marker can introduce an audio boundary, which can affect phrasing. The preset voices are approximations: hardware source-wave and mark-space controls are not reproduced by this renderer.

Hardware reset, serial setup, language-bank changes, queries, echo commands, phonetic mode, mark-space ratio and source-wave commands are not supported here. The voice-off command @V0 is also excluded; use {{@A0}} for silent passages and {{reset}} to restore your settings. Native pitch is stepped, not a calibrated musical-note interface, so singing and exact musical timing are not guaranteed.

Updates

Open Apollo II for NVDA in NVDA Settings. Choose Never, Hourly or Daily for automatic update checks; Daily is the default. Check now checks immediately, including when automatic checks are disabled. Save NVDA's configuration to retain your choice.

Checks contact the add-on's GitHub repository and do not send speech text. You choose whether to install an available update. Downloads must have a valid publisher signature and match the expected add-on, version, size and hash. NVDA stages the update and asks you to restart; voice settings are retained.

Limitations

Credits

The firmware implementation and underlying renderer come from Apollo II Reborn by rommix0. The project preserves work from the original Dolphin Apollo II firmware and uses a port of the Orpheus Build 18 renderer. The original DSP implementation is not available. Original material remains attributable to its respective rights holders. This add-on is not endorsed by Dolphin.

NVDA integration and Juno-reference adjustments by Andre Louis. This add-on is offered under GPL version 2 or later; see COPYING and NOTICE. The upstream author has explicitly permitted GPL licensing of the NVDA add-on. This does not claim that the upstream repository itself has adopted GPL or change the separate notices for third-party components.

Source and releases: Apollo II for NVDA on GitHub.

The signed updater is adapted from the Prose 2000 updater. Its BSD-3-Clause notice is retained in the source.

The tone controls use Robert Bristow-Johnson's shelving-filter equations from the W3C Audio EQ Cookbook.

English number expansion uses an English-only subset of num2words 0.5.14, by Taro Ogawa, Savoir-faire Linux and contributors, under LGPL 2.1 or later. The library's copyright notices and licence accompany the included source.

Changelog

1.2

1.1

1.0