Set TTS Language ¶
Setup ¶
Download the
SetTTSLanguage
project
archive file or clone the project with Git
See the Configure Android Example guide.
Run the example ¶
In Android Studio, from the
File
menu, select
Sync
Project
with
Gradle
Files
|
|
|
How it works ¶

You can open the MainActivity.kt file to see how setting the TTS (text to speech) voice instruction language works.
1override fun onCreate(savedInstanceState: Bundle?)
2{
3 super.onCreate(savedInstanceState)
4 setContentView(R.layout.activity_main)
5 progressBar = findViewById(R.id.progressBar)
6 selectedLanguageTextView = findViewById(R.id.language_value)
7 languageContainer = findViewById(R.id.language_container)
8 playButton = findViewById(R.id.play_button)
9 languageContainer.setOnClickListener {
10 onLanguageContainerClicked()
11 }
12 playButton.setOnClickListener {
13 SdkCall.execute {
14 SoundPlayingService.playText(GemUtil.getTTSString(EStringIds.eStrMindYourSpeed),
15 SoundPlayingListener(), SoundPlayingPreferences())
16 }
17 }
18 SdkSettings.onMapDataReady = onMapDataReady@{ isReady ->
19 if (!isReady) return@onMapDataReady
20 if (!SoundPlayingService.ttsPlayerIsInitialized)
21 {
22 SoundUtils.addTTSPlayerInitializationListener(this)
23 }
24 else
25 {
26 loadTTSLanguages()
27 }
28 }
29 SdkSettings.onApiTokenRejected = {
30 showDialog("TOKEN REJECTED")
31 }
32 // This step of initialization is mandatory for using the SDK without a map.
33 if (!GemSdk.initSdkWithDefaults(this))
34 {
35 // The SDK initialization was not completed.
36 finish()
37 }
38 if (!Util.isInternetConnected(this))
39 {
40 showDialog("You must be connected to internet!")
41 }
42}
MainActivity
overrides the
onCreate()
function which checks
that an internet connection is available and loads the TTS languages
loadTTSLanguages()
when the map instantiation is complete (the map is ready).
If the TTS player is not initialized, a listener is set up to wait for
the TTS player to be initialized, which causes the TTS languages to
be loaded by the callback function defined for that listener:
override
fun
onTTSPlayerInitialized()
{
loadTTSLanguages()
}
.
languageContainer.setOnClickListener
{
onLanguageContainerClicked()
}
to display the list of TTS languages.
playButton.setOnClickListener
at the bottom of the screen to play the “mind your speed” message
SoundPlayingService.playText(GemUtil.getTTSString(EStringIds.eStrMindYourSpeed),
in the currently selected TTS language.
1private fun loadTTSLanguages()
2{
3 SdkCall.execute {
4 ttsLanguages = SoundPlayingService.getTTSLanguages()
5 }
6 runOnUiThread {
7 onTTSLanguagesLoaded()
8 }
9}
1private fun onTTSLanguagesLoaded()
2{
3 selectedLanguageTextView.text = ttsLanguages[selectedLanguageIndex].name
4 SoundPlayingService.setTTSLanguage(ttsLanguages[selectedLanguageIndex].code)
5 progressBar.visibility = View.GONE
6 languageContainer.visibility = View.VISIBLE
7 playButton.visibility = View.VISIBLE
8}
private
var
selectedLanguageIndex
=
0
1private fun onLanguageContainerClicked()
2{
3 val builder = AlertDialog.Builder(this)
4 val convertView = layoutInflater.inflate(R.layout.dialog_list, null)
5 val listView = convertView.findViewById<RecyclerView>(R.id.list_view).apply {
6 layoutManager = LinearLayoutManager(this@MainActivity)
7 addItemDecoration(DividerItemDecoration(applicationContext, (layoutManager as LinearLayoutManager).orientation))
8 setBackgroundResource(R.color.white)
9 val lateralPadding = resources.getDimension(R.dimen.bigPadding).toInt()
10 setPadding(lateralPadding, 0, lateralPadding, 0)
11 }
12 val adapter = CustomAdapter(selectedLanguageIndex, ttsLanguages)
13 listView.adapter = adapter
14 builder.setView(convertView)
15 val dialog = builder.create()
16 dialog.show()
17 adapter.dialog = dialog
18}
CustomAdapter
is used to display the list of available TTS languages.
1...
2itemView.setOnClickListener {
3 selectedLanguageIndex = position
4 SoundPlayingService.setTTSLanguage(dataSet[position].code)
5 selectedLanguageTextView.text = dataSet[position].name
6 dialog?.dismiss()
7 }
8...
CustomAdapter
, clicking on a TTS language in the list
causes that language to be set in the sound playing service:
SoundPlayingService.setTTSLanguage(dataSet[position].code)
.