From 22f53d6fc69d88ee2879aeb24f498f7988c1f8ea Mon Sep 17 00:00:00 2001 From: AbdullahM0hamed <25087116+AbdullahM0hamed@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:35:30 +0000 Subject: [PATCH] Add Ability To Select TTS Voice --- .../com/termux/api/apis/TextToSpeechAPI.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/app/src/main/java/com/termux/api/apis/TextToSpeechAPI.java b/app/src/main/java/com/termux/api/apis/TextToSpeechAPI.java index 2dae2dd1c..d47bbd794 100644 --- a/app/src/main/java/com/termux/api/apis/TextToSpeechAPI.java +++ b/app/src/main/java/com/termux/api/apis/TextToSpeechAPI.java @@ -9,6 +9,7 @@ import android.speech.tts.TextToSpeech.Engine; import android.speech.tts.TextToSpeech.EngineInfo; import android.speech.tts.UtteranceProgressListener; +import android.speech.tts.Voice; import android.util.JsonWriter; import com.termux.api.util.ResultReturner; @@ -67,6 +68,7 @@ protected void onHandleIntent(final Intent intent) { final String speechRegion = intent.getStringExtra("region"); final String speechVariant = intent.getStringExtra("variant"); final String speechEngine = intent.getStringExtra("engine"); + final String speechVoice = intent.getStringExtra("voice"); final float speechPitch = intent.getFloatExtra("pitch", 1.0f); // STREAM_MUSIC is the default audio stream for TTS, see: @@ -121,6 +123,23 @@ public void writeResult(PrintWriter out) { return; } + if ("LIST_AVAILABLE".equals(speechVoice)) { + try (JsonWriter writer = new JsonWriter(out)) { + writer.setIndent(" "); + Voice defaultVoice = mTts.getVoice(); + writer.beginArray(); + for (Voice voice : mTts.getVoices()) { + writer.beginObject(); + writer.name("name").value(voice.getName()); + writer.name("default").value(defaultVoice.equals(voice.getName())); + writer.endObject(); + } + writer.endArray(); + } + out.println(); + return; + } + if ("LIST_AVAILABLE".equals(speechEngine)) { try (JsonWriter writer = new JsonWriter(out)) { writer.setIndent(" "); @@ -172,6 +191,15 @@ public void onDone(String utteranceId) { } } + if (speechVoice != null) { + for (Voice voice : mTts.getVoices()) { + if (voice.getName().equals(speechVoice)) { + mTts.setVoice(voice); + break; + } + } + } + mTts.setPitch(speechPitch); mTts.setSpeechRate(intent.getFloatExtra("rate", 1.0f));