使用APICloud開發app錄音功能
- 2022 年 7 月 11 日
- 筆記
mp3Recorder模組封裝在iOS、Android下錄音直接生成mp3,統一兩個平台的錄音生成文件,方便雙平台之間的交互,減少錄音完成後再轉碼的過程;同時提供分貝波形圖顯示UI;使用該模組前需要打開麥克風許可權。
效果圖如下:

韌體要求:Android:4.0及以上 iOS:8.0及以上
該模組提供了8個介面:
addEventListener 影片結果和聲音分貝監聽;
startRecord 開始錄音
stopRecord 停止錄音
openVoiceLine 顯示線性波形圖
closeVoiceLine 關閉線性波形圖
**setDecibels **設置波形圖的分貝值
pauseRecord 暫停錄音
resumeRecord 恢復錄音
方法詳解見apicloud平台模組開發文檔:
//docs.apicloud.com/Client-API/Func-Ext/mp3Recorder
以下是程式碼的詳細實現過程:
<!DOCTYPE html>
<html>
<head>
<title>Module Develop</title>
<meta charset="utf-8">
<meta name="viewport"
content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
<style type="text/css">
html,
body {
height: 100%
}
body {
background-color: #fff;
margin: 0;
}
#wrap {
height: 100%;
position: relative;
}
#header {
padding-top: 20px;
background-color: #5082c2;
height: 44px;
position: relative;
}
#header h1 {
font-size: 20px;
height: 44px;
line-height: 44px;
margin: 0em;
color: #fff;
margin-left: 100px;
margin-right: 100px;
text-align: center;
}
#main {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
}
a.button {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-box-pack: center;
-webkit-box-align: center;
height: 32px;
margin: 8px;
background-color: rgba(240, 240, 240, 1.0);
border-color: rgba(220, 220, 220, 1.0);
border-width: 2px;
border-style: solid;
}
a.active {
background-color: rgba(240, 240, 240, 0.7);
}
</style>
</head>
<body>
<div id="wrap">
<div id="main">
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
<a class="button" tapmode="active" onclick="_addEventListener()">監聽錄音</a>
<a class="button" tapmode="active" onclick="startRecord()">開始錄音</a>
<a class="button" tapmode="active" onclick="pauseRecord()">暫停錄音</a>
<a class="button" tapmode="active" onclick="resumeRecord()">恢復錄音</a>
<a class="button" tapmode="active" onclick="stopRecord()">停止錄音</a>
<a class="button" tapmode="active" onclick="openVoiceLine()">打開曲線</a>
<a class="button" tapmode="active" onclick="closeVoiceLine()">關閉曲線</a>
<a class="button" tapmode="active" onclick="setDecibels()">設置分貝值</a>
<a class="button" tapmode="active" onclick="playAudio()">播放錄音</a>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</div>
</div>
</body>
<script>
apiready = function () {
}
var mp3Path;
function _addEventListener() {
var demo = api.require('mp3Recorder');
demo.addEventListener(function (ret, err) {
alert(JSON.stringify(ret));
if (ret.evenType == 'endRecord') {
mp3Path = ret.data.path;
}
api.toast({
msg: JSON.stringify(ret)
});
});
}
function startRecord() {
var demo = api.require('mp3Recorder');
demo.startRecord({
channel: 2, //聲道支援:1 單聲道 2 立體聲道
sampleRates: 44100, //取樣率
}, function (ret, err) {
api.toast({
msg: JSON.stringify(ret)
});
});
}
function pauseRecord() {
var demo = api.require('mp3Recorder');
demo.pauseRecord(function (ret, err) {
api.toast({ msg: JSON.stringify(ret) });
});
}
function resumeRecord() {
var demo = api.require('mp3Recorder');
demo.resumeRecord(function (ret, err) {
api.toast({ msg: JSON.stringify(ret) });
});
}
function stopRecord() {
var demo = api.require('mp3Recorder');
demo.stopRecord(function (ret, err) {
api.toast({
msg: JSON.stringify(ret)
});
});
}
function openVoiceLine() {
var demo = api.require('mp3Recorder');
demo.openVoiceLine({
rect: {
x: 0,
y: 0,
w: api.frameWidth,
h: api.frameHeight / 3
},
fixedOn: api.frameName,
fixed: true,
isTransparent: false, //背景是否透明(透明時可以穿透點擊視圖)
}, function (ret, err) {
alert(JSON.stringify(ret));
});
}
function closeVoiceLine() {
var demo = api.require('mp3Recorder');
demo.closeVoiceLine(function (ret, err) {
api.toast({
msg: JSON.stringify(ret)
});
});
}
function setDecibels() {
var demo = api.require('mp3Recorder');
var random = getRandom(0, 60);
demo.setDecibels({
decibel: random
}, function (ret, err) {
api.toast({
msg: JSON.stringify(ret)
});
});
}
function getRandom(min, max) {
var r = Math.random() * (max - min);
var re = Math.round(r + min);
re = Math.max(Math.min(re, max), min)
return re;
}
function playAudio() {
api.startPlay({
path: mp3Path
}, function (ret, err) {
});
}
</script>
</html>

模組使用相對比較簡單,可以在APICloud開發平台上創建應用並添加直接添加模組,編譯後安裝到手機上,用示例程式碼進行測試。方便開發者在app開發的過程中使用。
Tags:

