获取音频文件能量大小或声音大小

获取PCM格式数据能量大小(格式为signed 16bit,单声道)
frm 包含着音频数据,以及音频数据buf的长度
user_threshold 为用户设置的临界值,超过这个值,返回1代表着这一段音频数据能量高于所设置的user_threshold (范围是0-32767),值越大,划分的越细

int IMP_AI_GetFramePower(IMPAudioFrame *frm, int user_threshold)
{
    short tmp = 0;
    int i = 0;
    int threshold = 0;
    int flag_power = 0;
    //int db = 0;

if ((user_threshold <= 0) || (user_threshold > 255)) {
    IMP_LOG_ERR(TAG, "%s %d threshold set error", __func__, __LINE__);
    return -1;
}

threshold = (pow(2, 15) * user_threshold) / 255;

short* addr = (short*)frm->virAddr;   //virAddr指向音频数据buffer,short类型是因为音频格式为signed 16bit单声道

for (i = 0 ; i < (frm->len/2) ; i += 1) {
    memcpy(&tmp, addr+i, sizeof(short));
    //printf(" current threshold = %d\n", abs(tmp));
    
    if (abs(tmp) > threshold) {
        if (++flag_power == 16) {     //连续16个采样点超过user_threshold ,就认为此段音频数据能量超过user_threshold 
            printf("18 current threshold(%d) exceed user_threshold(%d) and user_threshold = %d\n", abs(tmp), threshold, user_threshold);

            return 1;
        }
    }
}
return 0;

}

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行走在软件开发路上的人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值