更新记录
1.0.0(2025-09-26)
首次发布,拥有该插件功能的app已经上架到所有应用商店,放心使用
平台兼容性
uni-app(4.66)
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | - | - | 4.4 | 12 | - |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - | - | - | - |
uni-app x
Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
---|---|---|---|---|---|
√ | √ | 5.0 | 12 | - | - |
tsw-luyin-uts
UTS录音插件,支持实时PCM音频数据获取,适配阿里云智能语音交互产品。
功能特性
- ✅ 支持iOS和Android平台
- ✅ 实时录音获取PCM数据
- ✅ 符合阿里云语音要求:单声道、16-bit采样位数、16kHz采样率
- ✅ Base64编码输出,方便WebSocket传输
- ✅ 支持持续回调,适合实时语音流传输
技术规格
音频格式
- 采样率: 16kHz
- 声道: 单声道 (mono)
- 采样位数: 16-bit
- 编码格式: PCM
- 输出格式: Base64编码字符串
平台支持
- iOS: 使用AVAudioEngine实现
- Android: 使用AudioRecord实现
使用方法
1. 导入插件
import * as tswluyinuts from "@/uni_modules/tsw-luyin-uts";
2. 开始录音
// 开始实时录音并获取PCM数据
tswluyinuts.startRecordWithPCM((base64) => {
console.log('接收到PCM数据块,长度:', base64.length);
// 转换为二进制数据用于WebSocket传输
const pcmBuffer = Uint8Array.from(atob(base64), c => c.charCodeAt(0)).buffer;
// 发送到阿里云语音识别WebSocket
if (websocket && websocket.readyState === WebSocket.OPEN) {
websocket.send(pcmBuffer);
}
});
3. 停止录音
// 停止录音
tswluyinuts.stopRecordWithPCM();
阿里云语音识别集成示例
// WebSocket连接示例
const websocket = new WebSocket('wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1');
websocket.onopen = function() {
console.log('WebSocket连接已建立');
// 发送开始识别指令
const startCmd = {
header: {
message_id: generateMessageId(),
task_id: generateTaskId(),
namespace: "SpeechTranscriber",
name: "StartTranscription"
},
payload: {
format: "pcm",
sample_rate: 16000,
enable_intermediate_result: true
}
};
websocket.send(JSON.stringify(startCmd));
// 开始录音
tswluyinuts.startRecordWithPCM((base64) => {
const pcmBuffer = Uint8Array.from(atob(base64), c => c.charCodeAt(0)).buffer;
websocket.send(pcmBuffer);
});
};
websocket.onmessage = function(event) {
const result = JSON.parse(event.data);
console.log('识别结果:', result);
};
// 停止录音和识别
function stopRecognition() {
tswluyinuts.stopRecordWithPCM();
// 发送停止指令
const stopCmd = {
header: {
message_id: generateMessageId(),
task_id: generateTaskId(),
namespace: "SpeechTranscriber",
name: "StopTranscription"
}
};
websocket.send(JSON.stringify(stopCmd));
}
权限配置
Android权限
插件已自动配置录音权限,项目manifest.json中需要包含:
{
"app-plus": {
"distribute": {
"android": {
"permissions": [
"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>"
]
}
}
}
}
iOS权限
需要在项目的Info.plist
中添加麦克风权限描述:
<key>NSMicrophoneUsageDescription</key>
<string>需要使用麦克风进行语音录制</string>
注意事项
- 实时性能: 插件设计为低延迟实时传输,每个数据块约包含64ms的音频数据
- 内存管理: Android版本使用协程处理音频数据,确保UI线程不被阻塞
- 错误处理: 请在使用前检查录音权限,插件会在权限不足时输出错误日志
- 网络传输: Base64编码会增加约33%的数据量,请考虑网络带宽
API参考
startRecordWithPCM(callback)
开始实时录音并通过回调返回PCM数据
参数:
callback: (base64: string) => void
- PCM数据回调函数,参数为Base64编码的PCM数据
stopRecordWithPCM()
停止实时录音
版本历史
- v1.0.0: 初始版本,支持iOS和Android实时PCM录音