更新记录
2.0.1(2024-11-19)
更新示例
2.0.0(2024-11-19)
- 在百度云创建应用时包名须和你打包的包名一致(自己测试可以申请免费资源包)
- 在本地测试可能需要运行在自定义调试基座上
- HBuilderX版本最好在4.27以上
- 应用manifest.json的APP模块需要勾选开启RECORD权限
1.0.0(2024-08-07)
初始化插件
查看更多
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 4.27,Android:4.4,iOS:不支持,HarmonyNext:不确定 |
× |
× |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
鸿蒙元服务 |
× |
× |
× |
× |
× |
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 = ''
const appKey = ''
const appSecret = ''
const text = '开始识别'
const innerAudioContext = uni.createInnerAudioContext()
let wup = null
let asr = null
onMounted(() => {
/* 注意 */
// 1. 在百度云创建应用时包名须和你打包的包名一致(自己测试可以申请免费资源包)
// 2. 在本地测试可能需要运行在自定义调试基座上
// 3. HBuilderX版本最好在4.27以上
// 4. 应用manifest.json的APP模块需要勾选开启RECORD权限
// 5. 下方是传参信息
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)
},
fail: (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>