Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从文字到演讲结束后,我如何祝酒_Android_Text To Speech_Speech To Text - Fatal编程技术网

Android 从文字到演讲结束后,我如何祝酒

Android 从文字到演讲结束后,我如何祝酒,android,text-to-speech,speech-to-text,Android,Text To Speech,Speech To Text,演讲结束后,我如何祝酒。事实上,我想做的不仅仅是记录。 这是我的密码 public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener, TextToSpeech.OnUtteranceCompletedListener { private TextToSpeech mTts; Button btnSpeak; EditText editTextTTS;

演讲结束后,我如何祝酒。事实上,我想做的不仅仅是记录。 这是我的密码

public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener, TextToSpeech.OnUtteranceCompletedListener {

    private TextToSpeech mTts;
    Button btnSpeak;
    EditText editTextTTS;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTts = new TextToSpeech(this,this);
        editTextTTS =(EditText)findViewById(R.id.editText);
        btnSpeak = (Button)findViewById(R.id.btnSpeakTest);
        btnSpeak.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                speak(editTextTTS.getText().toString());
            }
        });




    }
    private void speak(String word){
        if(word != null) {
            HashMap<String, String> myHashAlarm = new HashMap<String, String>();
            myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
            myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "Hello");
            mTts.speak(word, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
        }
    }

    @Override
    public void onInit(int status) {
        if(status == TextToSpeech.SUCCESS) {
            mTts.setOnUtteranceCompletedListener(this);
        }
    }

    @Override
    public void onUtteranceCompleted(String utteranceId) {
        Log.i("CALLBACK", utteranceId); //utteranceId == "SOME MESSAGE"
        Toast.makeText(getApplicationContext(),"Call Back",Toast.LENGTH_LONG).show();// I Cannot Toast here. Or do something more than Log
    }
公共类MainActivity扩展AppCompativeActivity实现TextToSpeech.OnInitListener、TextToSpeech.OnutternanceCompletedListener{
私有文本语音MTT;
按钮Btnpeak;
编辑文本编辑文本;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTts=新的TextToSpeech(这个,这个);
editTextTTS=(EditText)findViewById(R.id.EditText);
btnSpeak=(按钮)findViewById(R.id.btnSpeak测试);
btnSpeak.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
说话(editTextTTS.getText().toString());
}
});
}
专用void speak(字符串字){
if(word!=null){
HashMap myHashAlarm=新建HashMap();
myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,String.valueOf(AudioManager.STREAM_ALARM));
myHashAlarm.put(TextToSpeech.Engine.KEY\u PARAM\u outrance\u ID,“Hello”);
mTts.speak(word、TextToSpeech.QUEUE\u FLUSH、myHashAlarm);
}
}
@凌驾
公共无效onInit(int状态){
if(status==TextToSpeech.SUCCESS){
mTts.setOnPatternanceCompletedListener(此);
}
}
@凌驾
公共void onutternancecompleted(字符串utternanceid){
Log.i(“回调”,outtanceid);//outtanceid==“一些消息”
Toast.makeText(getApplicationContext(),“callback”,Toast.LENGTH_LONG).show();//我不能在这里Toast,也不能在日志之外执行其他操作
}
事实上,我想在文本到语音结束讲话后调用语音到文本。如何用这种方法做一些事情

03-14 14:35:16.6525473-5489/com.example.thummawit.testttscallback I/CALLBACK:Hello 03-14 14:35:16.667 5473-5489/com.example.thummawit.testttscallback W/Binder:从Binder存根实现捕获到运行时异常。 java.lang.RuntimeException:无法在未调用Looper.prepare()的线程内创建处理程序 android.os.Handler.(Handler.java:200) 位于android.os.Handler.(Handler.java:114) 在android.widget.Toast$TN.(Toast.java:459) 在android.widget.Toast.(Toast.java:120) 位于android.widget.Toast.makeText(Toast.java:289) 位于com.example.thummawit.testttscallback.MainActivity.onutternanceCompleted(MainActivity.java:59) 在android.speech.tts.outtanceProgressListener$1.onDone(outtanceProgressListener.java:73) 位于android.speech.tts.TextToSpeech$Connection$1.onSuccess(TextToSpeech.java:2158) 位于android.speech.tts.ITextToSpeechCallback$Stub.onTransact(ITextToSpeechCallback.java:63) 位于android.os.Binder.execTransact(Binder.java:446)


您尝试在非UI(主)线程的线程中显示
Toast
。 你应该改变这个

@Override
public void onUtteranceCompleted(String utteranceId) {
    Log.i("CALLBACK", utteranceId); //utteranceId == "SOME MESSAGE"
    Toast.makeText(getApplicationContext(),"Call     Back",Toast.LENGTH_LONG).show();// I Cannot Toast here. Or do something more than Log
}
进入这个

@Override
public void onUtteranceCompleted(String utteranceId) {
    Log.i("CALLBACK", utteranceId); //utteranceId == "SOME MESSAGE"

    runOnUiThread(new Runnable() {

        public void run() {
            Toast.makeText(getApplicationContext(),"Call Back",Toast.LENGTH_LONG).show();
        }
    });
}

这样,您的代码将被分派到主线程,在主线程中,您可以显示
Toast
s

onutternancecompleted。不推荐使用onutternanceprogresslistener

代码片段

textToSpeech=new TextToSpeech(this, new TextToSpeech.OnInitListener() {
    @Override
    public void onInit(int status) {
        if (status==TextToSpeech.SUCCESS){
            int result=textToSpeech.setLanguage(Locale.ENGLISH);

            if (result==TextToSpeech.LANG_MISSING_DATA||result==TextToSpeech.LANG_NOT_SUPPORTED){
                Log.i("TextToSpeech","Language Not Supported");
            }

            textToSpeech.setOnUtteranceProgressListener(new UtteranceProgressListener() {
                @Override
                public void onStart(String utteranceId) {
                    Log.i("TextToSpeech","On Start");
                }

                @Override
                public void onDone(String utteranceId) {
                    Log.i("TextToSpeech","On Done");
                }

                @Override
                public void onError(String utteranceId) {
                    Log.i("TextToSpeech","On Error");
                }
            });

        }else {
            Log.i("TextToSpeech","Initialization Failed");
        }
    }
});

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    textToSpeech.speak(text,TextToSpeech.QUEUE_FLUSH,null,TextToSpeech.ACTION_TTS_QUEUE_PROCESSING_COMPLETED);
}