Articles of text to speech

在工作线程上初始化TextToSpeech对象

多年来(字面上看),我的应用程序遭受了糟糕的文本到语音引擎的困扰,特别是在调用时的初始化时间: tts = new TextToSpeech(context, myOnInitListener); 以上可能会导致用户界面滞后,如果你search“文本到语音初始化缓慢”,你会发现很多post。 embedded的高品质IVONA声音曾经是最糟糕的罪魁祸首,但谷歌TTS引擎现在已经获奖。 他们最新的APK更新,导致初始化的重大滞后 – 无需testing这个代码,你可以去你的Android的文本到语音设置,并尝试切换可用的引擎,同时按下“听取样本”,滞后被certificate“很好”。 为了解决这个问题,我已经实现了以下function: private volatile TextToSpeech tts; AsyncTask.execute(new Runnable() { @Override public void run() { tts = new TextToSpeech(context, volatileOnInitListener); } }); 这已经完全消除了初始化的滞后,但是我担心这可能会有副作用,我还没有考虑到呢? 任何人都可以想到任何? 我也困惑,因为我相信TextToSpeech构造是asynchronous的,因此将这个构造函数移动到工作线程应该没有区别? 如果这个实现是前进的方向,Google为什么不在TextToSpeechSettings中实现它? 希望有人能澄清以上内容。 提前致谢。 编辑 – 当我说'构造函数是asynchronous的',我真的是指引擎初始化过程开始,最终调用onInit

如何判断一个特定的TTS引擎是否被选中(启用)?

这个问题只涉及Android 2.2 : 以下屏幕截图显示了3种不同的文本到语音引擎: PIco TTS(Android默认为Froyo 2.2) IVONA文本到语音HQ SVOX经典TTS 在这个屏幕截图中,你可以看到并不是所有的3都被选中(启用)。 相反,IVONA没有被检查,只剩下微微(暗示,因为它是硬编码的)和SVOX(检查)。 我希望能够以编程方式从我的应用程序中查询是否检查了特定的TTS引擎(如IVONA)(当然,假设我在编码时知道它们的软件包名称)。 在Android 2.2中,我所拥有的是getDefaultEngine() ,在Pico被选为缺省并检查SVOX的情况下(换句话说,如果Pico是默认的,我怎么知道SVOX被选中了? 我如何在Android 2.2中实现 ? 这是可能吗? PS Android 4.x(API> = 14)引入了getEngines() ,可能导致您相信ICS +解决了这个问题,但仔细检查发现: getEngines()只列出已安装 ,未检查 (已启用)的软件包。 每个列出的软件包附带的EngineInfo只提供名称,标签,图标,优先级以及它是否是系统映像的一部分。 换句话说,与Android 2.2相同的限制。

Android的TTS XML中音素属性的正确语法是什么?

我的理解是,这个X-SAMPA XML样本 ,就像这里的其他样本,甚至在这里 & 这里 ,都应该听起来像是什么东西。 String text = "<speak xml:lang=\"en-US\"> <phoneme alphabet=\"xsampa\" ph=\"faIv\"/>.</speak>"; mTts.speak(text, TextToSpeech.QUEUE_ADD, null); 然而,由于一些奇怪的原因,它并没有说什么(完全沉默)。 我错过了什么? 澄清:我的TTS示例应用程序设置确定:如果我改变. 在此之前, </speak>标记了任何单词,Android TTS只是说这个词很好。 我唯一的问题是,我无法以任何方式利用<phoneme alphabet=\"xsampa\" ph=\"faIv\"/> 。 我明白了. 应该是沉默的,但根据这些样本的海报,它应该在XML中发出XSAMPA音素。 我错过了什么?

如何将我的android tts输出保存在wav文件中?

我几乎无处不在试图find一种方法来保存我的android tts输出在audio文件中。 我看了这些post: 如何在Android上的audio文件中保存TTS输出? 我如何允许TTS将文件写入我的应用程序的目录? 但无法find/理解答案。 我正在使用像这样的synthesizeToFile() : HashMap<String, String> myHashRender = new HashMap<String, String>(); myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, result); String fileName = "/Android/data/com.android.voicelanglearning.vll/ttsfile1.wav"; tts.synthesizeToFile(result, myHashRender, fileName); 所以我重新发布同样的问题。 任何帮助深表感谢。 谢谢,Mounika

Android TTS检查支持的语言环境,缺less/未下载的语音数据

我正在使用Android的TextToSpeech类。 一切正常。 但是,有些语言/语言环境默认情况下未安装,但由TTS引擎支持,我无法捕获缺less语音数据的状态。 在互联网上,当我尝试将语言设置为语音数据尚未下载的新语言环境时,它将简单地下载语音数据并正常/成功地执行说话方法。 但是,在closures互联网的情况下,当我尝试将语言设置为语音数据尚未下载的新语言环境时,尝试下载语音数据。 但没有互联网,只是在所选语言环境的“语言和input”下的“TTS语音数据”设置屏幕上显示“下载”,没有任何进展。 而且正如预期的那样,由于没有下载语音数据,所以说方法不起作用。 当发生这种情况时,我会认为TTS方法setLanguage / isLanguageAvailable将返回LANG_MISSING_DATA来捕获这个状态,但是,它只是返回LANG_COUNTRY_AVAILABLE。 情况如下图所示: 我希望能够检测到所选语言环境的语音数据何时未被下载/丢失,并且要么发送Toast消息,要么直接用户下载它。 我已经看到几个postbuild议使用isLanguageAvailable像这样的使用。 我也看了一下android文档 ,好像isLanguageAvailable的返回值应该用LANG_MISSING_DATA来捕获缺less语音数据的状态。 我也尝试发送ACTION_CHECK_TTS_DATA意图作为另一种方式来检查我链接的Android文档中build议的缺失数据。 但是,resultCode再次未捕获/指示语音数据丢失(CHECK_VOICE_DATA_FAIL),而是返回了CHECK_VOICE_DATA_PASS。 在这种情况下,我应该如何捕获可用/支持的语言/区域的状态,并且缺less语音数据? 我也很好奇,为什么CHECK_VOICE_DATA_PASS和LANG_MISSING_DATA不是返回的值。 当语音数据丢失时,不应该返回这些值吗? 谢谢! 下面是我尝试在没有下载语音数据的语言环境中使用setLanguage和isLanguageAvailable时的返回值(0和1是日志中显示的方法的返回值,-1是对应于缺less语音的语法数据):

突出显示TTS引擎正在讲话的当前单词

我正在处理文本到语音的应用,但是我遇到了一个问题,我不知道TTS在说什么。 有什么办法可以find这个? 例如:如果TTS正在说这个string: 可能已经有你的答案的问题 ,当它已经达到“已经”时,我怎样才能突出“已经”。

TextToSpeech:不赞成在API Level 21中使用说话function

我尝试在我的应用程序中使用TextToSpeech, String text = editText.getText().toString(); tts.speak(text, TextToSpeech.QUEUE_FLUSH, null); 但是,在API Level 21中弃用了函数speak(String text,int queueMode,HashMap params)。取而代之,build议使用speak(CharSequence文本,int queueMode,Bundle params,String utteranceId)。 但我不知道如何设置它。 谢谢

onUtteranceCompleted没有被调用?

即使我正确设置: HashMap<String, String> myHashRender = new HashMap<String, String>(); myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "utid"); mTts.speak("Speak something", TextToSpeech.QUEUE_ADD, myHashRender); 也 mTts.setOnUtteranceCompletedListener(this); 在onInit函数中返回成功。 仍然onUtteranceCompleted不会被调用。 虽然有重复的问题,但没有我能find答案的地方。 我的活动还实现了OnUtteranceCompletedListener。 请帮忙。

如何暂停android.speech.tts.TextToSpeech?

我正在玩Android的TTS文本 – android.speech.tts.TextToSpeech 我使用: TextToSpeech.speak发言和停止。 有没有办法暂停文字呢?

Android“说话失败:不会绑定到tts引擎”

我的android应用程序有文字说function,然后一个活动使用此function。 所以创build了一个静态的辅助类来简化这个过程。 import java.util.Locale; import android.content.Context; import android.speech.tts.TextToSpeech; import android.speech.tts.TextToSpeech.OnInitListener; import android.util.Log; public class TextToSpeechController implements OnInitListener { private static final String TAG = "TextToSpeechController"; private TextToSpeech myTTS; private String textToSpeak; private Context context; private static TextToSpeechController singleton; public static TextToSpeechController getInstance(Context ctx) { if (singleton == null) singleton = new TextToSpeechController(ctx); return singleton; } […]