autojs噪音测试

简介: 牙叔教程 简单易懂

牙叔教程 简单易懂

效果

环境


手机: Mi 11 Pro


Android版本: 12


Autojs版本: 9.1.6

源码

"ui";
/*
 * @version: 1.0
 * @Date: 2022-02-23 17:34:13
 * @LastEditTime: 2022-02-23 18:35:14
 * @LastEditors: 牙叔
 * @Description:
 * @FilePath: \autojs获取音量分贝\main.js
 * @名人名言: 牙叔教程 简单易懂
 * @bilibili: 牙叔教程
 * @公众号: 牙叔教程
 * @QQ群: 747748653
 */
engines.all().map((ScriptEngine) => {
  if (engines.myEngine().toString() !== ScriptEngine.toString()) {
    ScriptEngine.forceStop();
  }
});
importClass(android.media.AudioFormat);
importClass(android.media.AudioRecord);
importClass(android.media.MediaRecorder);
importClass(android.util.Log);
importClass(android.content.pm.PackageManager);
ui.layout(
  <vertical>
    <text text="噪音测试" margin="10" textSize="60sp" gravity="center" textStyle="bold"></text>
    <text id="author" textSize="22sp" marginBottom="6" textColor="#fbfbfe" bg="#00afff" w="*" gravity="center">
      牙叔教程
    </text>
    <horizontal w="*" gravity="center">
      <text id="value" w="0" layout_weight="3" text="Hello World" textSize="39sp" gravity="center" />
      <text text="db" w="0" layout_weight="1" textSize="39sp" gravity="left" />
    </horizontal>
  </vertical>
);
if (checkPermission("android.permission.RECORD_AUDIO")) {
  log("有录音权限");
  main();
} else {
  log("没有录音权限");
  runtime.requestPermissions(["record_audio"]);
}
/* -------------------------------------------------------------------------- */
function checkPermission(permission) {
  pm = context.getPackageManager();
  return (havePermission =
    PackageManager.PERMISSION_GRANTED == pm.checkPermission(permission, context.getPackageName().toString()));
}
function main() {
  getNoiseLevel();
}
function getNoiseLevel() {
  let SAMPLE_RATE_IN_HZ = 8000;
  let BUFFER_SIZE = AudioRecord.getMinBufferSize(
    SAMPLE_RATE_IN_HZ,
    AudioFormat.CHANNEL_IN_DEFAULT,
    AudioFormat.ENCODING_PCM_16BIT
  );
  let mAudioRecord;
  let isGetVoiceRun;
  if (isGetVoiceRun) {
    log("还在录着呢");
    return;
  }
  mAudioRecord = new AudioRecord(
    MediaRecorder.AudioSource.MIC,
    SAMPLE_RATE_IN_HZ,
    AudioFormat.CHANNEL_IN_DEFAULT,
    AudioFormat.ENCODING_PCM_16BIT,
    BUFFER_SIZE
  );
  if (mAudioRecord == null) {
    log("sound", "mAudioRecord初始化失败");
  }
  isGetVoiceRun = true;
  setTimeout(() => {
    isGetVoiceRun = false;
  }, 5000);
  threads.start(function () {
    mAudioRecord.startRecording();
    let buffer = util.java.array(java.lang.Short.TYPE, BUFFER_SIZE);
    while (isGetVoiceRun) {
      //r是实际读取的数据长度,一般而言r会小于buffersize
      let r = mAudioRecord.read(buffer, 0, BUFFER_SIZE);
      let v = 0;
      // 将 buffer 内容取出,进行平方和运算
      for (let i = 0; i < buffer.length; i++) {
        v += buffer[i] * buffer[i];
      }
      // 平方和除以数据总长度,得到音量大小。
      let mean = v / r;
      let volume = 10 * Math.log10(mean);
      log("分贝值:" + volume);
      ui.post(() => {
        ui.value.setText(volume.toFixed(2));
      });
      // 大概一秒十次
      sleep(100);
    }
    mAudioRecord.stop();
    mAudioRecord.release();
    mAudioRecord = null;
  });
}


参考

Android实时获取音量(单位:分贝


相关教程

https://www.yuque.com/go/doc/66524497



名人名言


思路是最重要的, 其他的百度, bing, stackoverflow, github, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程


声明


部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

相关文章
|
4月前
基于autojs7的亚丁号成语大家族辅助
基于autojs7的亚丁号成语大家族辅助
37 0
|
4月前
AutoJs4.1.0 部局范围次分析
AutoJs4.1.0 部局范围次分析
58 0
|
4月前
|
缓存 Android开发
基于autojs7的爆音极速版辅助
基于autojs7的爆音极速版辅助
35 0
|
4月前
|
缓存 Android开发
基于autojs7的番茄免费小说辅助
基于autojs7的番茄免费小说辅助
116 0
|
编解码 监控 安全
红外成像仪开发版学习注意要点
三河凡科科技飞讯红外成像仪开发学习注意要点 红外成像仪主要用于检测和识别物体的热量,并将其转化为可见的图像。它可以用于许多应用,包括夜视、安全监控、军事、医疗和工业控制等领域。在开发红外成像仪时需要注意以下几个要点。
红外成像仪开发版学习注意要点
|
12月前
|
编解码 Linux iOS开发
开源图片放大修复神器,无损提升图片分辨率和质量!
Final2x 可以使用多个模型将图像超分辨率到任意大小,以提高图像的分辨率和质量,使其更清晰和更详细
|
机器学习/深度学习 存储 人工智能
【OpenVI-视觉评价系列之MOS评价实战篇】手机存储不够用,清理照片太痛苦?MOS评价帮你挑选“垃圾”照片
MOS(Mean Opinion Score)是一种常用的主观质量评价方法,常用于视频、图像等多媒体领域中的质量评价。MOS视觉评价通常是通过让受试者观看视频/图像,对视频的清晰度、锐度、颜色饱和度、运动模糊、噪声等方面进行评价。然而,MOS视觉评价也存在一些局限,例如需要大量的受试者,评估时间较长等。因此,近年来,研究者们也开始探索使用客观评价方法来替代或补充MOS视觉评价。
452 2
【OpenVI-视觉评价系列之MOS评价实战篇】手机存储不够用,清理照片太痛苦?MOS评价帮你挑选“垃圾”照片
|
算法 IDE 开发工具
2021电赛F题之openmv数字识别--更新(附带视频与代码)
2021电赛F题之openmv数字识别--更新(附带视频与代码)
221 0
2021电赛F题之openmv数字识别--更新(附带视频与代码)
|
机器学习/深度学习 监控 安全
基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)
基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)
1122 0
基于YOLOv5的疲劳驾驶检测系统(Python+清新界面+数据集)
|
小程序 前端开发
【测试经验向】提测质量差 + 测试工期压缩,我要怎么办?
【测试经验向】提测质量差 + 测试工期压缩,我要怎么办?
【测试经验向】提测质量差 + 测试工期压缩,我要怎么办?