更新记录
0.5.5(2025-03-27)
- 增加录音文件类型wav (已支持aac和wav 实时转录文件)
- 停止录音回调增加停止录音的原因(normal\manual\mute\timeout\undefine)
0.5.3(2025-03-21)
插件内不再动态申请麦克风权限!调用前,请自行处理。否则,录音回调提示需要权限!
0.5.2(2025-01-14)
修复播放时不合规参数引起的空指针异常问题
查看更多平台兼容性
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插件
版本
0.5.0(2024-12-31)
首发版本 v 0.5.0
重要
- 此API是UTS API 可用于开发录音机、聊天发语音等场景
- 暂仅支持Android 端
- 需要打自定义基座
- 本插件API 没有额外权限,处理仅访问APP外部私有存储的Files目录
开发文档
作者
aoaobaba 傲傲爸爸~
介绍
BSX框架的基础API插件,目前封装了Android端的能力,存粹的Android Api调用,无需第三方库。主要实现了开始录音、停止录音、开始播放、停止播放等API;包含相关Action的Callback。内部实现了一个简单的音频实时柱状可视化, 调用也非常的方便,仅需要传入unve页面的用于可视化的view id即可。
话不多说,下面详细介绍。
功能
- [X] 实时录音转录aac|wav文件
- [X] 录音、停止录音功能
- [X] 播放、停止播放功能
- [X] 自定义语音存储文件夹
- [X] 自定义语音文件前缀
- [X] 全过程的回调(录音开始、录音中、录音停止、开始播放、停止播放回调等)
- [X] 实时录音可视化(柱状图)
- [X] 明确的功能属性定义
类型
bsxRecorderFileType 枚举文件类型
enum bsxRecorderFileType {
wav = "wav",
aac = "aac"
}
bsxRecorderOption 录音操作
// 录音操作
type type bsxRecorderOption = {
maxDuration?: number | null // 最大时长
enableSilenceHandle: boolean // 是否启用静音处理
silenceThreshold?: number | null // 静音检测阈值
silenceThresholdMs?: number | null // 静音持续时长阈值
enableAudioVisualizer?: boolean | null // 是否启用音频可视化
visualizerViewId?: string | null // 启用音频可视化后 需要绑定的viewid
visualizerColor?: string | null // 音频可视化颜色
fileDirectoryName? : string | null //文件存储目录 如果空 则创建在BsxRecorder 目录下
fileNameSuffix? : string | null // 录音aac文件名前缀 完整的文件名为前缀_日期时间 默认bsx_recorder
fileType?: bsxRecorderFileType | null // 录音文件类型 支持 aac和wav 未指定或未匹配的默认aac
onFail : (res:string) => void
onStart?: () => void
onRecording?: () => void
onStop?: (filePath:string, reason: string) => void // 文件路径 和 停止原因normal\manual\mute\timeout\undefine
}
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 { bsxRecorderFileType, 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, //是否开启静音处理,默认true开启
silenceThreshold: 80, // 静音检测阈值, 如果要开启静音,建议值150 并配合静音持续时长
silenceThresholdMs: 5000, // 静音持续时长,如果启用静音处理 并且静音持续时长超过该值 则自动停止录音
enableAudioVisualizer: true, // 是否开启可视化
visualizerViewId: "bsx-recoder-Visualizer", // 可视化的view id
visualizerColor: props.uiStyle!.visualizerBaseColor, // 可视化view 的背景色
fileDirectoryName: 'xxx', // 保存录音文件的目录名 默认Bsx_recorder (文件存储在app 沙盒外部私有目录FILES下)
fileNameSuffix: 'xxx', // 录音文件名前缀,默认bsx_recorder
fileType: bsxRecorderFileType.wav, // 录音文件类型 支持aac 或 wav
onFail: (res) => {
console.log('录音错误---通知UI-----', res)
},
onStart: () => {
console.log('录音开始了---通知UI-----')
recordingTimer.value = setInterval(() => {
recordingDuration.value += 100
}, 100)
},
onRecording: () => {
console.log('录音中---通知UI-----')
},
onStop: (recorderFilePath : string, reason: string) => {
// 录音结束的 回调 自动
isRecording.value = false
console.log(`--录音结束 原因-${reason}-录音文件--${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() // 调用此api 默认关闭录音的原因为 manual
}
// 播放文件
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 已发布,类微信发语音的页面组件更好的封装功能,少走弯路。搜索插件 立即获取~
谢谢!