gpt4 book ai didi

android - Android 中的全局 TTS

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:12 25 4
gpt4 key购买 nike

您好,我正在为盲人用户开发一个应用程序,因此我经常使用文本转语音,因为这实际上是唯一一种响应用户操作的方法。我决定让一个全局 TTS 实例与应用程序一样运行。我是这样实现的

package com.simekadam.blindguardian;

import android.content.Context;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;

public class SpeechHelper implements OnInitListener {

private static TextToSpeech mTts;
private String text;
private static final SpeechHelper helper = new SpeechHelper();

public static SpeechHelper getInstance(){

return helper;
}


public void say(String text, Context context){

if(mTts == null){
this.text = text;
mTts = new TextToSpeech(context, (OnInitListener) helper);

}
else{
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}


@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
}

public void stopTTS(){
if(mTts != null){
mTts.shutdown();
mTts.stop();
mTts = null;
}
}

起初 - 它的工作但是..我想检查这样的语音数据的可用性

protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
Intent checkIntent = new Intent();
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);
text = getIntent().getExtras();
}


protected void onActivityResult(
int requestCode, int resultCode, Intent data) {
if (requestCode == MY_DATA_CHECK_CODE) {
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
// success, create the TTS instance
mTts = new TextToSpeech(this, (OnInitListener) this);
mTts.setLanguage(new Locale("cze", "CZE"));
} else {
// missing data, install it
Intent installIntent = new Intent();
installIntent.setAction(
TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
startActivity(installIntent);
}
}
}

它的代码来自 Android 开发人员门户,但我无法为不是 android.Activity 子级的类的结果启动 Activity..请问如何在不使用 Activity 的情况下检查它,这种调用TTS的方法是否正确?(我之前已经用 Activities 实现了这一切,但是由于错误关闭了 TTS 而存在一些内存泄漏 - 当我正确关闭它时,它必须在每次调用时重新创建 - 太慢了..)

最佳答案

在您知道 TTS 数据可用后,从 onActivityResult() 初始化您的全局实例。你的应用程序需要一个 Activity ,所以从入口 Activity 开始,所有后续 Activity 都将能够在初始化后使用你的全局实例。还要考虑何时以及如何关闭它。

关于android - Android 中的全局 TTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8159749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com