android 讯飞文档中语音停顿合成技巧

最近写android的时候碰到一个需求,就是当我们想要自己合成语音的时候,需要在播报一句话的某些位置进行几秒钟的停顿,比如想要合成这样的语音:"大家好,【停顿一秒】欢迎【停顿两秒】来到我的博客,如果有用【停顿一秒】,顶一下呗"。在讯飞的文档中,我没看到有实现这样功能的方法(看的并不仔细,android也才看了一个月)

我的实现方法是把这段文字先拆分,用split(String regex)把文字拆成字符串数组,参数当然是“【停顿一秒】”,这个停顿两秒怎么处理?当然是用两个【停顿一秒】代替,

这样就把原字符串切割成了多个字符串,再遍历数组播报出来就行了(每播报完一个停顿一秒)。这里【停顿两秒】会生成一个空字符串存进数组,当然也是有用的。空字符串不会发出声音,但是会形成停顿效果。其实还是很简单的。不多说,上代码:

//搞个工具类,
//private SpeechSynthesizer mTts;
//private int flag = 0;
public void startSpeaking(String playText) {
    final String[] texts = playText.split("【停顿一秒】");
    // 进行语音合成.
    if (mTts != null){
	//为了不影响主线程,重新开个异步线程
        new AsyncTask(){
            @Override
            protected Object doInBackground(Object[] params) {
                for (int i = 0; i < texts.length; i++) {
		//这是咱们讯飞文档中SpeechSynthesizer提供的播报语音方法
                    mTts.startSpeaking(texts[i],new SynthesizerListener(){
			//这里实现SynthesizerListener中该实现的方法即可,在这些方法中,我们主要用到onCompleted()这个方法,在这个方法中做以下控制
			//播放完语音会自动调用这个方法
			@Override
			public void onCompleted(SpeechError speechError) {
    				flag = 100;
    				try {
					//休眠1秒
        				Thread.sleep(1000);
    				} catch (InterruptedException e) {
       			 		e.printStackTrace();
    				}
			}
		    });
		//这里要让一定要卡住,我是用了死循环卡在这里,不让其自动往下走,否则会发现基本上只播报了数组中最后一段语音,因为代码执行的速度很快,
		//第一句话还没说完,可能刚发出第一个字的第一个音就会再次执行mTts.startSpeaking(texts[i+1],...)了
                    while (true){
			//搞个标示在这,只要当前语音播放完,就修改标识的值,让其跳出这个死循环,让他继续播放下一段语音,当然跳出之后需要再次赋值成0,否则下一次进来这里的时候,
			//就卡不住了
                        if (flag != 0){
                            break;
                        }
                    }
                    flag = 0;
                }
                return null;
            }
        }.execute();
    }
}


OK,现在调用这个方法,把我们需要播放的字符串传进去,就这么简单。


另一种方法,中文顿号"、"即可停顿,想停长时间,可多加几个。在来自http://blog.csdn.net/eastlhu/article/details/25436973看到的。


你好!对于在Android Studio使用语音合成,你可以按照以下步骤进行操作: 1. 首先,在你的Android项目添加语音合成SDK的依赖。你可以在项目的build.gradle文件的dependencies部分添加如下代码: ```groovy implementation 'com.iflytek:speech-plus:8.5.0' ``` 2. 接下来,在你的代码初始化语音合成引擎。你可以在Application的onCreate方法添加如下代码: ```java SpeechUtility.createUtility(context, SpeechConstant.APPID + "=你的APPID"); ``` 这里的"你的APPID"需要替换为你在开放平台申请到的APPID。 3. 然后,创建一个SpeechSynthesizer对象并进行相关配置。你可以在需要使用语音合成功能的地方添加如下代码: ```java SpeechSynthesizer mTts = SpeechSynthesizer.createSynthesizer(context, null); mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); // 设置发音人 mTts.setParameter(SpeechConstant.SPEED, "50"); // 设置语速 mTts.setParameter(SpeechConstant.VOLUME, "80"); // 设置音量 // 更多可设置的参数,请参考语音合成SDK的文档 ``` 这里的context是上下文对象,可以通过getApplicationContext()或者Activity实例来获取。 4. 最后,调用SpeechSynthesizer对象的startSpeaking方法进行语音合成: ```java mTts.startSpeaking("你要合成的文本", null); ``` 这里的"你要合成的文本"是需要进行语音合成的文本内容。 这样,你就可以在Android Studio使用语音合成了。记得在使用之前,确保你已经在开放平台上注册并申请了相应的APPID。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值