mirror of
https://gitee.com/js-yhsec/energy_storage.git
synced 2026-05-28 03:09:24 +08:00
引入海康威视插件
This commit is contained in:
87
web/public/codebase/jsPlugin/audioMixer/audioMixer-worker.js
Normal file
87
web/public/codebase/jsPlugin/audioMixer/audioMixer-worker.js
Normal file
@@ -0,0 +1,87 @@
|
||||
importScripts('AudioAMER.js');
|
||||
|
||||
let channelNum = 2; // 通道数(需求上只需要2通道,不用改)
|
||||
let sampleRate = 32000; // 采样率,支持8K/16K/32K/48K
|
||||
let bitsPerSample = 16; // 采样精度,支持16/32
|
||||
let dataLen = 320; // 一帧数据长度(采样点数),320个16位采样点即640B,支持4/8/10/16/20/24/30/32/40ms
|
||||
|
||||
// self.JSAudioCodecModule['onRuntimeInitialized'] = function () {
|
||||
// JSAudioCodecModule().then(instance => {
|
||||
// AudioModule = instance;
|
||||
// });
|
||||
// postMessage({type: "loaded"});
|
||||
// };
|
||||
|
||||
JSAudioCodecModule().then(instance => {
|
||||
AudioModule = instance;
|
||||
postMessage({type: "loaded"});
|
||||
});
|
||||
|
||||
onmessage = function (e) {
|
||||
let data = e.data;
|
||||
if ("create" === data.type) {
|
||||
let size = AudioModule._malloc(4);
|
||||
let alignment = AudioModule._malloc(4);
|
||||
if (size === null || alignment === null) {
|
||||
console.log("inputdata malloc failed!!!");
|
||||
return -1;
|
||||
}
|
||||
channelNum = data.channelNum;
|
||||
sampleRate = data.sampleRate;
|
||||
bitsPerSample = data.bitsPerSample;
|
||||
dataLen = data.dataLen;
|
||||
|
||||
let iRet = AudioModule._JSHIK_AMER_GetMemSize(channelNum, sampleRate, bitsPerSample, dataLen, size, alignment);
|
||||
if (iRet !== 1) {
|
||||
console.log("_CreatHandle failed!" + iRet);
|
||||
} else {
|
||||
let sizeOut = AudioModule.getValue(size, "i32");
|
||||
let alignmentOut = AudioModule.getValue(alignment, "i32");
|
||||
iRet = AudioModule._JSHIK_AMER_Create(channelNum, sampleRate, bitsPerSample, dataLen, sizeOut, alignmentOut);
|
||||
console.log("Create_res:" + iRet);
|
||||
postMessage({type: "created"});
|
||||
}
|
||||
if (size !== null) {
|
||||
AudioModule._free(size);
|
||||
size = null;
|
||||
}
|
||||
if (alignment !== null) {
|
||||
AudioModule._free(alignment);
|
||||
alignment = null;
|
||||
}
|
||||
} else if ("inputData" === data.type) {
|
||||
let inputSize = dataLen * 2;//dataLen为320,inputSize应该是 320 * 2 = 640
|
||||
let pInputData1 = AudioModule._malloc(inputSize);
|
||||
let pInputData2 = AudioModule._malloc(inputSize);
|
||||
|
||||
let pOutputData1 = AudioModule._malloc(inputSize);
|
||||
let pOutputData2 = AudioModule._malloc(inputSize);
|
||||
let pOutputData3 = AudioModule._malloc(inputSize);
|
||||
if (pInputData1 === null || pInputData2 === null || pOutputData1 === null || pOutputData2 === null || pOutputData3 === null) {
|
||||
console.log("inputdata or outputData malloc failed!!!");
|
||||
return -1;
|
||||
}
|
||||
let inputData1 = new Uint8Array(data.buf1);
|
||||
let inputData2 = new Uint8Array(data.buf2);
|
||||
AudioModule.writeArrayToMemory(inputData1, pInputData1);
|
||||
AudioModule.writeArrayToMemory(inputData2, pInputData2);
|
||||
inputData1 = null;
|
||||
inputData2 = null;
|
||||
// 开始处理
|
||||
let res = AudioModule._JSHIK_AMER_Process(pInputData1, pInputData2, pOutputData1, pOutputData2, pOutputData3, parseInt(inputSize / 2, 10));
|
||||
if (res === 1) {
|
||||
let aOutputData = new Uint8Array(inputSize);
|
||||
aOutputData.set(AudioModule.HEAPU8.subarray(pOutputData3, pOutputData3 + inputSize)); // 必须取pOutputData3的数据
|
||||
// postMessage({ type: "outputData", buf: aOutputData}, [aOutputData]);
|
||||
postMessage({ type: "outputData", dType: 1, buf: aOutputData.buffer}, [aOutputData.buffer]);
|
||||
}
|
||||
AudioModule._free(pInputData1);
|
||||
AudioModule._free(pInputData2);
|
||||
AudioModule._free(pOutputData1);
|
||||
AudioModule._free(pOutputData2);
|
||||
AudioModule._free(pOutputData3);
|
||||
} else if ("release" === data.type) {
|
||||
//奇怪,到时和研究院确认一下,库为什么不提供释放资源或者停止的接口??
|
||||
close();
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user