今天在开发中做了一个文字转为语音的功能,入了很多坑。

首先我采用的是科大讯飞的在线语音合成技术。写完之后他可以在低版本的手机上读出来,但是再高版本的7.0以上就读不出来,都听不懂再读什么。

下面贴出我的代码: 首先再科大讯飞官网创建应用,拿到APPID 然后再生成sdk jar包 这个我就不拿出来了 非常简单去官网搞一下就行

这个是文字转语音的工具类:
public class AudioUtils { private static AudioUtils audioUtils; private
SpeechSynthesizer mySynthesizer; public AudioUtils() { } /** * 描述:单例 * 作者:卜俊文 *
邮箱:[email protected] * 创建时间: 2016/8/19 14:38 */ public static AudioUtils
getInstance() { if (audioUtils == null) { synchronized (AudioUtils.class) { if
(audioUtils == null) { audioUtils = new AudioUtils(); } } } return audioUtils;
} private InitListener myInitListener = new InitListener() { @Override public
void onInit(int code) { Log.d("mySynthesiezer:", "InitListener init() code = "
+ code); } }; /** * 描述:初始化语音配置 * 作者:卜俊文 * 邮箱:[email protected] * 创建时间: 2016/8/19
14:38 */ public void init(Context context) { //处理语音合成关键类 mySynthesizer =
SpeechSynthesizer.createSynthesizer(context, myInitListener); //设置发音人
mySynthesizer.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置音调
mySynthesizer.setParameter(SpeechConstant.PITCH, "50"); //设置音量
mySynthesizer.setParameter(SpeechConstant.VOLUME, "50");
mySynthesizer.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);
} /** * 描述:根据传入的文本转换音频并播放 * 作者:卜俊文 * 邮箱:[email protected] * 创建时间: 2016/8/19
14:39 */ public void speakText(String content) { int code =
mySynthesizer.startSpeaking(content, new SynthesizerListener() { @Override
public void onSpeakBegin() { } @Override public void onBufferProgress(int i,
int i1, int i2, String s) { } @Override public void onSpeakPaused() { }
@Override public void onSpeakResumed() { } @Override public void
onSpeakProgress(int i, int i1, int i2) { } @Override public void
onCompleted(SpeechError speechError) { } @Override public void onEvent(int i,
int i1, int i2, Bundle bundle) { } }); } }
使用的时候再Application注册 初始化一下,
SpeechUtility.createUtility(getApplicationContext(),
"appid=你创建应用的时候生成的APPID");
AudioUtils.getInstance().init(getApplicationContext());
使用:
AudioUtils.getInstance().speakText("你好");
这个我不知道怎么适配高版本的手机,所以没有采用这种方式。

我使用的是Android 系统自带的文字转语音 这种方式很简单也非常好用,(简单粗暴直接实现你想要的效果)

直接上手撸代码:
private TextToSpeech mTextToSpeech; private void speakChina(){ //设置朗读语言
mTextToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
@Override public void onInit(int status) { if (status==TextToSpeech.SUCCESS) {
//设置朗读语言 int supported= mTextToSpeech.setLanguage(Locale.US); if
((supported!=TextToSpeech.LANG_AVAILABLE)&&(supported!=TextToSpeech.LANG_COUNTRY_AVAILABLE))
{ Toast.makeText(sAppContext, "不支持当前语言!", Toast.LENGTH_SHORT).show(); } } } });
}封装的一个方法
使用 
mTextToSpeech.speak("这个填你想要转成语音的文字", TextToSpeech.QUEUE_FLUSH, null);
好了这就实现了文字转语音的功能。

希望能对猿们提供一些帮助!