以下是微信小程序实现声音分贝监测的代码:
index.wxml:
<view class="container"> <view class="title">声音分贝监测</view> <view class="volume-display"> <text class="volume-text">{{volume}} dB</text> </view> <view class="meter"> <view class="meter-bar" style="width: {{volume}}%"></view> </view> <button class="btn" bindtap="startMonitoring" wx:if="{{!isMonitoring}}">开始监测</button> <button class="btn" bindtap="stopMonitoring" wx:else>停止监测</button> </view>
index.wxss:
.container { padding: 30rpx; text-align: center; } .title { font-size: 36rpx; margin-bottom: 40rpx; } .volume-display { margin: 30rpx 0; } .volume-text { font-size: 80rpx; font-weight: bold; } .meter { width: 600rpx; height: 40rpx; background: #eee; border-radius: 20rpx; margin: 40rpx auto; overflow: hidden; } .meter-bar { height: 100%; background: linear-gradient(to right, #2ecc71, #f1c40f, #e74c3c); transition: width 0.1s; } .btn { width: 300rpx; margin-top: 40rpx; }
index.js:
const recorderManager = wx.getRecorderManager() Page({ data: { volume: 0, isMonitoring: false }, onLoad() { // 配置录音相关参数 recorderManager.onFrameRecorded((res) => { const { frameBuffer } = res if (frameBuffer.byteLength > 0) { // 计算音量 const dataView = new DataView(frameBuffer) let sum = 0 // 遍历音频数据计算平均振幅 for (let i = 0; i < frameBuffer.byteLength; i += 2) { sum += Math.abs(dataView.getInt16(i, true)) } const average = sum / (frameBuffer.byteLength / 2) // 将振幅转换为分贝值(近似值) let db = Math.round(20 * Math.log10(average)) // 限制范围在0-100之间 db = Math.max(0, Math.min(100, db)) this.setData({ volume: db }) } }) }, startMonitoring() { // 开始录音监测 recorderManager.start({ duration: 999999999, // 最大时长 sampleRate: 44100, numberOfChannels: 1, encodeBitRate: 192000, format: 'pcm', frameSize: 1 }) this.setData({ isMonitoring: true }) }, stopMonitoring() { // 停止录音 recorderManager.stop() this.setData({ isMonitoring: false, volume: 0 }) }, onUnload() { // 页面卸载时停止录音 recorderManager.stop() } })
需要在app.json中添加录音权限:
{ "requiredPrivateInfos": [ "getRecorderManager" ], "permissions": { "scope.record": { "desc": "需要使用您的录音功能" } } }
这个实现:
使用微信小程序的录音管理器(RecorderManager)来获取音频数据通过onFrameRecorded回调获取实时的音频数据将音频数据转换为分贝值显示提供开始/停止按钮控制监测使用进度条可视化显示当前分贝值自动处理录音权限申请注意事项:
真机测试效果会更准确分贝值是近似计算的,不是绝对精确值需要用户授权录音权限建议增加录音权限判断和错误处理逻辑网友回复
js如何流式输出ai的回答并折叠代码块,点击代码块右侧可预览代码?
ai大模型如何将文章转换成可视化一目了然的图片流程图图表?
大模型生成html版本的ui原型图和ppt演示文档的系统提示词怎么写?
rtsp视频直播流如何转换成websocket流在h5页面上观看?
为啥coze会开源工作流agent coze studio?
如何检测网页是通过收藏夹打开的?
python如何实现类似php的http动态脚本请求处理响应代码?
js如何实现类似php的http动态脚本请求处理响应代码?
trae与solo有啥区别不同?
vue如何让ai动态生成问卷调查多步骤表单式收集基础信息自动规划执行任务?