Text-to-speech 入门与进阶学习笔记(android)

简介:

1,入门:让TEXT朗读起来


  
  
  1. //1,先写一个用来检查tts是否安装的方法 private final static int CHECK_CODE = 1;       
  2. public void checkTts(){           
  3. Intent checkIntent = new Intent();         checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);                     
  4. startActivityForResult(checkIntent, CHECK_CODE);               }       
  5. //创建一个TTS       
  6. private TextToSpeech mTts;         
  7. //这个自己先去了解下onActivityResult是怎么回事,这里不作详解       
  8. @Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {           
  9. // TODO Auto-generated method stub         super.onActivityResult(requestCode, resultCode, data);           
  10. if(requestCode == CHECK_CODE){               
  11. if(resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS){                   
  12. //成功创建一个TTS                   
  13. mTts = new TextToSpeech(this, this);               
  14. }else{                   
  15. //否则安装一个                   
  16. Intent installIntent = new Intent();                 installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);                 startActivity  
  17. (installIntent);             }         }     }   
  18. //2,让TTS朗读起来   
  19. //onCreate方法中   
  20. //检查TTS是否正常 checkTts();             
  21. //创建用组件 private speakValue = (EditText)   
  22. findViewById(R.id.speakValue);   
  23. private speakButton = (Button)   
  24. findViewById(R.id.sayHello);             
  25. speakButton.setOnClickListener(new OnClickListener() {                             
  26. @Override              
  27. public void onClick(View v) {                   
  28. // TODO Auto-generated method stub                   
  29. String text = speakValue.getText().toString();                   
  30. Log.d("result","text-->" +text);                 sayTts(text);             }         });   
  31. //TTs朗读用 private void sayTts(String text){   
  32. //最简单的例子 mTts.speak(text, TextToSpeech.QUEUE_FLUSH, null);                           
  33. }   
  34. //补充,使用TTS朗读,一定要实现OnInitListener 接口   
  35. //TTs对象创建后初始化   
  36. @Overridepublic void onInit(int status) {             
  37. if(status == TextToSpeech.SUCCESS){   
  38. //设置语言区域 int result = mTts.setLanguage(Locale.US);   
  39. //如果是不支持语言   
  40. if(result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED){   
  41. Log.e("error","不支持");             }         }     } 

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

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

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


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

2,回调函数的使用


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

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


  
  
  1. //把TTS朗读结果保存   
  2. private void sayTofile(String text) {   
  3. HashMap<String, String> ttsRender = new HashMap<String, String>();   
  4. String destFileName = "/sdcard/tts/"+text+".wav"; ttsRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, text); mTts.synthesizeToFile(text, ttsRender, destFileName);   
  5. }   
  6. //在  

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

4,自定义Text发音


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

亲测,MP3也可以播放…

5,销毁


  
  
  1. @Overrideprotected void onDestroy() {        super.onDestroy();       
  2. if(mTts != null){           
  3. mTts.stop();           
  4. mTts.shutdown();     } } 

相关文章
|
XML 数据库 Android开发
探索Android开发:从入门到精通的旅程
在这篇文章中,我们将一起踏上一段激动人心的旅程,通过深入浅出的方式,解锁Android开发的秘密。无论你是编程新手还是有经验的开发者,本文都将为你提供宝贵的知识和技能,帮助你构建出色的Android应用。我们将从基础概念开始,逐步深入到高级技巧和最佳实践,最终实现从初学者到专家的转变。让我们开始吧!
480 3
|
存储 前端开发 测试技术
Android kotlin MVVM 架构简单示例入门
Android kotlin MVVM 架构简单示例入门
729 1
|
Android开发 开发者
安卓开发中的自定义视图:从入门到精通
【9月更文挑战第19天】在安卓开发的广阔天地中,自定义视图是一块充满魔力的土地。它不仅仅是代码的堆砌,更是艺术与科技的完美结合。通过掌握自定义视图,开发者能够打破常规,创造出独一无二的用户界面。本文将带你走进自定义视图的世界,从基础概念到实战应用,一步步展示如何用代码绘出心中的蓝图。无论你是初学者还是有经验的开发者,这篇文章都将为你打开一扇通往创意和效率的大门。让我们一起探索自定义视图的秘密,将你的应用打造成一件艺术品吧!
301 10
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
504 7
|
IDE Java 程序员
安卓应用开发入门:打造你的第一个“Hello World”
【9月更文挑战第11天】在编程的世界里,每一个初学者的旅程都从一个简单的“Hello World”开始。本文将带领安卓开发的新手们,通过简单直观的方式,一步步构建出自己的第一个安卓应用。我们将探索安卓工作室(Android Studio)的安装、项目的创建,以及如何运行和调试你的应用。无论你是编程新手还是想扩展技能的老手,这篇文章都将为你打开一扇通往安卓世界的大门。
721 8
|
IDE Java API
安卓应用开发入门:打造你的第一个"Hello World"
【9月更文挑战第11天】在探索安卓开发的海洋中,每个开发者的航行都从简单的"Hello World"开始。本文将作为你的航标,引导你驶向安卓应用开发的精彩世界。我们将一起启航,通过浅显易懂的语言和步骤,学习如何构建并运行你的第一个安卓应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供所需的知识和信心。准备好了吗?让我们揭开安卓开发的神秘面纱,一起创造些令人兴奋的东西吧!
|
XML IDE Java
安卓应用开发入门:从零开始的旅程
【10月更文挑战第23天】本文将带领读者开启一段安卓应用开发的奇妙之旅。我们将从最基础的概念讲起,逐步深入到开发实践,最后通过一个简易的代码示例,展示如何将理论知识转化为实际的应用。无论你是编程新手,还是希望扩展技能的软件工程师,这篇文章都将为你提供有价值的指导和启发。
318 0
|
Web App开发 编解码 视频直播
视频直播技术干货(十二):从入门到放弃,快速学习Android端直播技术
本文详细介绍了Android端直播技术的全貌,涵盖了从实时音视频采集、编码、传输到解码与播放的各个环节。文章还探讨了直播中音视频同步、编解码器选择、传输协议以及直播延迟优化等关键问题。希望本文能为你提供有关Andriod端直播技术的深入理解和实践指导。
1007 0
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
2254 0
|
XML IDE Java
安卓应用开发入门:打造你的第一个“Hello World”
【8月更文挑战第31天】 在安卓的浩瀚宇宙中,每一个新星都从一句简单的问候开始闪耀。本文将作为你的航标,引导你探索安卓开发的银河系。无论你是初心者还是资深开发者,构建第一个“Hello World”应用总是令人兴奋的里程碑。通过这篇文章,我们将一起搭建起通往安卓开发世界的桥梁。让我们摒弃复杂的术语,用最简单直白的语言,一步步地走过这段旅程。准备好了吗?让我们一起开启这段冒险吧!

热门文章

最新文章