如何为印地语添加文本到语音?

Sai*_*mar 3 android text-to-speech

我的应用程序包含两个字符串和两个按钮,一个英文字符串和印地语字符串,当我点击英语发言按钮时,英语字符串发音,当我来到印地语字符串时,它没有响应给定的单词,因为它被提及.

这是我的MainActivity外观,

public class MainActivity extends AppCompatActivity {

private TextView englishString, hindiString;
private Button englishButton, hindiButton;
private TextToSpeech textToSpeech;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    englishString = (TextView) findViewById(R.id.englishString);
    hindiString = (TextView) findViewById(R.id.hindiString);

    englishButton = (Button) findViewById(R.id.englishButton);
    hindiButton = (Button) findViewById(R.id.hindiButton);

    englishButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            loadSpeakingLanguages(englishString.getText().toString());
        }
    });

    hindiButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            loadSpeakingLanguages(hindiString.getText().toString());
        }
    });
}


private void loadSpeakingLanguages(String textToTranslate) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        ttsGreater21(textToTranslate);
    } else {
        ttsUnder20(textToTranslate);
    }
}

@SuppressWarnings("deprecation")
private void ttsUnder20(String text) {
    HashMap<String, String> map = new HashMap<>();
    map.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "MessageId");
    textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, map);
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void ttsGreater21(String text) {
    String utteranceId = this.hashCode() + "";
    textToSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null, utteranceId);
}


@Override
protected void onResume() {
    textToSpeech = new TextToSpeech(getApplicationContext(), new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status != TextToSpeech.ERROR) {
                textToSpeech.setLanguage(Locale.ENGLISH);
            }
        }
    });
    super.onResume();
}

public void onPause() {
    if (textToSpeech != null) {
        textToSpeech.stop();
        textToSpeech.shutdown();
        textToSpeech = null;
    }
    super.onPause();
}}
Run Code Online (Sandbox Code Playgroud)

这是我的activity_main看起来像,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="ravi.texttospeech.MainActivity">

<TextView
    android:id="@+id/englishString"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello World!"
    android:textSize="25dp" />

<TextView
    android:id="@+id/hindiString"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/englishString"
    android:text="?????? ??????"
    android:textSize="25dp" />

<Button
    android:id="@+id/englishButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/hindiString"
    android:text="Speak English Text" />

<Button
    android:id="@+id/hindiButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/englishButton"
    android:text="Speak Hindi Text" />
Run Code Online (Sandbox Code Playgroud)

这是我的应用程序的样子

Kar*_*hik 8

我在你的代码中做了一些修改.

 hindiButton.setOnClickListener(new View.OnClickListener() {
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        @Override
        public void onClick(View view) {
            loadSpeakingLanguages(hindiString.getText().toString());
            textToSpeech.setLanguage(Locale.forLanguageTag("hin"));
        }
    });
Run Code Online (Sandbox Code Playgroud)

它对我来说很好.

您需要使用ISO 639 3字母单词或ISO 639 2字母单词

查看ISO国家/地区名称,并在此链接中找到相应的代码

注意:此方法仅适用于棒棒糖和下一版本.