百度语音合成中需要注意的两个小常识

本文介绍如何集成百度语音SDK,包括解决Android Studio中assets文件读取问题和libs文件夹处理方法。提供了复制assets文件到本地的实用类,并指导如何正确处理第三方库集成时的目录冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语音合成(Text To Speech,TTS):将文本合成为语音,即声音文件。
去官网创建应用,,并下载SDK文件,解压后的压缩包中有一个官方的demo,其实按照这个demo来就行了,在这里需要注意的只有两个问题

**

1、关于assets中文件的一个读取

**
因为官方给的Eclipse版本中的,如果用Android Studio开发的话,那就要注意到这两者对于assets文件的的处理是不一样的。
百度语音识别这里PARAM_TTS_TEXT_MODEL_FILE、PARAM_TTS_SPEECH_MODEL_FILE、PARAM_TTS_LICENCE_FILE、loadEnglishModel(),这几个中都需要放入assets文件的一个路径,供它去读取,并且进行处理,但是如果直接用“file://android_asset/xxx”或者this.getClass().getResourceAsStream()都是不可取的,这里必须要先把assets中的文件放到存到本地,然后读本地存储路径,这里附一个自己已经做好的类

copyFilesFassets方法传入的两个参数是:"assets/bd_etts_speech_female.dat""/voicetest/bd_etts_speech_female.dat" 
public class CopyAssetsFile {
    /**
     *  从assets目录中复制整个文件夹内容  
     *  @param  context  Context 使用CopyFiles类的Activity 
     *  @param  oldPath  String  原文件路径  如:/aa  
     *  @param  newPath  String  复制后路径  如:xx:/bb/cc  
     */
    public void copyFilesFassets(Context context,String oldPath,String newPath) {
        try {
            String fileNames[] = context.getAssets().list(oldPath);//获取assets目录下的所有文件及目录名  
            if (fileNames.length > 0) {//如果是目录  
                File file = new File(newPath);
                file.mkdirs();//如果文件夹不存在,则递归  
                for (String fileName : fileNames) {
                    copyFilesFassets(context,oldPath + "/" + fileName,newPath+"/"+fileName);
                }
            } else {//如果是文件
                File file=new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + newPath);
                String  path = newPath.substring(0, newPath.lastIndexOf("/"));
                getDirectory(path);

                if(!file.exists()){
                    file.createNewFile();
                }
                InputStream is =  context.getClass().getClassLoader().getResourceAsStream(oldPath);
                FileOutputStream fos = new FileOutputStream(file);
                byte[] buffer = new byte[1024];
                int byteCount = 0;
                while((byteCount = is.read(buffer)) != -1) {//循环从输入流读取 buffer字节          
                    fos.write(buffer, 0, byteCount);//将读取的输入流写入到输出流  
                }
                fos.flush();//刷新缓冲区  
                is.close();
                fos.close();
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block  
            e.printStackTrace();
            //如果捕捉到错误则通知UI线程  
        }
    }
    //分级建立文件夹
    public void getDirectory(String path){
        //对path进行处理,分层级建立文件夹
        String[]  s=path.split("/");
        String str=Environment.getExternalStorageDirectory().getAbsolutePath();
        for (int i = 0; i < s.length; i++) {
            str=str+"/"+s[i];
            File file=new File(str);
            if(!file.exists()){
                file.mkdir();
            }
        }
    }
}

**

2、libs中的文件

**
其实在官方文档也可以看到这样说的:
(1)、如与第三方库集成,至少要保留armeabi目录。如第三方库有7个架构目录,比语音识别SDK多出2个目录 mips和mips64,请将mips和mips64目录删除,剩下5个同名目录合并。
(2)、如第三方库仅有armeabi这一个目录,请将语音识别SDK的额外4个目录如armeabi-v7a删除,合并armeabi目录下的so。 即目录取交集,so文件不可随意更改所属目录。
因为在百度语音识别和合成中,需要进行两次SDK的集成,这两次中的libs中的文件只能取交集,也就是有相同的文件夹就把相同的文件夹中的内容合并为一个,如果一边有一边没有,那就把这类文件夹删除了

另,附上地址,里面包含了百度语音识别和合成整合后的demo:https://git.oschina.net/lee_vane/BaiduVoiceRecognition

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值