解决Moodo调节心情模块-大声喊出来无法测量出音频分贝

背景

微信小程序:

简称:Moodo

全程:AIMoodo心情日记系统

编程工具:cursor、灵码

在开发过程中,常常会遇到这样或者那样的问题。最近,在我的小程序中实现"大声喊出来"功能时,遇到了一个棘手的问题:音频录制后无法测量分贝。本文将详细记录我在解决这个问题过程中的沟通、尝试和最终的解决方案。

问题描述

在实现音频录制功能时,我们希望用户能够通过大声说话来释放情绪,并实时测量他们的音量分贝。然而,在测试过程中,我们发现无论用户如何大声说话,分贝值始终显示为 0。这显然是一个严重的问题,因为它直接影响了用户体验。

初步沟通

我首先进行了团队内部的沟通(cursor和灵码),讨论了可能导致这一问题的原因。我们认为可能的原因包括:

  1. 录音权限未获得:用户可能未授权录音权限。
  2. 录音管理器未正确初始化:可能在录音管理器的设置上存在问题。
  3. 数据处理逻辑错误:在处理录音数据时,可能存在计算错误。
  4. 设备问题:某些设备的麦克风可能无法正常工作。

尝试的解决方法

1. 检查录音权限

我们首先确认了在调用录音功能之前,是否已经请求并获得了录音权限。通过调用 wx.authorize 方法来请求权限,确保用户能够正常使用录音功能。

经排查,权限正常,不是该问题!

2. 初始化录音管理器

接下来,我们检查了录音管理器的初始化过程。我们确保在调用 wx.getRecorderManager() 时,录音管理器能够正确创建,并且在调用 start() 方法之前,已经正确绑定了 onFrameRecorded 回调函数。

javascript 复制代码
this.recorderManager = wx.getRecorderManager();
this.recorderManager.onFrameRecorded((res) => this.onFrameRecorded(res));

经排查,没发现代码哪里有问题,可能是该问题!! (最后的确是这个地方出了一个配置问题)

3. 数据处理逻辑

在处理录音数据的逻辑中,我们仔细检查了分贝的计算公式。我们确保在计算平均值时,避免了除以零的情况,并在计算分贝值时添加了日志输出,以便调试。

javascript 复制代码
const average = sum / dataArray.length;
if (average === 0) {
    console.log('平均值为零,无法计算分贝');
    return; // 直接返回,避免后续计算
}
const decibel = Math.round(20 * Math.log10(average));

经排查,逻辑没走到这里,不是这里的问题!!!

4. 设备测试

我们还在不同的设备上进行了测试,以确认是否存在设备特定的问题。通过在多款手机上进行录音测试,我们未发现这些设备的麦克风存在问题。

最终解决方案

经过一系列的尝试和调试,我们发现问题的关键在于 onFrameRecorded 方法未被正确调用。我们将回调函数的绑定方式更改为使用箭头函数(非主要原因),以确保 this 的上下文正确。

javascript 复制代码
this.recorderManager.onFrameRecorded((res) => this.onFrameRecorded(res));

主要原因,设置中添加了 frameSize 参数,以回调onFrameRecorded这个函数,之前没有调用的原因原来出在这个问题上。

···

官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.onFrameRecorded.html

···

javascript 复制代码
this.recorderManager.start({
    duration: 60000,
    sampleRate: 44100,
    numberOfChannels: 1,
    encodeBitRate: 192000,
    format: 'mp3',
    frameSize: 20
});

结论

通过团队的共同努力,我们最终解决了音频分贝测量的问题。这个过程不仅让我们深入理解了音频录制的原理,也增强了团队的协作能力。希望我们的经验能够帮助到其他开发者在遇到类似问题时,能够更快地找到解决方案。

感谢大家的阅读,如果您在开发过程中遇到类似的问题,欢迎在评论区分享您的经验和解决方案!

相关推荐
funfan05173 小时前
Claude4、GPT4、Kimi K2、Gemini2.5、DeepSeek R1、Code Llama等2025主流AI编程大模型多维度对比分析报告
ai编程
草梅友仁3 小时前
草梅 Auth 1.1.0 发布与最新动态 | 2025 年第 30 周草梅周报
开源·github·ai编程
LinXunFeng4 小时前
AI - Gemini CLI 摆脱终端限制
openai·ai编程·gemini
程序员X小鹿5 小时前
腾讯还是太全面了,限时免费!超全CodeBuddy IDE保姆级教程!(附案例)
ai编程
半生过往6 小时前
微信小程序文件下载与预览功能实现详解
微信小程序·小程序·notepad++·压缩包下载解压
源码_V_saaskw6 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
龙萱坤诺6 小时前
【教程】无需迁移IDE!Augment原生插件实现Cursor无缝平替 Claude-4无限用
cursor·cursor工具·augment code
yeshan9 小时前
使用 Claude Code 的自定义 Sub Agent 完善博文写作体验
ai编程·claude·掘金·日新计划
996幸存者11 小时前
uni-app区域选择、支持静态、动态数据
微信小程序·uni-app
人生都在赌12 小时前
一个AI工作流如何让代码审查从手动到智能?实战拆解
ai编程·devops·cursor