fix(calls): finalize DTLN integration, stabilize build, and fix formatting
This commit is contained in:
+20
-5
@@ -54,6 +54,10 @@
|
|||||||
script: 'speexWorklet.js',
|
script: 'speexWorklet.js',
|
||||||
wasm: 'speex.wasm',
|
wasm: 'speex.wasm',
|
||||||
},
|
},
|
||||||
|
dtln: {
|
||||||
|
name: 'noise-suppression-audio-worklet',
|
||||||
|
script: 'dtlnWorklet.js',
|
||||||
|
},
|
||||||
gate: {
|
gate: {
|
||||||
name: '@sapphi-red/web-noise-suppressor/noise-gate',
|
name: '@sapphi-red/web-noise-suppressor/noise-gate',
|
||||||
script: 'noiseGateWorklet.js',
|
script: 'noiseGateWorklet.js',
|
||||||
@@ -115,6 +119,7 @@
|
|||||||
}
|
}
|
||||||
// Load required modules
|
// Load required modules
|
||||||
var scripts = [PROCESSORS[MODEL].script];
|
var scripts = [PROCESSORS[MODEL].script];
|
||||||
|
if (MODEL === 'dtln') scripts.push('dtlnProcessor.js');
|
||||||
if (USE_GATE) scripts.push(PROCESSORS.gate.script);
|
if (USE_GATE) scripts.push(PROCESSORS.gate.script);
|
||||||
|
|
||||||
return Promise.all(
|
return Promise.all(
|
||||||
@@ -166,14 +171,24 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. ML Processor
|
// 2. ML Processor
|
||||||
var mlNode = new AudioWorkletNode(ctx, PROCESSORS[MODEL].name, {
|
var mlOptions = {
|
||||||
channelCount: 1,
|
channelCount: 1,
|
||||||
channelCountMode: 'explicit',
|
|
||||||
numberOfInputs: 1,
|
numberOfInputs: 1,
|
||||||
numberOfOutputs: 1,
|
numberOfOutputs: 1,
|
||||||
outputChannelCount: [1],
|
processorOptions: { maxChannels: 1 },
|
||||||
processorOptions: { maxChannels: 1, wasmBinary: wasmBinary },
|
};
|
||||||
});
|
|
||||||
|
if (MODEL === 'rnnoise' || MODEL === 'speex') {
|
||||||
|
mlOptions.processorOptions.wasmBinary = wasmBinary;
|
||||||
|
} else if (MODEL === 'dtln') {
|
||||||
|
mlOptions.processorOptions = {
|
||||||
|
wasmBinary: wasmBinary,
|
||||||
|
model1: ASSET_BASE + 'model_1.tflite',
|
||||||
|
model2: ASSET_BASE + 'model_2.tflite',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
var mlNode = new AudioWorkletNode(ctx, PROCESSORS[MODEL].name, mlOptions);
|
||||||
head.connect(mlNode);
|
head.connect(mlNode);
|
||||||
mlNode.connect(dest);
|
mlNode.connect(dest);
|
||||||
|
|
||||||
|
|||||||
@@ -1441,6 +1441,7 @@ function Calls() {
|
|||||||
options={[
|
options={[
|
||||||
{ value: 'rnnoise', label: 'RNNoise' },
|
{ value: 'rnnoise', label: 'RNNoise' },
|
||||||
{ value: 'speex', label: 'Speex (Legacy)' },
|
{ value: 'speex', label: 'Speex (Legacy)' },
|
||||||
|
{ value: 'dtln', label: 'DTLN (Balanced)' },
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,6 +97,35 @@ function lotusDenoise() {
|
|||||||
path.join(sapphi, 'noiseGate/workletProcessor.js'),
|
path.join(sapphi, 'noiseGate/workletProcessor.js'),
|
||||||
path.join(denoiseDir, 'noiseGateWorklet.js'),
|
path.join(denoiseDir, 'noiseGateWorklet.js'),
|
||||||
],
|
],
|
||||||
|
// DTLN (WorkAdventure v0.0.4)
|
||||||
|
[
|
||||||
|
path.resolve('cinny/node_modules/@workadventure/noise-suppression/dist/audio-worklet.js'),
|
||||||
|
path.join(denoiseDir, 'dtlnWorklet.js'),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
path.resolve(
|
||||||
|
'cinny/node_modules/@workadventure/noise-suppression/dist/assets/audio-worklet-processor.js',
|
||||||
|
),
|
||||||
|
path.join(denoiseDir, 'dtlnProcessor.js'),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
path.resolve(
|
||||||
|
'cinny/node_modules/@workadventure/noise-suppression/dist/vendor/litert/litert_wasm_internal.wasm',
|
||||||
|
),
|
||||||
|
path.join(denoiseDir, 'litert_wasm_internal.wasm'),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
path.resolve(
|
||||||
|
'cinny/node_modules/@workadventure/noise-suppression/dist/assets/model_quant_1.tflite',
|
||||||
|
),
|
||||||
|
path.join(denoiseDir, 'model_1.tflite'),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
path.resolve(
|
||||||
|
'cinny/node_modules/@workadventure/noise-suppression/dist/assets/model_quant_2.tflite',
|
||||||
|
),
|
||||||
|
path.join(denoiseDir, 'model_2.tflite'),
|
||||||
|
],
|
||||||
];
|
];
|
||||||
const missing = assets.filter(([s]) => !fs.existsSync(s)).map(([s]) => s);
|
const missing = assets.filter(([s]) => !fs.existsSync(s)).map(([s]) => s);
|
||||||
if (missing.length > 0) {
|
if (missing.length > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user