使用TextToSpeech朗读文字

article/2025/10/5 2:05:24

1.使用TextToSpeech将一段文字转换为语音

android也可以实现把输入的文字朗读出来,使用到的是TextToSpeech,将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。

 不过目前只支持5种语言:English、 French 、 German 、 Italian 和 Spanish。(真遗憾,没有Chinese)

具体代码实现

xml布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.luuuzi01.voicebroadcast.MainActivity"><RelativeLayoutandroid:layout_width="368dp"android:layout_height="495dp"tools:layout_editor_absoluteY="8dp"tools:layout_editor_absoluteX="8dp"><EditTextandroid:id="@+id/et_voice_content"android:layout_width="368dp"android:layout_height="wrap_content"tools:layout_editor_absoluteY="0dp"tools:layout_editor_absoluteX="8dp"/><Buttonandroid:id="@+id/btn_play"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="播放"tools:layout_editor_absoluteY="0dp"tools:layout_editor_absoluteX="0dp"android:layout_marginTop="12dp"android:layout_below="@+id/et_voice_content"android:layout_alignParentLeft="true"android:layout_alignParentStart="true" /></RelativeLayout>
</android.support.constraint.ConstraintLayout>
mainActivity代码

package com.example.luuuzi01.voicebroadcast;import android.speech.tts.TextToSpeech;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import java.util.Locale;/*** android也可以实现把输入的文字朗读出来,使用到的是TextToSpeech,* 不过目前只支持5种语言:English、 French 、 German 、 Italian 和 Spanish。(真遗憾,没有Chinese)*/
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener {private String tag;private EditText et_voice_content;private Button btn_play;//TextToSpeech类private TextToSpeech tts;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tag="MainActivity";et_voice_content = (EditText) findViewById(R.id.et_voice_content);btn_play = (Button) findViewById(R.id.btn_play);/***  1.创建对象  参数1(Context),参数2(TextToSpeech.OnInitListener)*/// 朗读文字的类tts = new TextToSpeech(this, this);btn_play.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {/*** 3.设置朗读参数 *///设置音调,值越大声音越尖(女生),值越小则变为男生,1.0位常规tts.setPitch(1.0f);//设置语速tts.setSpeechRate(0.3f);if (et_voice_content.getText().length() >= 1) {// Toast.makeText(MainActivity.this,et_voice_content.getText().toString(),Toast.LENGTH_SHORT).show();/*** 4.开始朗读*///开始朗读tts.speak(et_voice_content.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);} else {Toast.makeText(MainActivity.this, "内容为空", Toast.LENGTH_SHORT).show();}}});}/*** 2.初始化TextToSpeech引擎* status:SUCCESS或ERROR这2个值* setLanguage设置语言,帮助文档里面写了有22种* TextToSpeech.LANG_MISSING_DATA:表示语言的数据丢失。* TextToSpeech.LANG_NOT_SUPPORTED:表示语音不支持  -2* LANG_COUNTRY_AVAILABLE  1 表示本地语音或者方言可用,引申语音不可用*/@Overridepublic void onInit(int status) {if (status == tts.SUCCESS) {// Toast.makeText(MainActivity.this,"成功输出语音",// Toast.LENGTH_SHORT).show();// Locale loc1=new Locale("us");// Locale loc2=new Locale("china");//设置使用美式英语朗读int result1 = tts.setLanguage(Locale.US);//设置支持中文,实现不了只能用讯飞或者百度的sdk//int result2 = tts.setLanguage(Locale.CHINESE);
//            result2 == TextToSpeech.LANG_MISSING_DATA
//                    || result2 == TextToSpeech.LANG_NOT_SUPPORTEDif (result1 == TextToSpeech.LANG_MISSING_DATA|| result1==TextToSpeech.LANG_NOT_SUPPORTED){Toast.makeText(this, "数据丢失或不支持:"+result1+";", Toast.LENGTH_SHORT).show();}}}/*** 5.关闭tts*/@Overrideprotected void onDestroy() {super.onDestroy();if (tts != null) {//停止tts.stop();//关闭tts.shutdown();}}
}布局效果

2.使用第三方科大讯飞平台的语音识别功能

使用步骤:
1.导入sdk:eclipse 将在官网下载的Android SDK 压缩包中libs目录下所有子文件拷贝至Android工程的libs目录下。如下图所示:
android studio则导入到应该将so文件都放在main下面的jniLibs下面,如果没有这个文件夹,那么手动的创建


android studio导入


2.添加权限

<!--连接网络权限,用于执行云端语音能力 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<!--读取网络信息状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--获取当前wifi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许程序改变网络连接状态 -->
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<!--读取手机信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--读取联系人权限,上传联系人需要用到此权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<!--外存储写权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--外存储读权限,构建语法需要用到此权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!--配置权限,用来记录应用配置信息 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!--手机定位信息,用来为语义等功能提供定位,提供更精准的服务-->
<!--定位信息是敏感信息,可通过Setting.setLocationEnable(false)关闭定位请求 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--如需使用人脸识别,还要添加:摄相头权限,拍照需要用到 -->
<uses-permission android:name="android.permission.CAMERA" />
3.初始化

初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

// 将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn
// 请勿在“=”与appid之间添加任何空字符或者转义符
SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");
下面就可以开始用其中的功能了

语音听写

代码:

//语音听写:将一段语音转换成文本,把语音中包含文字信息提取出来,并可以优先识别用户手机特有的联系人和个性化数据。findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//语音识别(SpeechRecognizer),包括听写、语法识别功能// 1.创建语音识别对象SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(mContext, null);//2.设置听写参数,mIat.setParameter(SpeechConstant.DOMAIN,"iat");mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//语言mIat.setParameter(SpeechConstant.ACCENT,"mandarin");//口音:mandarin普通话//3.开始听写mIat.startListening(mReconListener);}});//听写监听器private RecognizerListener mReconListener=new RecognizerListener() {//volume:音量值0~30,,data:音频数据@Overridepublic void onVolumeChanged(int volume, byte[] data) {// TODO Auto-generated method stub}//听写结果回调接口(返回json接口)//一般情况下会通过onResult()接口多次返回结果,完整识别内容是多次结果的累加//关于json的代码详见demo中jsonParser类//isLast等于true时,会话结束@Overridepublic void onResult(com.iflytek.cloud.RecognizerResult result, boolean isLast) {//打印返回结果Log.i(tag, "result:"+result.getResultString());Log.i(tag, "isLast:"+isLast);}//扩展接口@Overridepublic void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {// TODO Auto-generated method stub}//会话发生错误时回调接口@Overridepublic void onError(SpeechError error) {// 获取错误码描述,}//结束录音@Overridepublic void onEndOfSpeech() {// TODO Auto-generated method stub}//开始录音@Overridepublic void onBeginOfSpeech() {// TODO Auto-generated method stub}};

语音听写Dialog

	//语音听写DialogfindViewById(R.id.button2).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//1.创建对象RecognizerDialog mDialog = new RecognizerDialog(mContext, null);//2.设置accent,language等参数mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//中文mDialog.setParameter(SpeechConstant.ACCENT,"mandarin");//3.设置回调接口mDialog.setListener(new RecognizerDialogListener() {@Overridepublic void onResult(com.iflytek.cloud.RecognizerResult result, boolean isLast) {//打印返回结果Log.i(tag, "result:"+result.getResultString());Log.i(tag, "isLast:"+isLast);}@Overridepublic void onError(SpeechError arg0) {// TODO Auto-generated method stub}});//4.显示DialogmDialog.show();}});

语音合成:将一段文字读出来

		//语音合成(SpeechSynthesizer):将一段文字读出来findViewById(R.id.button3).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 1.创建SpeechSynthesizer对象, 第二个参数:本地合成时传InitListenerSpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(mContext, null);// 2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类// 设置发音人(更多在线发音人,用户可参见 附录12.2
//				语言(LANGUAGE,中文、英文等)
//				方言(ACCENT,中文的普通话,粤语等)
//				发音人特征(性别,年龄,语气)
//				语速(SPEED)
//				音量(VOLUME)
//				语调(PITCH)
//				音频采样率(SAMPLE_RATE)mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); // 设置发音人,可以根据这个设置发言的方言mTts.setParameter(SpeechConstant.SPEED, "50");// 设置语速mTts.setParameter(SpeechConstant.VOLUME, "80");// 设置音量,范围0~100mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); // 设置云端// 设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”// 保存在SD卡需要在AndroidManifest.xml添加写SD卡权限// 仅支持保存为pcm和wav格式,如果不需要保存合成音频,注释该行代码mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");// 3.开始合成mTts.startSpeaking("床前明月光, 地上鞋两双, 一对狗男女,其中就有你!", null);}});

完整代码:

package com.luuuzi.d09;import com.iflytek.cloud.RecognizerListener;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechRecognizer;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.thirdparty.m;
import com.iflytek.cloud.ui.RecognizerDialog;
import com.iflytek.cloud.ui.RecognizerDialogListener;
import com.iflytek.speech.RecognizerResult;import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;public class MainActivity extends Activity {private String tag;private Context mContext;//语音识别//SpeechUtility mAsr;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tag="MainActivity";mContext=this;//初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。//建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下://将“12345678”替换成您申请的APPID,申请地址:http://www.xfyun.cn// 请勿在“=”与appid之间添加任何空字符或者转义符SpeechUtility.createUtility(mContext, SpeechConstant.APPID +"=59ec07e0");//语音听写:将一段语音转换成文本,把语音中包含文字信息提取出来,并可以优先识别用户手机特有的联系人和个性化数据。findViewById(R.id.button1).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//语音识别(SpeechRecognizer),包括听写、语法识别功能// 1.创建语音识别对象SpeechRecognizer mIat = SpeechRecognizer.createRecognizer(mContext, null);//2.设置听写参数,mIat.setParameter(SpeechConstant.DOMAIN,"iat");mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//语言mIat.setParameter(SpeechConstant.ACCENT,"mandarin");//口音:mandarin普通话//3.开始听写mIat.startListening(mReconListener);}});//语音听写DialogfindViewById(R.id.button2).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//1.创建对象RecognizerDialog mDialog = new RecognizerDialog(mContext, null);//2.设置accent,language等参数mDialog.setParameter(SpeechConstant.LANGUAGE, "zh_cn");//中文mDialog.setParameter(SpeechConstant.ACCENT,"mandarin");//3.设置回调接口mDialog.setListener(new RecognizerDialogListener() {@Overridepublic void onResult(com.iflytek.cloud.RecognizerResult result, boolean isLast) {//打印返回结果Log.i(tag, "result:"+result.getResultString());Log.i(tag, "isLast:"+isLast);}@Overridepublic void onError(SpeechError arg0) {// TODO Auto-generated method stub}});//4.显示DialogmDialog.show();}});//语音合成(SpeechSynthesizer):将一段文字读出来findViewById(R.id.button3).setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// 1.创建SpeechSynthesizer对象, 第二个参数:本地合成时传InitListenerSpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(mContext, null);// 2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类// 设置发音人(更多在线发音人,用户可参见 附录12.2
//				语言(LANGUAGE,中文、英文等)
//				方言(ACCENT,中文的普通话,粤语等)
//				发音人特征(性别,年龄,语气)
//				语速(SPEED)
//				音量(VOLUME)
//				语调(PITCH)
//				音频采样率(SAMPLE_RATE)mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); // 设置发音人,可以根据这个设置发言的方言mTts.setParameter(SpeechConstant.SPEED, "50");// 设置语速mTts.setParameter(SpeechConstant.VOLUME, "80");// 设置音量,范围0~100mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); // 设置云端// 设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”// 保存在SD卡需要在AndroidManifest.xml添加写SD卡权限// 仅支持保存为pcm和wav格式,如果不需要保存合成音频,注释该行代码mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");// 3.开始合成mTts.startSpeaking("床前明月光, 地上鞋两双, 一对狗男女,其中就有你!", null);}});}//听写监听器private RecognizerListener mReconListener=new RecognizerListener() {//volume:音量值0~30,,data:音频数据@Overridepublic void onVolumeChanged(int volume, byte[] data) {// TODO Auto-generated method stub}//听写结果回调接口(返回json接口)//一般情况下会通过onResult()接口多次返回结果,完整识别内容是多次结果的累加//关于json的代码详见demo中jsonParser类//isLast等于true时,会话结束@Overridepublic void onResult(com.iflytek.cloud.RecognizerResult result, boolean isLast) {//打印返回结果Log.i(tag, "result:"+result.getResultString());Log.i(tag, "isLast:"+isLast);}//扩展接口@Overridepublic void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {// TODO Auto-generated method stub}//会话发生错误时回调接口@Overridepublic void onError(SpeechError error) {// 获取错误码描述,}//结束录音@Overridepublic void onEndOfSpeech() {// TODO Auto-generated method stub}//开始录音@Overridepublic void onBeginOfSpeech() {// TODO Auto-generated method stub}};}


布局:







http://chatgpt.dhexx.cn/article/I6iwvSNS.shtml

相关文章

Android通过TextToSpeech实现文字转语音

一、直接上代码&#xff1a; import android.app.Activity; import android.os.Bundle; import android.speech.tts.TextToSpeech; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widge…

Android中TextToSpeech的使用

系列文章目录 Android中TextToSpeech的使用 文章目录 系列文章目录前言实现1.初始化语音。这是一个异步操作。初始化完成后调用oninitListener(第二个参数)。2.实现TextToSpeech.OnInitListener3.写一个朗读方法&#xff0c;在需要的时候触发&#xff08;如&#xff1a;点击事…

微软文本转语音小工具(Text to speech)

软件下载地址失效了&#xff0c;推荐使用网页版。 网站地址&#xff1a;Text To Speech - 在线文本转语音 话说一直在用最新的基于Chromium的微软Edge浏览器&#xff0c;绝对是我认为的最好的替代谷歌浏览器的软件了&#xff0c;拓展商店、账号书签插件同步、各种人性化功能应有…

TextToSpeech文本转语音

目录 一、TextToSpeech类中的常用方法 二、使用例子 MainActivity: activity_main: 效果图&#xff1a; 一、TextToSpeech类中的常用方法 TextToSpeech是一个Android平台提供的文本转语音功能&#xff0c;可以将文字快速地转换为语音播放。 方法名称功能setLanguage(Loc…

wereew

rtyhtyhj u y uikuiok,

werwerttwt

8987878898998 fgdfgd dfgdfgd dfgddg 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编…

wewqe

前言 又是一年一度的“剁手节”&#xff0c;在女生购物车里装满了化妆品、包包、衣服、鞋子等等东西时&#xff0c;有类人的购物车里的东西画风十分清奇&#xff0c;不落俗套。 这类人穿着统一、爱好相似、有明显的群体特征&#xff0c;这就是程序员们。 通常双十一&#xff0c…

Weave

weave网络通信模型 weave通过在docker集群的每个主机上启动虚拟的路由器&#xff0c;将主机作为路由器&#xff0c;形成互联互通的网络拓扑&#xff0c;在此基础上&#xff0c;实现容器的跨主机通信。其主机网络拓扑参见下图&#xff1a;如上图所示&#xff0c;在每一个部署Do…

Web Worker

Web Worker Web Worker?Web Worker 基本使用主线程Worker线程 Web Worker的优势在哪? Web Worker? 我们都知道JavaScript是单线程的&#xff0c;至于为什么是单线程的&#xff0c;以下内容来源阮一峰前辈的文章 作为浏览器脚本语言&#xff0c;JavaScript的主要用途是与用户…

werw er

TOCerwr wer wer wer 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能…

whisper

Robust Speech Recognition via Large-Scale Weak Supervision 介绍 大规模弱监督的训练。先前的方法都是通过大量的无监督学习训练&#xff08;无监督的数据容易收集&#xff0c;所以通过大量无监督的学习可以训练出一个质量较好的encoder&#xff09;。但是用的时候还需要找…

2015WPE封包刷Q币图文教程

首先进入魔域小组官网 www.myxzg.pw 然后观看免费的视频教程 土豆网观看地址:http://www.tudou.com/listplay/2tXberN2LlM/-6FhCm1CMv0.html

WPE详细教程一

这里讲的WPEPRO的使用方法 一、打开WPE&#xff0c;选择进程client.exe&#xff0c;切换到游戏打一段话(如9个1)&#xff0c;然后切出去按开始截取&#xff0c;切换到游戏反复粘贴刚才那复制好的9个1。 然后切出游戏按停止,就会出来一堆数字.其中找S包最简单的方法就是找位数相…

WPE详细教程

这里讲的WPEPRO的使用方法 一、打开WPE&#xff0c;选择进程client.exe&#xff0c;切换到游戏打一段话(如9个1)&#xff0c;然后切出去按开始截取&#xff0c;切换到游戏反复粘贴刚才那复制好的9个1。 然后切出游戏按停止,就会出来一堆数字.其中找S包最简单的方法就是找位数相…

Wpe工作原理和教程-以传奇为列

wpe所要改的&#xff0c;不是[游戏里面的数值]&#xff0c;而是[伪造信息封包]。 什么意思咧??就是我们用wpe所要改的&#xff0c;并不是"生命力由100变成10000"之类的东西&#xff0c; 这种东西无法用wpe改&#xff0c; 我们要改的可能是把"我卖了一个500元的…

WPE详细教程二

本教程的内容安排 本教程的安排如下:首先是讲为什么会有封包,封包的结构是怎样的。  然后介绍TCP/IP技术的相关内容,定位封包在网络传输中的层!  然后介绍WPE的工作界面,以及各功能按扭的作用!  前面的内容属于了解阶段的内容,帮助您了解相关内容,对下面的学习会…

WPE 过滤器 滤镜 用法

过滤所有数值匹配的数据包&#xff0c;并修改指定的bit位 打开游戏 打开WPE 附加游戏进程 选项配置 用来配置抓取发送和接收包类型 先抓取发送包&#xff0c;也就是游戏中主动发给服务器的包 点击开始抓包 输入喊话内容 分别输入1和2进行抓包 结束抓包 显示…

WPE详细教程三

关于滤镜 经过前面的讲解,大家该知道封包制作外挂的原理了,这里再深入讲解一点,作为封包,按道理只能修改封包,达到修改游戏的目的,其实,如果我们能更广泛地想一想,如果我们能分析封包,其实是可以制作出很强大的功能的,当然,如果让WPE分析封包,能达到的功能是有限的…

封包(一)(雷电模拟器+ProxyDroid+查尔斯3.93+WPE)

自从换了工作就没有给大家分享一些干活&#xff0c;在加上陪伴自己的孩子没有时间更新文章了&#xff0c;这只能在晚上给大家写文档了&#xff0c;我最近在游戏公司上班&#xff0c;研究封包。我把这些东西都做成了笔记&#xff0c;我想有些东西是大家都想弄明白的&#xff0c;…