更新记录
0.5.1(2025-01-08)
v 0.5.1
- 修复录音时,传入指定文件夹或文件前缀字符为空时,未指定默认文件或前缀的问题
0.5.0(2024-12-31)
首发版本 v 0.5.0
平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 4.31,Android:5.0,iOS:不支持,HarmonyNext:不支持 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 | 鸿蒙元服务 |
---|---|---|---|---|
× | × | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
× | × | × | × | × | × | × | × | × |
bsx-recorder-api 一款适用于移动端录音操作的UTS API插件
版本
v 0.5.1
- 修复录音时,传入指定文件夹或文件前缀字符为空时,未指定默认文件或前缀的问题
重要
- 此API是UTS API 可用于开发录音机、聊天发语音等场景
- 暂仅支持Android 端
- 需要打自定义基座
- 本插件API 没有额外权限,处理仅访问APP外部私有存储的Files目录
开发文档
作者
aoaobaba 傲傲爸爸~
介绍
BSX框架的基础API插件,目前封装了Android端的能力,存粹的Android Api调用,无需第三方库。主要实现了开始录音、停止录音、开始播放、停止播放等API;包含相关Action的Callback。内部实现了一个简单的音频实时柱状可视化, 调用也非常的方便,仅需要传入unve页面的用于可视化的view id即可。
话不多说,下面详细介绍。
功能
- [X] 实时录音转录Aac文件
- [X] 录音、停止录音功能
- [X] 播放、停止播放功能
- [X] 自定义语音存储文件夹
- [X] 自定义语音文件前缀
- [X] 全过程的回调(录音开始、录音中、录音停止、开始播放、停止播放回调等)
- [X] 实时录音可视化(柱状图)
- [X] 明确的功能属性定义
类型
bsxRecorderOption 录音操作
// 录音操作
type bsxRecorderOption = {
maxDuration?: number // 最大录音时长 超出自动停止 默认30分钟 单位ms
enableSilenceHandle: boolean // 是否启用静音处理
silenceThreshold?: number // 静音检测阈值 低于此值则判断为静音 默认50 ;一般说话声音60~90
silenceThresholdMs?: number // 静音持续时长阈值 连续检测到静音的时长 超出则自动停止录音
enableAudioVisualizer?: boolean // 是否启用音频可视化
visualizerViewId?: string // 启用音频可视化后 需要绑定的页面的view id
visualizerColor?: string // 音频可视化颜色 注意!!暂支持Android Color :RRGGBB RGB ARGB 转换异常时默认CYAN
fileDirectoryName? : string //文件存储目录 如果空 则创建在BsxRecorder 目录下
fileNameSuffix? : string // 录音aac文件名前缀 完整的文件名为前缀_日期时间 默认bsx_recorder
onFail : (res:string) => void // 录音失败时的回调
onStart?: () => void // 录音开始时的回调
onRecording?: () => void // 录音中的回调
onStop?: (filePath:string) => void // 录音停止时的回调
}
bsxRecordPlayOption 播放操作
type bsxRecordPlayOption = {
filePath: string, // 文件全路径(注意 并不是Uni 文件api获取的相对路径!!!!)
enableAudioVisualizer?: boolean // 是否启用音频可视化
visualizerViewId?: string // 启用音频可视化后 需要绑定的view id
visualizerColor?: string // 音频可视化颜色 参考上面的
onStart?: () => void // 开始播放的回调
onEnd?: () => void // 播放结束的回调
onStop?: () => void // 播放停止的回调
}
API Functions
录音Api
/**
* @Description: 开启录音
*
* @author aoaobaba
*
* @param1 录音操作 type of bsxRecorderOption
* @param2 页面实例 type of UniPage
* @return
* @createTime: 2024-12-31 17:24:44
* @Copyright by aoaoms.com
*/
function bsxRecorderStart(options: bsxRecorderOption, pageInstance: UniPage)
/**
* @Description: 停止录音
*
* @author aoaobaba
*
* @param
* @return 录音文件全路径
* @createTime: 2024-12-31 17:24:44
* @Copyright by aoaoms.com
*/
function bsxRecorderStop():string
播放录音Api
/**
* @Description: 播放文件
*
* @author aoaobaba
*
* @param1 播放操作 type of bsxRecordPlayOption
* @param2 页面实例 type of UniPage
* @return
* @createTime: 2024-12-31 17:24:44
* @Copyright by aoaoms.com
*/
function bsxPlayAacFile(options: bsxRecordPlayOption, pageInstance: UniPage)
/**
* @Description: 停止播放
*
* @author aoaobaba
*
* @param
* @return
* @createTime: 2024-12-31 17:24:44
* @Copyright by aoaoms.com
*/
function bsxStopPlayAacFile()
使用
- 导入插件到项目
- 需要的地方调用Api
示例
// 导入api 和类型
import { bsxRecorderOption, bsxRecordPlayOption, bsxRecorderStart, bsxRecorderStop, bsxPlayAacFile, bsxStopPlayAacFile } from '@/uni_modules/bsx-recorder-api'
const startRecording = () => {
if (!isRecording.value) {
isRecording.value = true
// 开始录音
bsxRecorderStart({
maxDuration: 60000,
enableSilenceHandle: false,
silenceThreshold: 80,
silenceThresholdMs: 5000,
enableAudioVisualizer: true,
visualizerViewId: "bsx-recoder-Visualizer",
visualizerColor: props.uiStyle!.visualizerBaseColor,
fileDirectoryName: 'xxx',
fileNameSuffix: 'xxx',
onFail: (res) => {
console.log('录音错误---通知UI-----', res)
},
onStart: () => {
console.log('录音开始了---通知UI-----')
recordingTimer.value = setInterval(() => {
recordingDuration.value += 100
}, 100)
},
onRecording: () => {
console.log('录音中---通知UI-----')
},
onStop: (recorderFilePath : string) => {
// 录音结束的 回调 自动
isRecording.value = false
console.log('--录音结束--录音文件---', recorderFilePath)
filePath.value = recorderFilePath
// 停止计时器
clearInterval(recordingTimer.value)
console.log('录音结束---通知UI-----')
}
} as bsxRecorderOption, props.pageInstance! as UniPage)
}
}
// 关闭录音
if (isRecording.value) {
isRecording.value = false
<!-- 停止录音 返回录音的文件全路径 -->
filePath.value = bsxRecorderStop()
}
// 播放文件
const playFile = () => {
// 播放录音
bsxPlayAacFile({
filePath: filePath.value,
enableAudioVisualizer: true,
visualizerViewId: "bsx-recoder-Visualizer",
visualizerColor: props.uiStyle!.visualizerBaseColor,
onStart: () => {
console.log("--播放音频的回调--- 开始播放了")
}, onEnd: () => {
console.log("--播放音频的回调--- 播放结束了")
}, onStop: () => {
console.log("--播放音频的回调--- 播放停止了")
}
}, props.pageInstance! as UniPage)
}
// 停止播放
const stopPlayFile = () => {
bsxStopPlayAacFile()
}
权限
操作Files目录,无需权限;录制音频,需要开启 android.permission.RECORD_AUDIO 权限!!
tips
- 实用组件bsx-voicechat-wx 已发布,类微信发语音的页面组件更好的封装功能,少走弯路。搜索插件 立即获取~
谢谢!