audio(pcm): add pcm convert

添加了简单的16bit PCM数据采样i但转换功能
  1. 添加页面跳转:html\uac_pcm_data_convert.html
  2. 添加hex_to_int的带符号转换方法
end of segment
🔧 web(switch): add web pages switch feature
 添加了页面跳转的框架
  1. 添加页面跳转功能
  2. 添加主页相关的内容以及欢迎页面
end of segment
 utools(plugin): add utools plugin support
 添加了utools的插件功能
  1. 添加插件配置
  2. 添加插件的图标
end of segment
This commit is contained in:
Alvin Young 2022-06-17 00:19:28 +08:00
parent d241e00820
commit 3a38835a15
6 changed files with 130 additions and 10 deletions

View File

@ -2,11 +2,10 @@
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/bootstrap-theme.min.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<script src="js/bootstrap.min.js"></script>
<link rel="stylesheet" href="../css/bootstrap.min.css">
<script src="../js/jquery.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
<title>test</title>
</head>
<body>

View File

@ -0,0 +1,69 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="../css/bootstrap.min.css">
<script src="../js/jquery.min.js"></script>
<script src="../js/bootstrap.min.js"></script>
<script src="../js/hex_to_int_16bit.js"></script>
<title>uac_pcm_data_convert</title>
</head>
<body>
<div class="container">
<form role="form">
<div class="form-group">
<p>UAC PCM data convert</p>
<label for="name">USB PCM数据</label>
<textarea id="text_input_raw_pcm" class="form-control" rows="6"></textarea>
</div>
</form>
<p>
<button type="button" class="btn btn-primary btn-lg btn-block" href = "javascript:void(0);" onclick="convert_usb_pcm_data()">运行</button>
</p>
<form role="form">
<div class="form-group">
<label for="name">解析后数据</label>
<textarea id="text_outputconvert_data" class="form-control" rows="6"></textarea>
</div>
</form>
</div>
</body>
<script>
function convert_usb_pcm_data() {
var input = document.getElementById("text_input_raw_pcm");
var output = document.getElementById("text_outputconvert_data");
var input_raw_data = input.value;
var maxdata = 0;
var temp_data = 0;
var output_data = "";
// console.log(input_raw_data);
output.value = "";
var input_list = input_raw_data.split(" ");
for ( var i = 0; i < input_list.length; i ++) {
temp_data = hex2int(input_list[i]);
output_data += temp_data.toString() + " ";
if (temp_data > maxdata) {
maxdata = temp_data;
}
}
output_data += "\r\n-------------------------\r\n";
output_data += "max value = " + maxdata.toString();
// console.log(output_data);
output.value = output_data;
}
</script>
</html>

View File

@ -14,24 +14,24 @@
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">impressionyang的工具箱</a>
<a class="navbar-brand" href = "javascript:void(0);" onclick ="switch_pages_by_file_path('html/hello.html')">impressionyang的工具箱</a>
</div>
<div>
<ul class="nav navbar-nav">
<li class="active"><a href="#">计划</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
Java
功能
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#">jmeter</a></li>
<li><a href="#">EJB</a></li>
<li><a href = "javascript:void(0);" onclick ="switch_pages_by_file_path('html/uac_pcm_data_convert.html')">UAC PCM音频采样点转换</a></li>
<!-- <li><a href="#">EJB</a></li>
<li><a href="#">Jasper Report</a></li>
<li class="divider"></li>
<li><a href="#">分离的链接</a></li>
<li class="divider"></li>
<li><a href="#">另一个分离的链接</a></li>
<li><a href="#">另一个分离的链接</a></li> -->
</ul>
</li>
</ul>
@ -40,8 +40,16 @@
</nav>
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="html/hello.html"></iframe>
<iframe id="pages_container" class="embed-responsive-item" src="html/hello.html"></iframe>
</div>
</body>
<script>
function switch_pages_by_file_path(file_path) {
var container = document.getElementById("pages_container");
container.src = file_path;
}
</script>
</html>

33
js/hex_to_int_16bit.js Normal file
View File

@ -0,0 +1,33 @@
function hex2int(hexStr) {
let twoStr = parseInt(hexStr, 16).toString(2); // 将十六转十进制再转2进制
let bitNum = hexStr.length * 4; // 1个字节 = 8bit 0xff 一个 "f"就是4位
if (twoStr.length < bitNum) {
while (twoStr.length < bitNum) {
twoStr = "0" + twoStr;
}
}
if (twoStr.substring(0, 1) == "0") {
// 正数
twoStr = parseInt(twoStr, 2); // 二进制转十进制
return twoStr;
} else {
// 负数
let twoStr_unsign = "";
// console.log("hex2int--->" + parseInt(twoStr, 2));
twoStr = parseInt(twoStr, 2) - 1; // 补码:(负数)反码+1符号位不变相对十进制来说也是 +1但这里是负数+1就是绝对值数据-1
// console.log("hex2int--->" + twoStr);
twoStr = twoStr.toString(2);
twoStr_unsign = twoStr.substring(1, bitNum); // 舍弃首位(符号位)
// 去除首字符将0转为1将1转为0 反码
twoStr_unsign = twoStr_unsign.replace(/0/g, "z");
twoStr_unsign = twoStr_unsign.replace(/1/g, "0");
twoStr_unsign = twoStr_unsign.replace(/z/g, "1");
// console.log("hex2int--->" + twoStr_unsign);
// console.log("hex2int--->" + (-twoStr_unsign));
twoStr = parseInt(-twoStr_unsign, 2);
return twoStr;
}
}

BIN
logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

11
plugin.json Normal file
View File

@ -0,0 +1,11 @@
{
"main": "index.html",
"logo": "logo.png",
"features": [
{
"code": "impress",
"explain": "impressionyang's impress tools",
"cmds":["impress", "imt"]
}
]
}