天天看点

Xamarin TTS Speak执行失败,且一直返回操作错误(TTS - BUG调试血泪史)Xamarin TTS Speak执行失败,且一直返回操作错误

Xamarin TTS Speak执行失败,且一直返回操作错误

最近用Xamarin做TTS开发,被一个BUG卡住项目进度:

ModelTest(只有两个类,测试TTS用),Monitor(现有项目,需要将TTS模块移植到该项目)

从ModelTest移植到Monitor无法进入TTS的oninit初始化函数,通过强制调用发现的确未初始化完成。为什么不执行初始化函数,如何解决?欢迎评论。

结论:目前问题解决了但原因仍未知,遇到同样问题的大佬可以参考下,希望可以帮到大家

调试开始时间:2018.7.16.17:30

调试完成时间:2018年7月19日01:25:16

调试耗时:一天半(累计TTS-BUG1(暂未分享)合计三天半)

解决方案尝试:

  • 各种多线程调用
  • 各种打断点
  • 各种清理
  • 各种配置尝试
  • 各种权限申请
  • 各种函数调用(从OnCreate到OnResume)
  • 从单例模式到直接实例化
  • 阅读各种内容(从字母数字到拼音汉字)
  • 能想到和能做到的我已经尽力了。唯一没做的就是通过软件设置语音引擎了(未完待续待验证)
求助大佬无数,解决无门,甚至官方文档对于错误的解释也只不过什么都没说
Xamarin TTS Speak执行失败,且一直返回操作错误(TTS - BUG调试血泪史)Xamarin TTS Speak执行失败,且一直返回操作错误

最终实现办法

鉴于之前BUG1解决过程中只能使用Click事件调用成功,尝试添加点击事件调用试试

添加的点击事件代码块:

prob = FindViewById<ProgressBar>(Resource.Id.progressBar_Init);
        prob.Click += Prob_Click;
        private void Prob_Click(object sender, EventArgs e)
        {
            Thread.Sleep();

            TTS.GetTTSInstance(this).Speak("内存中存储");
        }
           

事实证明,这是有效的,并且,并且,“并且”当我再次注释掉点击事件相关代码,回退到之前代码,也可以发声了,一切恢复了正常,一切恢复了平静,就像什么事情没发生一样。

可能是某一种类似激发的机制,是Xamarin的坑,也可能是自己太年轻,技术不够深入,忽略了什么细节。如果,我是说“如果”这是Xamarin的BUG,一定要打开任督二脉才能好好编程,那么和我一样在Xamarin爬坑的大佬们得仔细了。

我打坑里走过

2018年7月19日

Dawn