使用TTS Android

时间:2018-04-19 12:59:05

标签: c# android xamarin xamarin.android

最近我使用了android TTS - 我将文件保存为MP3并使用MediaPlayer播放,以便用户可以暂停/恢复等。

一切正常,除非我有一个大文本,它只是不起作用。

我读到android TTS的限制为4000 CHs?我该怎么做才能处理大量文本?

以下是我用来保存MP3的代码

Android.Speech.Tts.TextToSpeech textToSpeech;
...
textToSpeech = new Android.Speech.Tts.TextToSpeech(this, this, "com.google.android.tts");
...
textToSpeech.SynthesizeToFile(ReadableText, null, new Java.IO.File(System.IO.Path.Combine(documentsPath, ID + "_audio.mp3")), ID);

以下是我用来播放音频的代码

MediaPlayer MP = new MediaPlayer();
...
MP.SetDataSource(System.IO.Path.Combine(documentsPath, ID + "_audio.mp3"));
MP.Prepare();
MP.Start();

适用于少量文字,但不适用于大文字。

文件被保存(很可能只是一个损坏的文件),因为当我播放它时会出现以下错误

setDataSoruceFD failed: status=0x80000000
  

Java解决方案也可以接受

仅供参考 - 问题是关于最大文本大小,因为我可以生成较小文本的文件

干杯

1 个答案:

答案 0 :(得分:1)

在Android ASOP中(至少从API-18开始),TextToSpeech.MaxSpeechInputLength设置为4000

注意:OEM可以在其操作系统映像中更改此值,因此检查值并不做任何假设是明智的。

注意:您使用.mp3扩展名命名输出,但默认情况下,创建的文件格式为.wav,某些语音引擎支持其他格式/比特率/等。但是你为参数传递null。

除非您想要正确连接多个wave文件,否则我建议您将文本分成更小的部分并合成多个文件。

然后您可以按顺序播放这些(使用MediaPlayer Completion事件|侦听器)。