帖子

[官方资源分享] 合成中除了音频文件如何获取合成的音频流数据

[复制链接]
  • TA的每日心情
    开心
    2017-12-29 09:56
  • 签到天数: 46 天

    [LV.5]常住居民I

    65819  楼主| 王水 发表于 2015-9-14 17:08:15 1#
    在听写、识别、评测以及语义理解等服务中,可以通过onVolumeChanged(int volume, byte[] data)回调来获取实时的音频流数据data。但是在合成这种语音输出型服务中没有这个回调,如何获取合成的音频流数据呢?

    在合成中虽然没有onVolumeChanged(int volume, byte[] data),但是有个onEvent(int eventType, int arg1, int arg2, Bundle obj)回调,其中第四个参数是个bundle对象,你猜对了,它就是你要的音频流数据。但是有问题,这个bundle并不总是音频流数据,只有第一个参数(eventType)为SpeechEvent.EVENT_TTS_BUFFER时,第四个才是你要到音频流。具体代码参考:
    1.                 @Override
    2.                 public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
    3.                                 if (SpeechEvent.EVENT_TTS_BUFFER == eventType) {
    4.                                         byte[] data = obj.getByteArray(SpeechEvent.KEY_EVENT_TTS_BUFFER);
    5.                                 }
    6.                 }
    复制代码

    然而我们的工程师考虑到效率问题,并没有默认将音频流数据通过上述方法返回出来,还需要一个设置:
    1. mTts.setParameter(SpeechConstant.TTS_DATA_NOTIFY, "1");
    复制代码

    关于TTS_DATA_NOTIFY的说明见下图:
    QQ截图20150****70407.png



    好的,经过上面的两个步骤就可以通过mTts.synthesizeToUri获取到你需要的音频流数据了:
    1.                         String path = Environment.getExternalStorageDirectory()+"/tts.pcm";
    2.                         int code = mTts.synthesizeToUri(text, path, mTtsListener);
    3.                         
    4.                         if (code != ErrorCode.SUCCESS) {
    5.                                 if(code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED){
    6.                                         //未安装则跳转到提示安装页面
    7.                                         mInstaller.install();
    8.                                 }else {
    9.                                         showTip("语音合成失败,错误码: " + code);        
    10.                                 }
    11.                         }
    复制代码




    逸群大神的帖子看这里

    如何实时抛出音频流数据


    iflytek-小黑 发表于 2015-9-14 19:25:16
    2#
    {:soso_e163:}{:soso_e163:}{:soso_e163:}{:soso_e192:}
    使用道具 举报 回复
    iltgcl 发表于 2015-10-29 16:05:00
    3#
    赞,解决我的问题了
    使用道具 举报 回复
    ywwtx 发表于 2016-3-31 10:42:34
    4#
    我下载的java sdk中貌似没有SpeechConstant.TTS_DATA_NOTIFY怎么办?
    使用道具 举报 回复
    miss丶戒戒 发表于 2016-4-15 11:50:14
    5#
    本帖最后由 miss丶戒戒 于 2016-4-15 11:52 编辑
    ywwtx 发表于 2016-3-31 10:42
    我下载的java sdk中貌似没有SpeechConstant.TTS_DATA_NOTIFY怎么办?

    我也遇到了同样的问题,在论坛中也问了这个问题,麻烦大神们解答一下,不胜感激
    使用道具 举报 回复
    ywwtx 发表于 2016-7-19 16:32:49
    6#
    你上面所得是在andorid里面开发的吧?如果是在pc端用java开发的语音合成呢?如何获取语音数据流?
    使用道具 举报 回复
    gxlin 发表于 2016-7-20 08:50:40
    7#
    ywwtx 发表于 2016-7-19 16:32
    你上面所得是在andorid里面开发的吧?如果是在pc端用java开发的语音合成呢?如何获取语音数据流? ...

    Java SDK 目前还没直接返回音频流数据,可能通过合成到文件后,应用把文件读入到字节数组中。
    使用道具 举报 回复
    catlove 发表于 2016-9-21 14:29:19
    8#
    刷语点路过,请忽略
    使用道具 举报 回复
    喜欢雨天的我 发表于 2016-11-10 16:11:10
    9#
    赞,帮助我解决了问题、
    使用道具 举报 回复
    唐大 发表于 2017-6-27 15:30:07
    10#
    非常不错                                    
    使用道具 举报 回复