| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 | importScripts('AudioAMER.js');let channelNum = 2;           // 通道数(需求上只需要2通道,不用改)let sampleRate = 32000;       // 采样率,支持8K/16K/32K/48Klet bitsPerSample = 16;       // 采样精度,支持16/32let 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();  }};
 |