更新记录

1.0.0(2024-08-07)

初始化插件


平台兼容性

uni-app

Vue2 Vue3
?
app-vue app-nvue app-android app-ios app-harmony
? ? ? ? ?
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
? ? ? ? ? ? ? ? ?
微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序 钉钉小程序 快手小程序 飞书小程序 京东小程序
? ? ? ? ? ? ? ? ?
快应用-华为 快应用-联盟
? ?

uni-app x

app-android app-ios
? ?
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
? ? ? ? ? ? ? ? ?
<template>
    <view class="content">
        <view class="">
            <button @click="startWup">语音唤醒开始</button>
            <button @click="stopWup">语音唤醒结束</button>
            <button @click="startAsr">语音识别开始</button>
            <button @click="stopAsr">语音识别结束</button>
            <button @click="startTts">语音合成</button>
        </view>
    </view>
</template>

<script setup>
    import {
        onMounted,
        onUnmounted,
        ref
    } from 'vue';
    import {
        WakeUp,
        AsrRecog,
        reqPermiss
    } from '@/uni_modules/lym-speech';

    const appId = 'APP_ID'
    const appKey = 'APP_KEY'
    const appSecret = 'SECRET'
    const text = '开始识别'
    const innerAudioContext = uni.createInnerAudioContext()
    let wup = null
    let asr = null

    onMounted(() => {
        /* 注意 */
        // 1. 在百度云创建应用时包名须和你打包的包名一致(自己测试可以申请免费资源包)
        // 2. 应用manifest.json的APP模块需要勾选开启RECORD权限
        // 3. 下方是传参信息
        reqPermiss({
            success: () => {
                console.log('reqPermiss success')
                // 唤醒词识别
                wup = new WakeUp()
                // 语音识别
                asr = new AsrRecog()
            },
            fail: (res) => {
                console.log(res)
            }
        })
    })

    /*
     export type WakeOptions = {
        APP_ID : string,
        APP_KEY : string,
        SECRET : string,
        WP_WORDS_FILE : string, // 唤醒词bin文件
        IN_FILE ?: string, // 文件路径资源路径或回调方法名
        ACCEPT_AUDIO_DATA ?: boolean, // 默认关闭。开启后,会有音频回调(CALLBACK_EVENT_WAKEUP_AUDIO),很占资源
        WP_ENGINE_LICENSE_FILE_PATH ?: string, // 不填写,在联网时会获取自动获取离线正式授权。有特殊原因可用在官网下载临时授权文件,配置此参数,支持android asset目录(如assets:///mylicense.dat)
        SAMPLE_RATE ?: Int, // 16000(默认值,且唤醒仅支持16k采样)
        success ?: (res : EventResult) => void,
        fail ?: (error : EventResult) => void
     };

     export type AsrOptions = {
        APP_ID : string,
        APP_KEY : string,
        SECRET : string,
        AUDIO_MILLS? : Int, // 录音开始的时间点。用于唤醒+识别连续说。SDK有15s的录音缓存。如设置为(System.currentTimeMillis() - 1500),表示回溯1.5s的音频。
        PID ?: Int, // 场景: 在线;默认1537,即中文输入法模型,不带在线语义
        LM_ID ?: Int, // 场景: 在线;自训练平台上线后的模型Id,必须和自训练平台的PID连用。
        DECODER ?: Int, // 默认0,0=在线,2=离在线融合(在线优先);离在线的并行策略
        VAD ?: string, // 默认VAD_DNN;VAD_DNN|VAD_TOUCH;语音活动检测, 根据静音时长自动断句。注意不开启长语音的情况下,SDK只能录制60s音频。长语音请设置BDS_ASR_ENABLE_LONG_SPEECH参数;VAD_TOUCH=关闭语音活动检测。注意关闭后不要开启长语音。适合用户自行控制音频结束,但时长不能超过60s;
        BDS_ASR_ENABLE_LONG_SPEECH ?: boolean, // 是否开启长语音。 即无静音超时断句,开启后需手动调用ASR_STOP停止录音。 请勿和VAD=touch联用!优先级大于VAD_ENDPOINT_TIMEOUT 设置
        VAD_ENDPOINT_TIMEOUT ?: Int, // 静音超时断句及长语音
        IN_FILE ?: string, // 文件路径资源路径或回调方法名
        OUT_FILE ?: string, // 文件路径,保存识别过程产生的录音文件, 该参数需要开启ACCEPT_AUDIO_DATA后生效
        NLU ?: string, // 本地语义解析设置。必须设置ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数生效,无论网络状况,都可以有本地语义结果。并且本地语义结果会覆盖在线语义结果。本参数不控制在线语义输出,需要在线语义输出见PID参数
        ASROFFLINEENGINE_GRAMMER_FILE_PATH ?: string, // 用于支持本地语义解析的bsg文件,离线和在线都可使用。NLU开启生效,其它说明见NLU参数。注意bsg文件同时也用于ASR_KWS_LOAD_ENGINE离线命令词功能。
        SLOT_DATA ?: string, // 与ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数一起使用后生效
        DISABLE_PUNCTUATION ?: boolean, // 在选择1537开头的pid(输入法模式)的时候,是否禁用标点符号
        // PUNCTUATION_MODE?: Int, // 在选择1537开头的pid(输入法模式)的时候,标点处理模式。需要设置DISABLE_PUNCTUATION为fasle生效
        ACCEPT_AUDIO_DATA ?: boolean, // 是否需要语音音频数据回调,开启后有CALLBACK_EVENT_ASR_AUDIO事件
        ACCEPT_AUDIO_VOLUME ?: boolean, // 是否需要语音音量数据回调,开启后有CALLBACK_EVENT_ASR_VOLUME事件回调
        SOUND_START ?: Int, // 说话开始的提示音
        SOUND_END ?: Int, // 说话结束的提示音
        SOUND_SUCCESS ?: Int, // 识别成功的提示音
        SOUND_ERROR ?: Int, // 识别出错的提示音
        SOUND_CANCEL ?: Int, // 识别取消的提示音
        SAMPLE_RATE ?: Int, // 采样率 ,固定及默认值16000
        ASR_OFFLINE_ENGINE_LICENSE_FILE_PATH ?: string, // 临时授权文件路径
        ready ?: (res : EventResult) => void,
        volume ?: (res : EventResult) => void,
        recognition ?: (res : EventResult) => void,
        exit ?: (res : EventResult) => void
     };

     */
    const startTts = () => {
        const ass_url =
            `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${appKey}&client_secret=${appSecret}`
        uni.request({
            url: ass_url
        }).then(res => {
            console.log('res ass_url: ', res)
            const tts_url =
                `https://tsn.baidu.com/text2audio?lan=zh&ctp=1&cuid=${uni.getSystemInfoSync().appId}&tok=${res.data.access_token}&tex=${text}&vol=5&per=0&spd=5&pit=5&aue=3`
            innerAudioContext.src = tts_url
            innerAudioContext.stop()
            innerAudioContext.play()
        })
    }

    const startWup = () => {
        wup.start({
            APP_ID: appId,
            APP_KEY: appKey,
            SECRET: appSecret,
            WP_WORDS_FILE: plus.io.convertLocalFileSystemURL('/static/WakeUp.bin'), // 可以去百度云下载唤醒词文件
            success: (res) => {
                console.log(res)
            }
        })

    }

    const stopWup = () => {
        wup.stop()
    }

    const releaseWup = () => {
        wup.release()
    }

    const startAsr = () => {
        asr.start({
            APP_ID: appId,
            APP_KEY: appKey,
            SECRET: appSecret,
            VAD_ENDPOINT_TIMEOUT: 800,
            DECODER: 2,
            ready: (res) => {
                // 准备就绪
                console.log(res)
            },
            volume: (res) => {
                // 音量数据
            },
            recognition: (res) => {
                // 识别结果
                console.log(res)
            },
            exit: (res) => {
                // 退出
                console.log(res)
            }
        })
    }

    const stopAsr = () => {
        asr.stop()
    }

    const releaseAsr = () => {
        asr.release()
    }
</script>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name=\"android.permission.RECORD_AUDIO\" /> <uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" /> <uses-permission android:name=\"android.permission.INTERNET\" /> <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问