• Texttospeech 入门与进阶学习笔记(android)


    1,入门:让TEXT朗读起来

    官方TTS朗读支持语言种类  
    English 英语
    French 法语
    German 德语
    Italian 意大利语
    Spanish 西班牙语
    不支持中文…  
    //1,先写一个用来检查tts是否安装的方法
    private final static int CHECK_CODE = 1;
    	public void checkTts(){
    		Intent checkIntent = new Intent();
    		checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    			
    	startActivityForResult(checkIntent, CHECK_CODE);
    		
    	}
    	//创建一个TTS
    	private TextToSpeech mTts;
    	
    //这个自己先去了解下onActivityResult是怎么回事,这里不作详解
    	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    		// TODO Auto-generated method stub
    		super.onActivityResult(requestCode, resultCode, data);
    		if(requestCode == CHECK_CODE){
    			if(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){
    				//成功创建一个TTS
    				mTts = new TextToSpeech(this, this);
    			}else{
    				//否则安装一个
    				Intent installIntent = new Intent();
    				installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
    				startActivity(installIntent);
    			}
    		}
    	}
    //2,让TTS朗读起来
    //onCreate方法中
    //检查TTS是否正常
    checkTts();
    		
    //创建用组件
    private speakValue = (EditText) findViewById(R.id.speakValue);
    private speakButton = (Button) findViewById(R.id.sayHello);
    		
    speakButton.setOnClickListener(new OnClickListener() {
    			
    			@Override
    			public void onClick(View v) {
    				// TODO Auto-generated method stub
    				String text = speakValue.getText().toString();
    				Log.d("result","text-->" +text);
    				sayTts(text);
    			}
    		});
    //TTs朗读用
    private void sayTts(String text){
    //最简单的例子
    mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    		
    		
    	}
    //补充,使用TTS朗读,一定要实现OnInitListener 接口
    //TTs对象创建后初始化
    @Override
    public void onInit(int status) {
    		
    if(status == TextToSpeech.SUCCESS){
    //设置语言区域
    int result = mTts.setLanguage(Locale.US);
    //如果是不支持语言
    if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){
    Log.e("error","不支持");
    			}
    		}
    	}

    image 就这么点代码就可以正常运行了…

    2,进阶使用:改变我们朗读播放的类型,回调函数的使用与自定义文字发音

    1,更改播放的流类型(暂且这样说,希望,有人解释一下)

    //更改播放使用的流类型
    //在sayTts作以下修改
    //TTs朗读用
    private void sayTts(String text)
    {
    HashMap<String, String> myAlarm = new HashMap();
    //把播放类型,通过闹钟流实现
    myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
    String.valueOf(AudioManager.STREAM_ALARM));
    
    //你播放的tts在音频播放的闹钟类型流中
    mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myAlarm);
    
    //英语原文是这样,我了解的就是以上我注释的内容
    //我感觉不是很了解,希望有人帮帮
    //On Android, each audio stream that is played is associated with one //stream type, as defined in android.media.AudioManager. For a talking //alarm clock, we would like our text to be played on the //AudioManager.STREAM_ALARM stream type so that it respects the alarm //settings the user has chosen on the device. 			
    }
     

    2,回调函数的使用

    //在sayTts()中实现..
    //需要实现OnUtteranceCompletedListener这个接口
    //TTs朗读用
    
    private Toast toast;
    prvate Context context = getApplicationContext();
    private void sayTts(String text)
    {
    HashMap<String, String> myAlarm = new HashMap();
    
    mTts.setOnUtteranceCompletedListener(this);
    myAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "me too");
    
    toast = Toast.makeText(context, "me too", Toast.LENGTH_LONG);
    //最简单的例子
    mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myAlarm);
    }
    
    //回调函数
    @Override
    public void onUtteranceCompleted(String utteranceId) {
    speakPlayBack(utteranceId);
    }
    private void speakPlayBack(String str) {
    Log.d("result","playBack-->" + str);
    toast.show();
    }

    image

    3,录制TTS朗读保存到SD卡中

    //把TTS朗读结果保存
    private void sayTofile(String text)
    {
    HashMap<String, String> ttsRender = new HashMap<String, String>();
    String destFileName = "/sdcard/tts/"+text+".wav";
    ttsRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text);
    mTts.synthesizeToFile(text, ttsRender, destFileName);
    }
    //在onclick方法中运行sayTofile()即可

    image 你就可以看到你刚才朗读的Text被保存了

    4,自定义Text发音

    //自定义文字播放
    private void sayTrue(String text)
    {
    String destFileName = "/sdcard/tts/"+text+".wav";
    mTts.addSpeech(text, destFileName);
    mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
    }
    //在onclick方法中运行
    sayTrue();

    image 亲测,MP3也可以播放…

    5,销毁

        @Override
        protected void onDestroy() {
        	   super.onDestroy();
        	if(mTts != null){
        		mTts.stop();
        		mTts.shutdown();
        	}
        }
     
  • 相关阅读:
    node拦截器设置
    node中session存储与销毁,及session的生命周期
    node做验证码
    防止iframe被别的网站引用
    表单元素disabled禁用后不能自动提交到服务器
    bootstrap 模态框中弹出层 input不能获得焦点且不可编辑
    post请求和get请求content_type的种类
    Firefly在线一键安装
    Firefly通讯协议-
    Firefly《暗黑世界》碎片合成部分代码
  • 原文地址:https://www.cnblogs.com/youxilua/p/2173426.html
Copyright © 2020-2023  润新知