飞道的博客

autojs说啥画啥

265人阅读  评论(0)

牙叔教程 简单易学

使用场景

你说个词, 我画个画, 目前就是显示一张图片,后期可以自己改成画画的方式来呈现图片

效果展示

流程图

autojs版本

8.7.7-0

get知识点

  1. 停止其他脚本
  2. 百度语音识别
  3. 百度通用物体和场景识别高级版
  4. 百度图像主体识别
  5. 爬取百度图片
  6. 编辑距离
  7. 录音
  8. canvas画图片
  9. 按钮触摸事件监听
  10. 申请录音权限, 以及获取申请结果
  11. canvas画图片时, 图片居中
  12. 图片回收
  13. 检查是否有录音权限
  14. python爬虫改为autojs
  15. java方式的post
  16. 音频播放和停止

代码讲解

1. 导入类
importClass(android.content.pm.PackageManager);
importClass("androidx.core.app.ActivityCompat");
importClass(android.media.MediaRecorder);
2. 停止其他脚本
engines.all().map((ScriptEngine) => {
   
  if (engines.myEngine().toString() !== ScriptEngine.toString()) {
   
    ScriptEngine.forceStop();
  }
});
3. 导入模块, 主要是百度智能云的api, 包括 语音识别, 通用物体和场景识别, 图片主体识别
let getVoiceText = require("./百度短语音识别");
let 爬取百度图片 = require("./爬取百度图片");
let 编辑距离 = require("./编辑距离");
let 图像识别 = require("./图像识别/图像识别");
4. 初始化文件路径
const voiceFilepath = "/sdcard/1.amr";
files.createWithDirs(voiceFilepath);
const soundFile = new java.io.File(voiceFilepath);
5. 布局, 主要是一个画板和一个录音按钮
ui.layout(
  <vertical gravity="center">
    <text textSize="36sp" w="*" gravity="center" textStyle="bold">
      说啥画啥
    </text>
    <text textSize="24sp" w="*" gravity="center" textStyle="bold">
      牙叔教程 简单易学
    </text>
    <canvas id="board" w="250dp" h="250dp"></canvas>
    <button id="btn" margin="6" textSize="26sp" w="*" h="100dp"></button>
    <horizontal weightSum="2" bg="#888888">
      <button id="play" layout_width="0dp" layout_weight="1" textSize="25sp">
        开始播放
      </button>
      <button id="stop" layout_width="0dp" layout_weight="1" textSize="25sp">
        停止播放
      </button>
    </horizontal>
  </vertical>
);
6. 延迟获取画板宽高
setTimeout(() => {
   
  bw = ui.board.getWidth();
  bh = ui.board.getHeight();
}, 100);
7. 画板的draw事件
ui.board.on("draw", function (canvas) {
   
  canvas.drawARGB(255, 127, 127, 127);
  let 最终选择的图片 = getBoardImg();
  if (最终选择的图片) {
   
    canvas.drawBitmap(最终选择的图片, (bw - iw) / 2, (bh - ih) / 2, paint);
  }
});
8. 音频播放和停止
ui.play.click(function () {
   
  media.playMusic(soundFile.getAbsolutePath());
});
ui.stop.click(function () {
   
  media.stopMusic();
});
9. 录音权限及录音按钮的touch监听
let r = checkPermission();
if (!r) {
   
  toastLog("请授予录音权限");
  ui.emitter.on("request_permission_result", function () {
   
    log(arguments);
  });
  let permissionName = "RECORD_AUDIO";
  requestPermission(permissionName);
} else {
   
  log("有录音权限");
  view.setOnTouchListener(function (view, event) {
   
    switch (event.getAction()) {
   
      case event.ACTION_DOWN:
        log("ACTION_DOWN");
        record();
        return true;
      case event.ACTION_UP:
        log("ACTION_UP");
        recognizeVoice();
        return true;
    }
    return true;
  });
}
10. 退出时不要忘记释放资源
events.on("exit", function () {
   
  if (recorder) {
   
    recorder.stop();
    recorder.release();
    recorder = null;
    media.stopMusic();
  }
});
11. 申请和检查权限
function getImgPathList(dir) {
   
  var arr = files.listDir(dir);
  arr = arr.map((item) => {
   
    return files.join(dir, item);
  });
  return arr;
}
12. 申请和检查权限
function requestPermission(permissionName) {
   
  ActivityCompat.requestPermissions(activity, ["android.permission." + permissionName], 321);
}
function checkPermission() {
   
  let permissionName = "RECORD_AUDIO";
  let pm = context
    .getPackageManager()
    .checkPermission("android.permission." + permissionName, context.getPackageName());
  if (PackageManager.PERMISSION_GRANTED == pm) {
   
    return true;
  } else {
   
    return false;
  }
}

完整源码


参考文章

声明

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

bilibili

牙叔教程

微信公众号 牙叔教程

QQ群

747748653


转载:https://blog.csdn.net/snailuncle2/article/details/116724072
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场