I am getting an error with the conversion of the text to speech in android studio. I have initialised the code but it still returns no voice outputs. The code is as follows.
else if((match.contains("yes") || match.contains("yeah")) && defsele) {
//Toast toast = Toast.makeText(getApplicationContext(), "Default selection is done and program is starting", Toast.LENGTH_SHORT);
//toast.show();
defsele=false;
switch (progno) {
case 1:
//Toast toast1 = Toast.makeText(getApplicationContext(),"The default settings for cotton cycle is done",Toast.LENGTH_SHORT);
//toast1.show();
String cotton = "The cotton program is starting with the default values";
tts.speak(cotton, TextToSpeech.QUEUE_FLUSH, null);
soak=true;
soakdef();
break;
The tts.speak gets deprecated and does not function. How can I make this work? The initialisation code is as follows:
tts = new TextToSpeech(this,this);
#Override
public void onInit(int status) {
Log.d("Speech", "OnInit - Status ["+status+"]");
if(status == TextToSpeech.SUCCESS){
Log.d("Speech","Success");
tts.setLanguage(Locale.ENGLISH);
TextToSpeech textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
#Override
public void onInit(int status) {
//your text
String textToSpeechStr = "Hello";
//status is success / 0
if (status == TextToSpeech.SUCCESS) {
//speech starts
textToSpeech.speak(textToSpeechStr, TextToSpeech.QUEUE_FLUSH, null);
}
}
});
Related
I have this app for small kids that says "Good job, clap!" when they pick the right choice, or "Try again", when they push the wrong button.
The voice is very robotic, how do I make it sound more human and kids friendly?
tts = new TextToSpeech(Level_11_Testing.this, new TextToSpeech.OnInitListener() {
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
tts.setLanguage(Locale.US);
tts.speak("Push on" + rightchoice, TextToSpeech.QUEUE_ADD, null);
}
}
});
up.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
up.setEnabled(false);//it prevents double clicking
if (idx == rightchoice) {
tts.speak("Good job, clap!", TextToSpeech.QUEUE_FLUSH, null);
mHandler.postDelayed(hMyTimeTask, 1400);
} else {
tts.speak("Try again!", TextToSpeech.QUEUE_FLUSH, null);
}
How can I convert this TOAST message to voice in Android?
Example
Toast.makeText(MainActivity.this, "I am enter code here" +positive[+ position]+ " always", Toast.LENGTH_SHORT).show();
First import the package
import android.speech.tts.TextToSpeech;
Then initialize
private TextToSpeech tts;
tts = new TextToSpeech(this, this);
Finally make a function like this
private void speakOut() {
String text = txtText.getText().toString();
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
Woops. I forgot, you'll also need to define an onInit function
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
} else {
btnSpeak.setEnabled(true);
speakOut();
}
} else {
Log.e("TTS", "Initilization Failed!");
}
}
In this example I used an onClickListener to call this function, using a button. Modify it to how you want to call this function when you toast a message.
Just make the String text as your toast message. In the example above txtText was an editText. Modify as per your requirement
TextView wordView = (TextView)view; String wordChosen = (String) wordView.getText(); Toast.makeText(MainActivity.this, "I am " + positive[+position] + " always", Toast.LENGTH_SHORT).show(); //tts.speak("I am" + blank +position+" always", TextToSpeech.QUEUE_FLUSH, null); tts.speak("You chose, you are "+wordChosen+" today and always", TextToSpeech.QUEUE_FLUSH, null);
How can I convert this TOAST message to voice in Android?
Example
Toast.makeText(MainActivity.this, "I am enter code here" +positive[+ position]+ " always", Toast.LENGTH_SHORT).show();
First import the package
import android.speech.tts.TextToSpeech;
Then initialize
private TextToSpeech tts;
tts = new TextToSpeech(this, this);
Finally make a function like this
private void speakOut() {
String text = txtText.getText().toString();
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
Woops. I forgot, you'll also need to define an onInit function
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "This Language is not supported");
} else {
btnSpeak.setEnabled(true);
speakOut();
}
} else {
Log.e("TTS", "Initilization Failed!");
}
}
In this example I used an onClickListener to call this function, using a button. Modify it to how you want to call this function when you toast a message.
Just make the String text as your toast message. In the example above txtText was an editText. Modify as per your requirement
TextView wordView = (TextView)view; String wordChosen = (String) wordView.getText(); Toast.makeText(MainActivity.this, "I am " + positive[+position] + " always", Toast.LENGTH_SHORT).show(); //tts.speak("I am" + blank +position+" always", TextToSpeech.QUEUE_FLUSH, null); tts.speak("You chose, you are "+wordChosen+" today and always", TextToSpeech.QUEUE_FLUSH, null);
I have gone through almost all the links related to this topic but haven't found any suitable answer. I am trying to build a basic text to speech application. It works perfectly fine on the emulator. But when i run it on my phone, it shows language not supported.
I guess this has something to do with the locale. The default locale set in my phone is en_US
My code is as follows:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tts = new TextToSpeech(this, this);
btnSpeak = (Button) findViewById(R.id.btnSpeak);
txtText = (EditText) findViewById(R.id.txtText);
btnSpeak.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// Method yet to be defined
speakOut();
}
});
}
public void onInit(int status) {
// TODO Auto-generated method stub
// TTS is successfully initialized
if (status == TextToSpeech.SUCCESS) {
// Setting speech language
// System.out.println(Locale.getAvailableLocales());
int result = tts.setLanguage(Locale.ENGLISH);
// int result = tts.setLanguage(Locale.getDefault());
// If your device doesn't support language you set above
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
// Cook simple toast message with message
Toast.makeText(this, "Language not supported",
Toast.LENGTH_LONG).show();
Log.e("TTS", "Language is not supported");
} else {
btnSpeak.setEnabled(true);
}
// TTS is not initialized properly
} else {
Toast.makeText(this, "TTS Initilization Failed", Toast.LENGTH_LONG)
.show();
Log.e("TTS", "Initilization Failed");
}
}
private void speakOut() {
// Get the text typed
String text = txtText.getText().toString();
// If no text is typed, tts will read out 'You haven't typed text'
// else it reads out the text you typed
if (text.length() == 0) {
tts.speak("You haven't typed text", TextToSpeech.QUEUE_FLUSH, null);
} else {
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
public void onDestroy() {
// Don't forget to shutdown!
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
even if i use int result = tts.setLanguage(Locale.getDefault()); instead of Locale.ENGLISH, it shows the same language not supported message
LOGCAT ERROR:
02-26 16:24:57.492: I/TextToSpeech.java(23356): initTts() successfully bound to service
02-26 16:24:58.015: E/TTS(23356): Language is not supported
I am running this on my phone- Samsung Galaxy-Y (GT-S5360) with Android version 2.3.6
found a solution myself. the problem was that the locales available on the android default tts engine did not match those on my phone.
i installed another tts engine and it works perfectly fine with it.
Is there any free TTS (text-to-speech) service for Android in Turkish? I've not found anything useful in google.
I didnt try it yet on android, but I recently discovered this one: http://www.ispeech.org
The speech quality looks promising on the web app.
Give it a shot :)
Here you can use Google TTS as below:
strText = converToTurkishCharacter(strText);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
#Override
public void onInit(int status) {
Locale locale = new Locale("tr_TR");//set Locale
textToSpeech.setLanguage(locale);
if (status != TextToSpeech.ERROR) {
}
if (status == TextToSpeech.SUCCESS) {
String[] text = strText.split("\\.");//split with every "dot"
for (int i = 0; i < text.length; i++) {
HashMap uttrerance = new HashMap();
uttrerance.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, Integer.toString(i));
textToSpeech.speak(text[i], 1, uttrerance);
}
}
//-------checks engine
List engineList = textToSpeech.getEngines();
for(Object strEngine : engineList){
Log.d("tagg",strEngine.toString());
if(strEngine.toString().equals("EngineInfo{name=com.google.android.tts}")){//check if google tts api engine is installed on device
isGoogleAvaible = true;
}
}
if(!isGoogleAvaible){
Toast toast = Toast.makeText(ActivityColumnistArticle.this,
"Google TTS Eksik...Lutfen yukleyin", Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM, 0, 0);
toast.show();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("market://details?id=com.google.android.tts"));
startActivity(intent);//user should install google tts , if it is defaultly not installed
}
//---------------For missing data
int code = textToSpeech.isLanguageAvailable(locale);
if (code == -2 || code == -1) {
Intent installIntent = new Intent();
installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}, "com.google.android.tts");
}
else{
Toast toast = Toast.makeText(ActivityColumnistArticle.this,
"Ses destegi icin minumum Icecream Sandwich yuklu olmalı...", Toast.LENGTH_LONG);
toast.setGravity(Gravity.BOTTOM, 0, 0);
toast.show();
}
Moreover, Google TTS have bug with türkish character like "ö", "ğ" so that you should convert them with unicode:
private String converToTurkishCharacter(String text){
text = text.replace("\u015f", "\u015f");
text = text.replace("\u00e7", "\u00e7");
text = text.replace("\u011f", "\u011f");
text = text.replace("\u0131", "\u0131");
text = text.replace("\u00fc", "\u00fc");
text = text.replace("\u00f6", "\u00f6");
// ----
text = text.replace("\u011e", "\u011e");
text = text.replace("\u0130", "\u0130");
text = text.replace("\u00d6", "\u00d6");
text = text.replace("\u00dc", "\u00dc");
text = text.replace("\u015e", "\u015e");
text = text.replace("\u00c7", "\u00c7");
return text;
}
Some android device have pico TTS only, so that is why you check Google TTS, and ask user to install...
Not:In order tts to work,You should have real android device
I fixed this problem in my case,
define that variable:
final Locale locale = new Locale("tr", "TR");
in onCreate method:
tts = new TextToSpeech(getApplicationContext(), new
TextToSpeech.OnInitListener() {
#Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(locale);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
tts.speak("bir sorun oluştu", TextToSpeech.QUEUE_FLUSH, null);
}
} else {
tts.speak("bir sorun oluştu.", TextToSpeech.QUEUE_FLUSH, null);
Log.d(TAG, "Text to speech is not successful");
}
}
});
tts.speak("bağlanıyor", TextToSpeech.QUEUE_FLUSH, null);
it will say "bağlanıyor"
just use Locale.getDefault()
tts.setLanguage(Locale.getDefault())