牙叔教程 简单易学
使用场景
你说个词, 我画个画, 目前就是显示一张图片,后期可以自己改成画画的方式来呈现图片
效果展示
效果.png流程图
你说我画流程图.pngautojs版本
8.7.7-0
get知识点
- 停止其他脚本
- 百度语音识别
- 百度通用物体和场景识别高级版
- 百度图像主体识别
- 爬取百度图片
- 编辑距离
- 录音
- canvas画图片
- 按钮触摸事件监听
- 申请录音权限, 以及获取申请结果
- canvas画图片时, 图片居中
- 图片回收
- 检查是否有录音权限
- python爬虫改为autojs
- java方式的post
- 音频播放和停止
代码讲解
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;
}
}
参考文章
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途
网友评论