Espeak 读取单独的字母而不是单词
Espeak reads separate letters instead of words
我第一次尝试在下面的代码中使用Google的默认TTS引擎,但是我发现不支持波斯语!
因此,我在 phone 上下载并安装了 espeak RedZoc TTS engine
,并将默认的 TTS 语言更改为波斯语。当我在我的 phone 设置或 RedZoc 应用程序中检查它时,它运行良好。
但是当我 运行 我的代码在我的 phone 中时,它会单独读取字母而不是读取完整的单词! (例如它应该说 SALAM
但它说 Arabic Sin Lam Alef Mim
)
主要活动:
package com.m.ttsapp;
import android.content.Intent;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.Locale;
public class MainActivity extends AppCompatActivity
{
String text;
EditText et;
TextToSpeech tts;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et=findViewById(R.id.editText1);
btn = findViewById(R.id.button1);
tts=new TextToSpeech(MainActivity.this, 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)
{
Log.e("error", "This Language is not supported");
}
else{
ConvertTextToSpeech();
}
}
else
Log.e("error", "Initilization Failed!");
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ConvertTextToSpeech();
}
});
}
@Override
protected void onPause()
{
if(tts != null)
{
tts.stop();
tts.shutdown();
}
super.onPause();
}
private void ConvertTextToSpeech()
{
text = et.getText().toString();
if(text == null || "".equals(text))
{
text = "Content not available";
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}else
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
我知道也许我必须更改这行代码,但不知道将其更改为什么? int result=tts.setLanguage(Locale.);
或者也许我必须忘记所有这些代码并编写另一个代码?但是怎么办?
没有 'inbuilt' Locale.PERSIAN
因此您需要创建语言环境。
final Locale persianLocale = new Locale("fa","IR");
然后设置:
tts.setLanguage(persianLocale);
我第一次尝试在下面的代码中使用Google的默认TTS引擎,但是我发现不支持波斯语!
因此,我在 phone 上下载并安装了 espeak RedZoc TTS engine
,并将默认的 TTS 语言更改为波斯语。当我在我的 phone 设置或 RedZoc 应用程序中检查它时,它运行良好。
但是当我 运行 我的代码在我的 phone 中时,它会单独读取字母而不是读取完整的单词! (例如它应该说 SALAM
但它说 Arabic Sin Lam Alef Mim
)
主要活动:
package com.m.ttsapp;
import android.content.Intent;
import android.speech.tts.TextToSpeech;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.Locale;
public class MainActivity extends AppCompatActivity
{
String text;
EditText et;
TextToSpeech tts;
Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et=findViewById(R.id.editText1);
btn = findViewById(R.id.button1);
tts=new TextToSpeech(MainActivity.this, 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)
{
Log.e("error", "This Language is not supported");
}
else{
ConvertTextToSpeech();
}
}
else
Log.e("error", "Initilization Failed!");
}
});
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ConvertTextToSpeech();
}
});
}
@Override
protected void onPause()
{
if(tts != null)
{
tts.stop();
tts.shutdown();
}
super.onPause();
}
private void ConvertTextToSpeech()
{
text = et.getText().toString();
if(text == null || "".equals(text))
{
text = "Content not available";
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}else
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}
我知道也许我必须更改这行代码,但不知道将其更改为什么? int result=tts.setLanguage(Locale.);
或者也许我必须忘记所有这些代码并编写另一个代码?但是怎么办?
没有 'inbuilt' Locale.PERSIAN
因此您需要创建语言环境。
final Locale persianLocale = new Locale("fa","IR");
然后设置:
tts.setLanguage(persianLocale);