|
@@ -90,7 +90,7 @@ export class NoiseSuppressionEffect {
|
90
|
90
|
let init;
|
91
|
91
|
|
92
|
92
|
if (this._options?.krisp?.enabled) {
|
93
|
|
- init = _initializeKrisp(this._options).then(filterNode => {
|
|
93
|
+ init = _initializeKrisp(this._options, audioStream).then(filterNode => {
|
94
|
94
|
this._noiseSuppressorNode = filterNode;
|
95
|
95
|
|
96
|
96
|
if (krispState.filterNodeReady) {
|
|
@@ -167,26 +167,52 @@ export class NoiseSuppressionEffect {
|
167
|
167
|
* Initializes the Krisp SDK and creates the filter node.
|
168
|
168
|
*
|
169
|
169
|
* @param {INoiseSuppressionConfig} options - Krisp options.
|
|
170
|
+ * @param {MediaStream} stream - Audio stream which will be mixed with _mixAudio.
|
170
|
171
|
*
|
171
|
172
|
* @returns {Promise<AudioWorkletNode | undefined>}
|
172
|
173
|
*/
|
173
|
|
-async function _initializeKrisp(options: INoiseSuppressionConfig): Promise<AudioWorkletNode | undefined> {
|
|
174
|
+async function _initializeKrisp(
|
|
175
|
+ options: INoiseSuppressionConfig,
|
|
176
|
+ stream: MediaStream
|
|
177
|
+): Promise<AudioWorkletNode | undefined> {
|
174
|
178
|
await audioContext.resume();
|
175
|
179
|
|
176
|
180
|
if (!krispState.sdk) {
|
177
|
181
|
const baseUrl = `${getBaseUrl()}libs/krisp`;
|
178
|
182
|
const { default: KrispSDK } = await import(/* webpackIgnore: true */ `${baseUrl}/krispsdk.mjs`);
|
179
|
183
|
|
180
|
|
- krispState.sdk = new KrispSDK({
|
181
|
|
- params: {
|
|
184
|
+ const ncParams = {
|
|
185
|
+ krisp: {
|
182
|
186
|
models: {
|
183
|
|
- model8: `${baseUrl}/models/model_8.kw`,
|
184
|
|
- model16: `${baseUrl}/models/model_16.kw`,
|
185
|
|
- model32: `${baseUrl}/models/model_32.kw`
|
|
187
|
+ modelBVC: `${baseUrl}/models/${options?.krisp?.models?.modelBVC}`,
|
|
188
|
+ model8: `${baseUrl}/models/${options?.krisp?.models?.model8}`,
|
|
189
|
+ modelNC: `${baseUrl}/models/${options?.krisp?.models?.modelNC}`
|
|
190
|
+ },
|
|
191
|
+ logProcessStats: !options?.krisp?.logProcessStats,
|
|
192
|
+ debugLogs: !options?.krisp?.debugLogs,
|
|
193
|
+ useBVC: !options?.krisp?.useBVC,
|
|
194
|
+ bvc: {
|
|
195
|
+ allowedDevices: `${baseUrl}/assets/${options?.krisp?.bvc?.allowedDevices}`,
|
|
196
|
+ allowedDevicesExt: `${baseUrl}/assets/${options?.krisp?.bvc?.allowedDevicesExt}`
|
|
197
|
+ },
|
|
198
|
+ inboundModels: {
|
|
199
|
+ modelInbound8: `${baseUrl}/models/${options?.krisp?.inboundModels?.modelInbound8}`,
|
|
200
|
+ modelInbound16: `${baseUrl}/models/${options?.krisp?.inboundModels?.modelInbound16}`
|
|
201
|
+ },
|
|
202
|
+ preloadModels: {
|
|
203
|
+ modelBVC: `${baseUrl}/models/${options?.krisp?.preloadModels?.modelBVC}`,
|
|
204
|
+ model8: `${baseUrl}/models/${options?.krisp?.preloadModels?.model8}`,
|
|
205
|
+ modelNC: `${baseUrl}/models/${options?.krisp?.preloadModels?.modelNC}`
|
186
|
206
|
},
|
187
|
|
- logProcessStats: options?.krisp?.logProcessStats,
|
188
|
|
- debugLogs: options?.krisp?.debugLogs
|
189
|
|
- },
|
|
207
|
+ preloadInboundModels: {
|
|
208
|
+ modelInbound8: `${baseUrl}/models/${options?.krisp?.preloadInboundModels?.modelInbound8}`,
|
|
209
|
+ modelInbound16: `${baseUrl}/models/${options?.krisp?.preloadInboundModels?.modelInbound16}`
|
|
210
|
+ }
|
|
211
|
+ }
|
|
212
|
+ };
|
|
213
|
+
|
|
214
|
+ krispState.sdk = new KrispSDK({
|
|
215
|
+ params: ncParams.krisp,
|
190
|
216
|
callbacks: {}
|
191
|
217
|
});
|
192
|
218
|
}
|
|
@@ -201,14 +227,20 @@ async function _initializeKrisp(options: INoiseSuppressionConfig): Promise<Audio
|
201
|
227
|
if (!krispState.filterNode) {
|
202
|
228
|
try {
|
203
|
229
|
// @ts-ignore
|
204
|
|
- krispState.filterNode = await krispState.sdk?.createNoiseFilter(audioContext, () => {
|
205
|
|
- logger.info('Krisp audio filter ready');
|
|
230
|
+ krispState.filterNode = await krispState.sdk?.createNoiseFilter(
|
|
231
|
+ {
|
|
232
|
+ audioContext,
|
|
233
|
+ stream
|
|
234
|
+ },
|
|
235
|
+ () => {
|
|
236
|
+ logger.info('Krisp audio filter ready');
|
206
|
237
|
|
207
|
|
- // Enable audio filtering.
|
208
|
|
- // @ts-ignore
|
209
|
|
- krispState.filterNode?.enable();
|
210
|
|
- krispState.filterNodeReady = true;
|
211
|
|
- });
|
|
238
|
+ // Enable audio filtering.
|
|
239
|
+ // @ts-ignore
|
|
240
|
+ krispState.filterNode?.enable();
|
|
241
|
+ krispState.filterNodeReady = true;
|
|
242
|
+ }
|
|
243
|
+ );
|
212
|
244
|
} catch (e) {
|
213
|
245
|
logger.error('Failed to create Krisp noise filter', e);
|
214
|
246
|
|