首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我对TextToSpeech做错了什么?

我对TextToSpeech做错了什么?
EN

Stack Overflow用户
提问于 2012-01-05 07:25:43
回答 1查看 441关注 0票数 0

我在这里设置了所有的文本到语音转换(或者我想是这样),但是当我去按我的应用程序上的按钮时,它就关闭了,并且没有说出我键入的内容,(现在我想知道这是不是因为我没有设置OnClickListener事件。原因是因为我真的知道如何用TextToSpeach设置OnClickListener事件,所以如果这是我的应用程序不能说话的原因,那么有人可以把我引到这方面的教程,这方面会有帮助。如果这不是原因,那么有人能解释一下我做错了什么吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    package com.write.it;

    import java.util.HashMap;
    import java.util.StringTokenizer;

    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.speech.tts.TextToSpeech;
    import android.speech.tts.TextToSpeech.OnInitListener;
    import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;  
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;

    public class Speech extends Activity implements OnInitListener, OnUtteranceCompletedListener {
    private EditText words = null;
    private Button speakBtn = null;
        private static final int REQ_TTS_STATUS_CHECK = 0;
    private static final String TAG = "TTS Demo";
        private TextToSpeech mTts;

        private int uttCount = 0;
        private HashMap<String, String> params = new HashMap<String, String>();

    /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        words = (EditText)findViewById(R.id.wordsToSpeak);
        speakBtn = (Button)findViewById(R.id.speak);

       // Check to be sure that TTS exists and is okay to use
       Intent checkIntent = new Intent();
       checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
       startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);
       }

   public void doSpeak(View view) {
    StringTokenizer st = new StringTokenizer(words.getText().toString(),",.");
    while (st.hasMoreTokens()) {
        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
                String.valueOf(uttCount++));
        mTts.speak(st.nextToken(), TextToSpeech.QUEUE_ADD, params);
     }
   }

   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       if (requestCode == REQ_TTS_STATUS_CHECK) {
        switch (resultCode) {
        case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:
            // TTS is up and running
            mTts = new TextToSpeech(this, this);
            Log.v(TAG, "Pico is installed okay");
            break;
        case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:
        case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:
        case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:
            // missing data, install it
            Log.v(TAG, "Need language stuff: " + resultCode);
            Intent installIntent = new Intent();
            installIntent.setAction(
                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
            break;
        case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
        default:
            Log.e(TAG, "Got a failure. TTS not available");
        }
    }
    else {
        // Got something else
    }
}

public void onInit(int status) {
    // Now that the TTS engine is ready, we enable the button
    if( status == TextToSpeech.SUCCESS) {
        speakBtn.setEnabled(true);
        mTts.setOnUtteranceCompletedListener(this);
    }
}

@Override
public void onPause()
{
    super.onPause();
    // if we're losing focus, stop talking
    if( mTts != null)
        mTts.stop();
}

@Override
public void onDestroy()
{
    super.onDestroy();
    mTts.shutdown();
}

public void onUtteranceCompleted(String uttId) {
    Log.v(TAG, "Got completed message for uttId: " + uttId);
    Integer.parseInt(uttId);
}
    }

新代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    package com.write.it;

   import java.util.HashMap;
   import java.util.StringTokenizer;

   import android.app.Activity;
   import android.content.Intent;
   import android.os.Bundle;
   import android.speech.tts.TextToSpeech;
   import android.speech.tts.TextToSpeech.OnInitListener;
   import android.speech.tts.TextToSpeech.OnUtteranceCompletedListener;
   import android.util.Log;
   import android.view.View;
   import android.widget.Button;
   import android.widget.EditText;

    public class Speech extends Activity implements OnInitListener, OnUtteranceCompletedListener {
private EditText words = null;
private Button speakBtn = null;
     private static final int REQ_TTS_STATUS_CHECK = 0;
  private static final String TAG = "TTS Demo";
     private TextToSpeech mTts;

private int uttCount = 0;
private HashMap<String, String> params = new HashMap<String, String>();

/** Called when the activity is first created. */
       @Override
       public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    words = (EditText)findViewById(R.id.wordsToSpeak);
    speakBtn = (Button)findViewById(R.id.speak);
    mTts = new TextToSpeech(this,
            this);  // TextToSpeech.OnInitListener


       // Check to be sure that TTS exists and is okay to use
        Intent checkIntent = new Intent();
        checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
        startActivityForResult(checkIntent, REQ_TTS_STATUS_CHECK);
      }



      public void doSpeak(View view) {
    StringTokenizer st = new StringTokenizer(words.getText().toString(),",.");
    while (st.hasMoreTokens()) {
        params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
                String.valueOf(uttCount++));
        mTts.speak(st.nextToken(), TextToSpeech.QUEUE_ADD, params);
     }
    speakBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // /TODO Auto-generated method stub
            doSpeak(v);

        }
     });

      }

     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQ_TTS_STATUS_CHECK) {
        switch (resultCode) {
        case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:
            // TTS is up and running
            mTts = new TextToSpeech(this, this);
            Log.v(TAG, "Pico is installed okay");
            break;
        case TextToSpeech.Engine.CHECK_VOICE_DATA_BAD_DATA:
        case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_DATA:
        case TextToSpeech.Engine.CHECK_VOICE_DATA_MISSING_VOLUME:
            // missing data, install it
            Log.v(TAG, "Need language stuff: " + resultCode);
            Intent installIntent = new Intent();
            installIntent.setAction(
                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
            startActivity(installIntent);
            break;
        case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
        default:
            Log.e(TAG, "Got a failure. TTS not available");
        }
    }
    else {
        // Got something else
      }
      }

     public void onInit(int status) {
    // Now that the TTS engine is ready, we enable the button
    if( status == TextToSpeech.SUCCESS) {
        mTts.setOnUtteranceCompletedListener(this);
    }
   }

   @Override
   public void onPause()
    {
    super.onPause();
    // if we're losing focus, stop talking
    if( mTts != null)
        mTts.stop();
   }

     @Override
           public void onDestroy()
   {
        super.onDestroy();
         mTts.shutdown();
        }

     public void onUtteranceCompleted(String uttId) {
    Log.v(TAG, "Got completed message for uttId: " + uttId);
    Integer.parseInt(uttId);
     }


    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-05 07:34:04

您可以在doSpeak()方法中编写TTS speak方法。您甚至不需要调用这个方法doSpeak()。那你怎么能说出来呢。

在speak按钮中设置一个监听器,并在该监听器中调用doSpeak()。如果它还是不说话,请告诉我。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8738995

复制
相关文章
“我”为什么做测试
什么是测试?其实关于测试的名词解释,作者不再进行阐述。用最简短的话来描述测试,就是发现软件缺陷,并验证功能可用。
wangmcn
2022/10/30
3580
大佬,我代码哪错了?
问题无处不在 我: “大佬,帮我看看这个问题错在哪了?” 大佬: “你的代码呢、你的错误提示呢?” 我: “好的,我发给你” 大佬: “。。。 再见” 留下一脸懵逼的我 如何解决问题 最简单的方法是根据错误提示,查看对应位置的代码,Pycharm会提示具体是哪一行代码有问题,并抛出错误。 找到错误首先应自己想办法解决,自己解决又分为几种:有经验的大佬看到Error就知道是哪里有问题了,没经验怎么办,那就自己去搜索了。 下个结论,你遇到的问题,前人一定遇到过。 所以你只需要把你的错误提示搜索就好了
小歪
2018/04/04
7980
大佬,我代码哪错了?
我想知道到底谁错了
最近在做GEO数据挖掘的文章复现,文章标题是“Identification of Hub Genes and Pathways of Triple Negative Breast Cancer by Expression Profiles Analysis”,链接如下:https://pubmed.ncbi.nlm.nih.gov/33688252/
生信技能树
2021/07/06
3880
我发现 Linux 文档写错了
周末的时候,有位读者疑惑为什么 Linux man 手册中关于 netstat 命令中的 tcp listen 状态下的 Recv-Q 和 Send-Q 这两个信息的描述跟我的图解网络写的不一样?
小林coding
2022/05/21
1.4K0
我发现 Linux 文档写错了
对不起,我错了,这代码不好写
文章介绍了Sentinl的自适应缓存时间戳算法,从原理到实现都手把手解读了,而且还发现Sentinel-Go还未实现这个自适应算法,于是我就觉得,这简单啊,把Java代码翻译成Go不就可以混个PR?
龟仙老人
2022/06/01
2870
关于MVCC,我之前写错了,这次我改好了!
关于MVCC的原理,在《我想进大厂》之mysql夺命连环13问写过一次,但是当时写的其实并不准确,这个理解可以应付面试,帮助快速理解,但是他的真正实现原理我想再次拿出来说一说。
艾小仙
2021/03/02
4250
关于MVCC,我之前写错了,这次我改好了!
当我做 hackathon 时我在做什么 (2)
前文中提到,我做的第二个项目是个可视化的项目,名字叫 deneb。deneb 是天鹅座的一等星,也是夏季大三角和北十字两个星群的端点之一。deneb 是对 vega-lite 的封装,受 同样封装了 vega-ltie,深得我喜爱的 Python 的库 altair 的启发。嗯,deneb - vega - altair,聪明的你一定想到了我为什么起这样一个名字:
tyrchen
2021/01/29
2K0
当我做 hackathon 时我在做什么 (2)
当我做 hackathon 时我在做什么 (1)
从上周四开始的周末(1/7-1/10),是 Tubi 一年一度的 OSS-a-thon。所谓 OSS-a-thon,是我们为了回馈开源社区举办的 hackathon,参与者需要做和开源项目有关的项目 — 可以是对已有的开源项目进行改进,提交 PR,或者做新的项目,但需要开源。
tyrchen
2021/01/29
1.1K0
当我做 hackathon 时我在做什么 (1)
当我做 hackathon 时我在做什么 (3)
治大国若烹小鲜。做 hackathon 也是如此:需要有合适的方法(能),合适的工具(贤),然后朝着目标方向不疾不徐,缓步前进(有所为有所不为)。
tyrchen
2021/01/29
6940
当我做 hackathon 时我在做什么 (3)
为什么我要为开源社区做贡献|你也应该这样做
客座文章最初由Sysdig高级软件工程师Marky Jackson(@markyjackson5)在Upshot上发表
CNCF
2020/02/24
7600
为什么对gRPC做负载均衡会很棘手?
在过去的几年中,随着微服务的增长,gRPC在这些较小的服务之间的相互通信中获得了很大的普及,在后台,gRPC使用http/2在同一连接和双工流中复用许多请求。
全球技术精选
2021/03/03
2.5K0
为什么对gRPC做负载均衡会很棘手?
观点 | 为什么我对MATLAB情有独钟
选自Medium 作者:Christopher Madan 机器之心编译 参与:路雪、黄小天 本文作者 Christopher Madan 喜欢用 MATLAB 编程,尽管他是一个认知心理学家/神经科学家,编程对其来讲更多地是一个完成目标的工具。这篇文章的灵感来自 Olivia Guest 的博文《I hate Matlab: How an IDE, a language, and a mentality harm》,Olivia Guest 称自己不喜欢 MATLAB 不只是因为它是一款闭源、付费的软件,
机器之心
2018/05/09
9690
观点 | 为什么我对MATLAB情有独钟
Next.js,到底为什么这样对我?
Hi,我是 ssh,今天给大家分享一篇关于 Next.js 的吐槽。作为一个想要产品化的框架,提供一致的 API 和易用性是必不可缺的。但是 Next 不知道是傲慢还是疏忽,让框架开发者 Pilcro
ssh_晨曦时梦见兮
2023/10/14
5040
RedisTemplate:我不背锅,是你用错了
我也有点懵,第一反应就是 RedisTemplate 和 StringRedisTemplate 会不会用的两个不同的 Connection,导致相同的 Key 一个能查到,一个不能查到。
猿天地
2020/03/11
1.3K0
RedisTemplate:我不背锅,是你用错了
我为什么反对用异常做流程控制?
像SSH/M这种基础框架的出现,让不少程序员“瘫痪”成了流水线工人。以前小心翼翼方能写就的逻辑分支判断,演变成了直接丢个异常然后坐等AOP拦截处理,此时的拦截器就是个垃圾处理厂。这种似乎失控的编码方式,让我想到了邪恶的“GoTo”语法,很多编程语言里都有它, 但是都不建议你用它。因为邪恶的不是GoTo本身,而是滥用GoTo的我们。
曲水流觞
2019/10/27
4K2
我做网站要选什么后缀,.com还是.top?
4、做好了就是自己的流量,不至于为他人做嫁衣,如果你用top,做好了会导流到com和cn,得不偿失。
梅子玩域名
2021/08/19
3.2K0
RedisTemplate:我不背锅,是你用错了
今天分享一个 RedisTemplate 的问题,感兴趣的可以继续看下去了,不感兴趣的继续撩妹去吧!
程序猿Damon
2020/11/09
4280
RedisTemplate:我不背锅,是你用错了
为什么我对JavaScript的未来持乐观态度?
Lee Robinson 写了一篇《Why I'm Optimistic About JavaScript's Future》 表达对 JavaScript 未来的看好。
前端小智@大迁世界
2023/01/13
9120
为什么我对JavaScript的未来持乐观态度?
讲真,我发现这本书有个地方写错了!
我手上这本《Java并发编程的艺术》的版次是:2019年3月第1版第14次印刷。
why技术
2019/10/15
4440
讲真,我发现这本书有个地方写错了!
💡我居然用错了useMemo和useCallback这么久?
我们知道,useMemo和useCallback主要作用是缓存中间状态,减少无意义的的render从而提高性能。但是最近我发现我对它们的使用一直有误解!
萌萌哒草头将军
2023/06/08
2280
💡我居然用错了useMemo和useCallback这么久?

相似问题

我对SurfaceView做错了什么?

13

我对HSV做错了什么?

11

我对Tensorflow做错了什么?

212

我对XPath做错了什么?

30

我对tkinter做错了什么?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文