更新记录

0.0.9(2026-04-10)

  • fix: 修复类型问题

0.0.8(2026-04-10)

  • fix: 修复可能打包报错

0.0.7(2026-04-10)

  • chore: 更新文档
查看更多

平台兼容性

uni-app(4.87)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - 5.0 -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.87)

Chrome Safari Android iOS 鸿蒙 微信小程序
- 5.0 -

lime-ali-nui

基于阿里云nuisdk的uni-app语音服务插件,支持语音识别(ASR)和文件转写。

功能特性

  • 一句话识别:支持短语音实时识别,支持VAD(语音活动检测),支持保存录音文件
  • 实时语音转写:支持长时连续语音识别,支持中间结果返回,支持词级信息
  • 录音文件转写:支持将音频文件转换为文本,支持在线音频文件URL
  • 语音合成(TTS):支持短文本语音合成,支持多种发音人和参数调节
  • 流式语音合成(CosyVoice):支持流式输入文本,实时返回音频数据
  • 多种认证方式:支持Token、AccessKey、STS Token三种认证方式
  • 简洁API:使用单独的回调方法处理结果,简化开发流程
  • TypeScript支持:完整的类型定义,提供良好的开发体验

平台支持

功能 Android HarmonyOS NEXT Web 微信小程序 iOS
一句话识别 ✅(未测试)
实时语音转写 ✅(未测试)
录音文件转写 ✅(未测试)
语音合成(TTS) ✅(未测试)
流式语音合成 ✅(未测试)

说明:Web 和微信小程序平台,uni-app 需要源码版,uni-app X 可直接试用

快速开始

安装插件

  1. 在uni-app插件市场中搜索并导入lime-ali-nui
  2. 在页面中引入插件方法(见下方基本使用示例)
  3. Android 和 iOS 平台需要使用自定义基座运行

基本使用

1. 一句话识别

import { useAliNuiSpeechRecognizer } from '@/uni_modules/lime-ali-nui'
import type { AliNuiSpeechRecognizerStartOptions, UseAliNuiOptions } from '@/uni_modules/lime-ali-nui'

const recognizer = useAliNuiSpeechRecognizer({
  appKey: 'your-app-key',
  token: 'your-token',
  debug: true,
  success: () => {
    console.log('一句话识别初始化成功')
  },
  fail: (error) => {
    console.error('一句话识别初始化失败', error)
  }
} as UseAliNuiOptions)

// 设置回调
recognizer.onStarted((taskId) => {
  console.log('识别开始', taskId)
})

recognizer.onBeginOfSpeech((taskId) => {
  console.log('开始说话', taskId)
})

recognizer.onResult((result) => {
  console.log('识别结果', result.text)
})

recognizer.onCompleted((result) => {
  console.log('识别完成', result.text)
})

recognizer.onVolumeChanged((taskId, volume) => {
  console.log('声音强度变化', volume)
})

recognizer.onSessionEnded((taskId) => {
  console.log('会话结束', taskId)
})

recognizer.onError((taskId, error) => {
  console.error('识别错误', error)
})

// 开始识别
recognizer.start({
  format: 'pcm',           // 音频格式
  sampleRate: 16000,       // 采样率
  enableVoiceDetection: true,  // 启用VAD
  success: (result) => {
    console.log('识别启动成功', result)
  },
  fail: (error) => {
    console.error('识别启动失败', error)
  }
} as AliNuiSpeechRecognizerStartOptions)

// 停止识别
recognizer.stop()

// 取消识别
recognizer.cancel()

// 释放资源
recognizer.dispose()

2. 实时语音转写

import { useAliNuiSpeechTranscriber } from '@/uni_modules/lime-ali-nui'
import type { AliNuiSpeechTranscriberStartOptions, UseAliNuiOptions } from '@/uni_modules/lime-ali-nui'

const transcriber = useAliNuiSpeechTranscriber({
  appKey: 'your-app-key',
  token: 'your-token',
  success: () => {
    console.log('实时语音转写初始化成功')
  },
  fail: (error) => {
    console.error('实时语音转写初始化失败', error)
  }
} as UseAliNuiOptions)

// 设置回调
transcriber.onStarted((taskId) => {
  console.log('转写开始', taskId)
})

transcriber.onBeginOfSpeech((taskId) => {
  console.log('开始说话', taskId)
})

transcriber.onResult((result) => {
  console.log('转写结果', result.text)
})

transcriber.onCompleted((result) => {
  console.log('转写完成', result.text)
})

transcriber.onVolumeChanged((taskId, volume) => {
  console.log('声音强度变化', volume)
})

transcriber.onSessionEnded((taskId) => {
  console.log('会话结束', taskId)
})

transcriber.onError((taskId, error) => {
  console.error('转写错误', error)
})

// 开始转写
transcriber.start({
  format: 'opus',          // 音频格式
  sampleRate: 16000,       // 采样率
  enableIntermediateResult: true,  // 返回中间结果
  enableWords: true,       // 返回词级信息
  success: (result) => {
    console.log('转写启动成功', result)
  },
  fail: (error) => {
    console.error('转写启动失败', error)
  }
} as AliNuiSpeechTranscriberStartOptions)

// 停止转写
transcriber.stop()

// 取消转写
transcriber.cancel()

// 释放资源
transcriber.dispose()

3. 录音文件转写

import { useAliNuiFileTranscriber } from '@/uni_modules/lime-ali-nui'
import type { AliNuiFileTranscriberStartOptions, UseAliNuiOptions } from '@/uni_modules/lime-ali-nui'

const fileTranscriber = useAliNuiFileTranscriber({
  appKey: 'your-app-key',
  token: 'your-token',
  success: () => {
    console.log('录音文件转写初始化成功')
  },
  fail: (error) => {
    console.error('录音文件转写初始化失败', error)
  }
} as UseAliNuiOptions)

// 设置回调
fileTranscriber.onResult((result) => {
  console.log('转写结果', result.text)
})

fileTranscriber.onError((taskId, error) => {
  console.error('转写错误', error)
})

// 开始录音文件转写
fileTranscriber.start({
  filePath: 'https://example.com/audio.wav',  // 支持本地文件路径或在线音频URL
  sampleRate: 16000,                         // 音频采样率
  format: 'wav',                             // 音频格式
  enableInverseTextNormalization: true,      // 启用ITN
  enableWordLevelResult: false,              // 不返回词级信息
  success: (result) => {
    console.log('录音文件转写成功', result.text)
  },
  fail: (error) => {
    console.error('录音文件转写失败', error)
  }
} as AliNuiFileTranscriberStartOptions)

// 取消转写
fileTranscriber.cancel()

// 释放资源
fileTranscriber.dispose()

4. 语音合成(TTS)

import { useAliNuiTts } from '@/uni_modules/lime-ali-nui'
import type { AliNuiTtsStartOptions, UseAliNuiOptions } from '@/uni_modules/lime-ali-nui'

const tts = useAliNuiTts({
  appKey: 'your-app-key',
  token: 'your-token',
  success: () => {
    console.log('语音合成初始化成功')
  },
  fail: (error) => {
    console.error('语音合成初始化失败', error)
  }
} as UseAliNuiOptions)

// 设置回调
tts.onStarted((taskId) => {
  console.log('合成开始', taskId)
})

tts.onCompleted((taskId) => {
  console.log('合成完成', taskId)
})

tts.onCanceled((taskId) => {
  console.log('合成取消', taskId)
})

tts.onPaused((taskId) => {
  console.log('合成暂停', taskId)
})

tts.onResumed((taskId) => {
  console.log('合成恢复', taskId)
})

tts.onError((taskId, error) => {
  console.error('合成错误', error)
})

tts.onData((taskId, data, base64) => {
  console.log('音频数据', data?.byteLength)
})

tts.onVolumeChanged((taskId, volume) => {
  console.log('音量变化', volume)
})

// 开始语音合成
tts.start({
  text: '您好,这是语音合成示例',  // 合成文本
  fontName: 'aiqi',               // 发音人
  speedLevel: 1.0,                // 语速
  pitchLevel: 0,                  // 音调
  volume: 1.0,                    // 音量
  format: 'mp3',                  // 音频格式
  success: (result) => {
    console.log('语音合成成功', result.taskId)
  },
  fail: (error) => {
    console.error('语音合成失败', error)
  }
} as AliNuiTtsStartOptions)

// 停止合成
tts.stop()

// 暂停合成
tts.pause()

// 恢复合成
tts.resume()

// 释放资源
tts.dispose()

5. 流式语音合成(CosyVoice)

import { useAliNuiStreamTts } from '@/uni_modules/lime-ali-nui'
import type { AliNuiStreamTtsStartOptions, UseAliNuiOptions } from '@/uni_modules/lime-ali-nui'

const streamTts = useAliNuiStreamTts({
  appKey: 'your-app-key',
  token: 'your-token',
  success: () => {
    console.log('流式语音合成初始化成功')
  },
  fail: (error) => {
    console.error('流式语音合成初始化失败', error)
  }
} as UseAliNuiOptions)

// 设置回调
streamTts.onStarted((taskId) => {
  console.log('合成开始', taskId)
})

streamTts.onCompleted((taskId) => {
  console.log('合成完成', taskId)
})

streamTts.onCanceled((taskId) => {
  console.log('合成取消', taskId)
})

streamTts.onError((taskId, error) => {
  console.error('合成错误', error)
})

streamTts.onSubtitle((taskId, subtitle) => {
  console.log('字幕', subtitle)
})

streamTts.onData((taskId, data, base64) => {
  console.log('音频数据', data?.byteLength)
  // 可以在这里处理音频数据,例如播放或保存
})

// 开始流式语音合成
streamTts.start({
  voice: 'longyumi_v2',         // 发音人
  format: 'mp3',                // 音频格式
  sampleRate: 22050,            // 采样率
  volume: 50,                   // 音量(0-100)
  rate: 1.0,                    // 语速
  pitch: 1.0,                   // 音调
  enableSubtitle: true,         // 启用字幕
  saveAudio: true,              // 保存音频文件
  success: (result) => {
    console.log('合成成功', result.taskId, result.tempFilePath)
  },
  fail: (error) => {
    console.error('合成失败', error)
  }
} as AliNuiStreamTtsStartOptions)

// 发送文本(流式输入)
streamTts.sendText('您好,')
setTimeout(() => {
  streamTts.sendText('这是流式语音合成示例')
  setTimeout(() => {
    streamTts.sendText(',支持实时返回音频数据。')
    // 停止合成
    streamTts.stop()
  }, 1000)
}, 1000)

// 取消合成
// streamTts.cancel()

// 释放资源
// streamTts.dispose()

API 文档

useAliNuiSpeechRecognizer

创建一句话识别实例。

useAliNuiSpeechRecognizer(options: UseAliNuiOptions): AliNuiSpeechRecognizer

UseAliNuiOptions

参数 类型 必填 说明
appKey string 项目AppKey
token string Token
accessKey string AccessKey ID
accessKeySecret string AccessKey Secret
stsToken string STS Token
url string 自定义服务地址
debug boolean 是否开启调试模式
success () => void 成功回调
fail (error: any) => void 失败回调

AliNuiSpeechRecognizer

一句话识别实例。

方法

方法 说明
start(options: AliNuiSpeechRecognizerStartOptions) 开始一句话识别
stop() 停止识别
cancel() 取消识别
onStarted(cb: (taskId: string) => void) 设置识别开始回调
onBeginOfSpeech(cb: (taskId: string) => void) 设置开始说话回调
onResult(cb: (result: AliNuiSpeechRecognizerResult) => void) 设置识别结果回调
onCompleted(cb: (result: AliNuiSpeechRecognizerResult) => void) 设置识别完成回调
onVolumeChanged(cb: (taskId: string, volume: number) => void) 设置音量变化回调
onSessionEnded(cb: (taskId: string) => void) 设置会话结束回调
onError(cb: (taskId: string, error: any) => void) 设置错误回调
dispose() 释放资源

AliNuiSpeechRecognizerStartOptions

参数 类型 必填 说明
format string 音频格式,支持:pcm、opus,默认'pcm'
sampleRate number 采样率,支持:8000、16000,默认16000
enableVoiceDetection boolean 是否启用VAD,默认false
maxStartSilence number 最长开始静音时间(毫秒),默认10000
maxEndSilence number 最长结尾静音时间(毫秒),默认800
enablePunctuation boolean 是否添加标点,默认true
enableIntermediateResult boolean 是否返回中间结果,默认true
enableInverseTextNormalization boolean 是否启用ITN,默认false
customizationId string 自学习模型ID
vocabularyId string 定制泛热词ID
saveAudio boolean 是否保存录音文件,默认false
success (result: AliNuiSpeechRecognizerResult) => void 成功回调
fail (error: any) => void 失败回调

AliNuiSpeechRecognizerResult

属性 类型 说明
taskId string 任务ID
text string 识别文本
isFinal boolean 是否为最终结果
confidence number 置信度
tempFilePath string 保存的音频文件路径(当saveAudio为true时)
raw object 原始结果

useAliNuiSpeechTranscriber

创建实时语音转写实例。

useAliNuiSpeechTranscriber(options: UseAliNuiOptions): AliNuiSpeechTranscriber

AliNuiSpeechTranscriber

实时语音转写实例。

方法

方法 说明
start(options: AliNuiSpeechTranscriberStartOptions) 开始实时语音转写
stop() 停止转写
cancel() 取消转写
onStarted(cb: (taskId: string) => void) 设置转写开始回调
onBeginOfSpeech(cb: (taskId: string) => void) 设置开始说话回调
onResult(cb: (result: AliNuiSpeechTranscriberResult) => void) 设置转写结果回调
onCompleted(cb: (result: AliNuiSpeechTranscriberResult) => void) 设置转写完成回调
onVolumeChanged(cb: (taskId: string, volume: number) => void) 设置音量变化回调
onSessionEnded(cb: (taskId: string) => void) 设置会话结束回调
onError(cb: (taskId: string, error: any) => void) 设置错误回调
dispose() 释放资源

AliNuiSpeechTranscriberStartOptions

参数 类型 必填 说明
format string 音频格式,支持:pcm、opus,默认'opus'
sampleRate number 采样率,支持:8000、16000,默认16000
enablePunctuation boolean 是否添加标点,默认true
enableIntermediateResult boolean 是否返回中间结果,默认true
enableInverseTextNormalization boolean 是否启用ITN,默认false
maxSentenceSilence number 断句检测阈值(毫秒),默认800
enableWords boolean 是否返回词级信息,默认false
disfluency boolean 是否过滤语气词,默认false
speechNoiseThreshold number 噪音参数阈值,范围-1~+1
customizationId string 自学习模型ID
vocabularyId string 定制泛热词ID
saveAudio boolean 是否保存录音文件,默认false
success (result: AliNuiSpeechTranscriberResult) => void 成功回调
fail (error: any) => void 失败回调

AliNuiSpeechTranscriberResult

属性 类型 说明
taskId string 任务ID
text string 转写文本
isFinal boolean 是否为最终结果
confidence number 置信度
tempFilePath string 保存的音频文件路径(当saveAudio为true时)
raw object 原始结果

useAliNuiFileTranscriber

创建录音文件转写实例。

useAliNuiFileTranscriber(options: UseAliNuiOptions): AliNuiFileTranscriber

AliNuiFileTranscriber

录音文件转写实例。

方法

方法 说明
start(options: AliNuiFileTranscriberStartOptions) 开始文件转写
cancel() 取消转写
onResult(cb: (result: AliNuiFileTranscriberResult) => void) 设置转写结果回调
onError(cb: (taskId: string, error: any) => void) 设置错误回调
dispose() 释放资源

AliNuiFileTranscriberStartOptions

参数 类型 必填 说明
filePath string 音频文件路径或在线音频URL
format string 音频格式,默认根据文件扩展名判断
sampleRate number 音频采样率,默认16000
enableInverseTextNormalization boolean 是否启用逆文本标准化
enableWordLevelResult boolean 是否返回词级结果
firstChannelOnly boolean 是否只处理第一个声道
success (result: AliNuiFileTranscriberResult) => void 成功回调
fail (error: any) => void 失败回调

AliNuiFileTranscriberResult

属性 类型 说明
taskId string 任务ID
text string 转写文本
isFinal boolean 是否为最终结果
confidence number 置信度
raw object 原始结果

useAliNuiTts

创建语音合成实例。

useAliNuiTts(options: UseAliNuiOptions): AliNuiTts

AliNuiTts

语音合成实例。

方法

方法 说明
start(options: AliNuiTtsStartOptions) 开始语音合成
stop() 停止合成
pause() 暂停合成
resume() 恢复合成
onStarted(cb: (taskId: string) => void) 设置合成开始回调
onCompleted(cb: (taskId: string) => void) 设置合成完成回调
onCanceled(cb: (taskId: string) => void) 设置合成取消回调
onPaused(cb: (taskId: string) => void) 设置合成暂停回调
onResumed(cb: (taskId: string) => void) 设置合成恢复回调
onError(cb: (taskId: string, error: any) => void) 设置错误回调
onData(cb: (taskId: string, data?: ArrayBuffer, base64?: string) => void) 设置音频数据回调
onVolumeChanged(cb: (taskId: string, volume: number) => void) 设置音量变化回调
dispose() 释放资源

AliNuiTtsStartOptions

参数 类型 必填 说明
text string 合成文本
fontName string 发音人
speedLevel number 语速,取值范围:0.5~2.0,默认1.0
pitchLevel number 音调,取值范围:-500~500,默认0
volume number 音量,取值范围:0.1~2.0,默认1.0
format string 音频格式,支持:mp3、pcm、wav,默认mp3
success (result: AliNuiTtsResult) => void 成功回调
fail (error: any) => void 失败回调

AliNuiTtsResult

属性 类型 说明
taskId string 任务ID
tempFilePath string 保存的音频文件路径(当saveAudio为true时)

useAliNuiStreamTts

创建流式语音合成(CosyVoice)实例。

useAliNuiStreamTts(options: UseAliNuiOptions): AliNuiStreamTts

AliNuiStreamTts

流式语音合成(CosyVoice)实例。

方法

方法 说明
start(options: AliNuiStreamTtsStartOptions) 开始流式语音合成
sendText(text: string) 发送文本(流式输入)
stop() 停止合成
cancel() 取消合成
onStarted(cb: (taskId: string) => void) 设置合成开始回调
onCompleted(cb: (taskId: string) => void) 设置合成完成回调
onCanceled(cb: (taskId: string) => void) 设置合成取消回调
onError(cb: (taskId: string, error: any) => void) 设置错误回调
onSubtitle(cb: (taskId: string, subtitle: string) => void) 设置字幕回调
onData(cb: (taskId: string, data?: ArrayBuffer, base64?: string) => void) 设置音频数据回调
dispose() 释放资源

AliNuiStreamTtsStartOptions

参数 类型 必填 说明
voice string 发音人,默认'longyumi_v2'
format string 音频格式,默认'mp3'
sampleRate number 采样率,默认22050
volume number 音量(0-100),默认50
rate number 语速,默认1.0
pitch number 音调,默认1.0
enableSubtitle boolean 是否启用字幕,默认false
saveAudio boolean 是否保存音频文件,默认false
success (result: AliNuiTtsResult) => void 成功回调
fail (error: any) => void 失败回调

错误码

错误码 说明
9200001 初始化失败
9200002 参数错误
9200003 认证失败
9200004 网络错误
9200005 语音合成失败
9200006 语音识别失败
9200007 录音权限被拒绝
9200008 未初始化
9200009 SDK文件缺失
9200010 录音设备错误
9200011 播放设备错误
9200012 Token过期
9200013 音频文件读取失败
9200014 播放器未初始化
9200015 播放器正在播放
9200016 播放器已停止

权限说明

插件需要以下权限:

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

注意事项

  1. 认证方式:推荐使用Token认证方式,避免在客户端存储AccessKey和AccessKeySecret
  2. 权限申请:首次使用需要申请录音权限
  3. 资源释放:使用完毕后务必调用dispose()释放资源
  4. 网络环境:需要稳定的网络连接
  5. SDK版本:基于阿里云nuisdk v2.7.2开发
  6. 回调设置:回调方法需要在start()之前设置,以确保能接收到所有事件

获取AppKey和Token

  1. 登录阿里云控制台
  2. 创建项目,获取AppKey
  3. 根据认证方式获取相应的凭证:
    • Token:通过服务端生成Token
    • AccessKey:在阿里云控制台右上角获取
    • STS Token:通过STS服务获取临时凭证

相关文档

隐私、权限声明

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

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

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

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

暂无用户评论。