Skip to main content

Voice packages

🚧 This article is incomplete

This article is incomplete & needs to be reviewed. You can help by creating a pull request.

OsmAnd supports two types of voice packages:

If you could not find the voice package you need, please follow the following examples and create your own voice package. Examples - https://github.com/osmandapp/OsmAnd-resources/tree/master/voice, German package de_0.voice.zip, English package en_0.voice.zip.

Difference between TTS and Recorded packages

  • a Text-To-Speech engine supports Street Name, Refs, POI names pronouncation
  • all Text-To-Speech supported packages bundled and updated with an application
  • a Recorded Package needs to be installed and updated manually (although the configuration file could be updated with app update)
  • a Recorded Package may not support some correct forms, and support is limited
  • a Recorded Package does not require any proprietary TTS engine to be installed

Package Structure

Voice package usually is distributed as .voice.zip, where the zip contains one folder with lang_tts.js (main configuration file), and sound files if they are present.

The configuration files are written in JavaScript language. All configuration files are by default TTS-packages, even if there is no TTS present yet to support the language. And later the configuration is extended by mapping 'dictionary phrases' to 'recorded file names'.

function populateDictionary(tts) {
// ROUTE CALCULATED
dictionary["route_is1"] = tts ? "Die berechnete Strecke ist" : "route_is1.ogg";
dictionary["route_is2"] = tts ? "lang" : "route_is2.ogg";
dictionary["route_calculate"] = tts ? "Route neu berechnet" : "route_calculate.ogg";
dictionary["distance"] = tts ? "die Entfernung beträgt" : "distance.ogg";

// LEFT/RIGHT
dictionary["prepare"] = tts ? "Demnächst " : "prepare.ogg"; // Demnächst sounds better then Vorbereiten zum
dictionary["after"] = tts ? "nach" : "after.ogg";

dictionary["left"] = tts ? "links abbiegen" : "left.ogg";
.....
}

function route_recalc(dist, seconds) {
return dictionary["route_calculate"] + (tts ? ", " : " ") + distance(dist, "nominativ") + (tts ? ", " : " ") + dictionary["time"] + " " + time(seconds) + (tts ? ". " : " ");
}

Generation custom package

Please check the project resources and use the same folder structure as the German package - simply make copy. Once it's done you can change, run the generation script and specify the required arguments. Help is inside the script.

Testing voice package (Android)

For testing it is possible to use :

  • the Navigation
  • the Navigation simulation,
  • or the handy version of Development plugin, which simulates different voice commands to be tested.