Android的语音合成sdk的集成和使用(工具类结合)

创建应用,下载SDK

开通语音合成地址
这里是免费的 500条/日 等到后面有一个免费提额 可以提到2w/日 开通你根据上面要你填写的你填写好啦,这个很简单就不多说了

注意

这个提醒一下注意事项,不然搞完了有一推问题

  1. 下面说的jar包和so文件是你要去下载的 每个人都不一样不要用别人的,否则会出现空指针问题。
  2. APPID那里也要注意书写正确,别删掉那个等号,否则也会出现空指针问题。
  3. 权限设置好,要注意动态的申请Manifest.permission.RECORD_AUDIO权限。

配置

将开通的时候 将科大讯飞的 jar包和jni的so文件 下载下来 集成在你的项目里面 操作如下

  1. 将Msc.jar和Sunflower.jar放入libs文件夹下。

  2. 在main文件夹下创建jniLibs文件夹,将剩余的arm64-v8a、armeabi、armeabi-v7a、mips、mips64、x86、x86_64放入其中;

使用

初始化放在你的项目中继承Application的文件里面

 SpeechUtility.createUtility(APP.this, SpeechConstant.APPID + "= 你开通时获得APPID");

如果你在项目中不止一个地方调用这个语音吧 所以我这里做了一个工具类 也方便大家
TTSUtility.java

public class TTSUtility {
    // 发音人
    public final static String[] COLOUD_VOICERS_VALUE = {"xiaoyan", "xiaoyu", "catherine", "henry", "vimary", "vixy", "xiaoqi", "vixf", "xiaomei","xiaolin", "xiaorong", "xiaoqian", "xiaokun", "xiaoqiang", "vixying", "xiaoxin", "nannan", "vils",};

    private static final String TAG = "TTSUtility";
    // 语音合成对象
    private static SpeechSynthesizer mTts;
    //上下文
    private Context mContext;

    private volatile static TTSUtility instance;
    /**
     * 合成回掉监听
     */
    private static SynthesizerListener mTtsListener = new SynthesizerListener() {
        @Override
        public void onSpeakBegin() {
            Log.d(TAG, "开始播放");
        }

        @Override
        public void onBufferProgress(int percent, int beginPos, int endPos, String info) {
            // TODO 缓冲的进度
            Log.d(TAG, "缓冲 : " + percent);
        }

        @Override
        public void onSpeakPaused() {
            Log.d(TAG, "暂停播放");

        }

        @Override
        public void onSpeakResumed() {
            Log.d(TAG, "继续播放");
        }

        @Override
        public void onSpeakProgress(int percent, int beginPos, int endPos) {
            // TODO 说话的进度
            Log.d(TAG, "合成 : " + percent);
        }

        @Override
        public void onCompleted(SpeechError error) {
            if (error == null) {
                Log.d(TAG, "播放完成");

            } else if (error != null) {
                Log.d(TAG, error.getPlainDescription(true));
            }
        }

        @Override
        public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {

        }
    };
    /**
     * 构造方法
     *
     * @param context 上下文
     */
    private TTSUtility(Context context) {
        mContext = context;
        // 初始化合成对象
        mTts = SpeechSynthesizer.createSynthesizer(mContext, new InitListener() {
            @Override
            public void onInit(int code) {
                if (code != ErrorCode.SUCCESS) {
                    Log.d("zhs", "初始化失败,错误码:" + code);
                }
                Log.d("zhs", "初始化:" + code);
            }
        });
    }

    public static TTSUtility getInstance(Context context) {
        if (instance == null) {
            synchronized (TTSUtility.class) {
                if (instance == null) {
                    instance = new TTSUtility(context);
                }
            }
        }
        return  instance;
    }
    /**
     * 停止语音播报
     */
    public static void stopSpeaking() {
        // 对象非空并且正在说话
        if (null != mTts && mTts.isSpeaking()) {
            // 停止说话
            mTts.stopSpeaking();
        }
    }
    /**
     * 判断当前有没有说话
     *
     * @return
     */
    public  static boolean isSpeaking() {
        if (null != mTts) {
            return mTts.isSpeaking();
        } else {
            return false;
        }
    }
    /**
     * 开始合成
     *
     * @param text
     */
    public void speaking(String text) {
        if (TextUtils.isEmpty(text))
            return;
        int code = mTts.startSpeaking(text, mTtsListener);

        Log.d("fjj", "-----" + code + "++++++++++");

        if (code != ErrorCode.SUCCESS) {
            if (code == ErrorCode.ERROR_COMPONENT_NOT_INSTALLED) {
                Toast.makeText(mContext, "没有安装语音+ code = " + code, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(mContext, "语音合成失败,错误码: " + code, Toast.LENGTH_SHORT).show();
            }
        }
    }
    /**
     * 参数设置
     *
     * @return
     */
    private void setParam() {
        // 清空参数
        mTts.setParameter(SpeechConstant.PARAMS, null);
        // 引擎类型 网络
        mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);
        // 设置发音人
        mTts.setParameter(SpeechConstant.VOICE_NAME, COLOUD_VOICERS_VALUE[0]);
        // 设置语速
        mTts.setParameter(SpeechConstant.SPEED, "50");
        // 设置音调
        mTts.setParameter(SpeechConstant.PITCH, "50");
        // 设置音量
        mTts.setParameter(SpeechConstant.VOLUME, "100");
        // 设置播放器音频流类型
        mTts.setParameter(SpeechConstant.STREAM_TYPE, "3");
        // mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, Environment.getExternalStorageDirectory() + "/KRobot/wavaudio.pcm");
        // 背景音乐  1有 0 无
        // mTts.setParameter("bgs", "1");
    }
}

就这样 很简单 我也不搞胡里胡俏的 你自己接拿去用就好了

调用
在你需要的地方调用这个代码就ok了

TTSUtility.getInstance(getApplicationContext()).speaking("你好收款10元");

如果大哥们觉得小弟不错给我一个小赞,写的不多,紧张!!!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值