【发布时间】:2012-03-07 20:25:05
【问题描述】:
有没有免费的土耳其语安卓 TTS(文本到语音)服务?我在 google 中没有找到任何有用的东西。
【问题讨论】:
-
如果设备的语言设置为土耳其语,TTS 开始说土耳其语:)
标签: android api turkish text-to-speech
有没有免费的土耳其语安卓 TTS(文本到语音)服务?我在 google 中没有找到任何有用的东西。
【问题讨论】:
标签: android api turkish text-to-speech
我还没有在android上尝试过,但我最近发现了这个:http://www.ispeech.org 网络应用上的语音质量看起来很有希望。
试一试:)
【讨论】:
在这里你可以使用谷歌TTS如下:
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();
}
此外,Google TTS 存在带有“ö”、“ğ”等土耳其字符的错误,因此您应该将它们转换为 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;
}
一些安卓设备只有pico TTS,所以你检查谷歌TTS,并要求用户安装...
不是:为了让 tts 工作,你应该有真正的 android 设备
【讨论】:
我解决了这个问题,
定义该变量:
最终区域设置 locale = new Locale("tr", "TR");
在 onCreate 方法中:
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);
它会说“bağlanıyor”
【讨论】:
只需使用 Locale.getDefault()
tts.setLanguage(Locale.getDefault())
【讨论】: