更新记录

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>

注意事项

  1. 实时性能: 插件设计为低延迟实时传输,每个数据块约包含64ms的音频数据
  2. 内存管理: Android版本使用协程处理音频数据,确保UI线程不被阻塞
  3. 错误处理: 请在使用前检查录音权限,插件会在权限不足时输出错误日志
  4. 网络传输: Base64编码会增加约33%的数据量,请考虑网络带宽

API参考

startRecordWithPCM(callback)

开始实时录音并通过回调返回PCM数据

参数:

  • callback: (base64: string) => void - PCM数据回调函数,参数为Base64编码的PCM数据

stopRecordWithPCM()

停止实时录音

版本历史

  • v1.0.0: 初始版本,支持iOS和Android实时PCM录音

隐私、权限声明

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

录音权限

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

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

暂无用户评论。