implementing aec
This commit is contained in:
parent
3f116b43bf
commit
da6602ef66
1
aec
Submodule
1
aec
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 66c447ba544dfe8e3bb4091fda2961a11066910b
|
@ -10,7 +10,7 @@
|
||||
"package": "npm run build:renderer && electron-forge package",
|
||||
"make": "npm run build:renderer && electron-forge make",
|
||||
"build": "npm run build:all && electron-builder --config electron-builder.yml --publish never",
|
||||
"build:win": "npm run build:all && electron-builder --win --x64 --publish never",
|
||||
"build:win": "npm run build:all && electron-builder --win --x64 --publish never",
|
||||
"publish": "npm run build:all && electron-builder --config electron-builder.yml --publish always",
|
||||
"lint": "eslint --ext .ts,.tsx,.js .",
|
||||
"postinstall": "electron-builder install-app-deps",
|
||||
@ -39,7 +39,6 @@
|
||||
"better-sqlite3": "^9.4.3",
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^17.0.0",
|
||||
|
||||
"electron-squirrel-startup": "^1.0.1",
|
||||
"electron-store": "^8.2.0",
|
||||
"electron-updater": "^6.6.2",
|
||||
@ -74,4 +73,4 @@
|
||||
"optionalDependencies": {
|
||||
"electron-liquid-glass": "^1.0.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
20
src/assets/aec.js
Normal file
20
src/assets/aec.js
Normal file
File diff suppressed because one or more lines are too long
BIN
src/assets/aec.wasm
Executable file
BIN
src/assets/aec.wasm
Executable file
Binary file not shown.
@ -1,5 +1,33 @@
|
||||
const { ipcRenderer } = require('electron');
|
||||
|
||||
const createAecModule = require('../../../assets/aec.js'); // aec.js 위치
|
||||
|
||||
let aecWasm; // 전역 캐시
|
||||
|
||||
export async function initAec () {
|
||||
if (aecWasm) return aecWasm; // 이미 초기화됐으면 그대로
|
||||
|
||||
// ⬇️ locateFile: aec.js 가 wasm 로드를 시도할 때 호출
|
||||
aecWasm = await createAecModule({
|
||||
locateFile (filename) {
|
||||
// aec.js 는 ‘aec.wasm’ 한 개만 요청하므로, 주소를 직접 반환
|
||||
return '../../../assets/' + filename; // ← **브라우저 기준 URL**
|
||||
// (Electron renderer 에서 file://…/dist/renderer/… 에서 접근)
|
||||
}
|
||||
});
|
||||
|
||||
// C → JS 래퍼
|
||||
aecWasm.newPtr = aecWasm.cwrap('AecNew', 'number',
|
||||
['number','number','number','number']);
|
||||
aecWasm.cancel = aecWasm.cwrap('AecCancelEcho', null,
|
||||
['number','number','number','number','number']);
|
||||
aecWasm.destroy = aecWasm.cwrap('AecDestroy', null, ['number']);
|
||||
|
||||
return aecWasm;
|
||||
}
|
||||
|
||||
// 바로 로드-실패 로그를 보기 위해
|
||||
initAec().catch(console.error);
|
||||
// ---------------------------
|
||||
// Constants & Globals
|
||||
// ---------------------------
|
||||
@ -80,6 +108,24 @@ function arrayBufferToBase64(buffer) {
|
||||
return btoa(binary);
|
||||
}
|
||||
|
||||
function int16PtrFromFloat32(mod, f32) {
|
||||
const len = f32.length;
|
||||
const bytes = len * 2;
|
||||
const ptr = mod._malloc(bytes);
|
||||
const i16 = new Int16Array(mod.HEAP16.buffer, ptr, len);
|
||||
for (let i = 0; i < len; ++i) {
|
||||
const s = Math.max(-1, Math.min(1, f32[i]));
|
||||
i16[i] = s < 0 ? s * 0x8000 : s * 0x7fff;
|
||||
}
|
||||
return { ptr, view: i16 };
|
||||
}
|
||||
|
||||
function float32FromInt16View(i16) {
|
||||
const out = new Float32Array(i16.length);
|
||||
for (let i = 0; i < i16.length; ++i) out[i] = i16[i] / 32768;
|
||||
return out;
|
||||
}
|
||||
|
||||
// ---------------------------
|
||||
// Complete SimpleAEC implementation (exact from renderer.js)
|
||||
// ---------------------------
|
||||
|
Loading…
x
Reference in New Issue
Block a user