snapshot of https://github.com/jitsi/jitsi-meet.git @ fd1749dd28f4138aa80234fc7f311b19aaffa0e7 (2026-09-15)
This commit is contained in:
98
react/features/noise-suppression/actions.ts
Normal file
98
react/features/noise-suppression/actions.ts
Normal file
@@ -0,0 +1,98 @@
|
||||
import { IStore } from '../app/types';
|
||||
import { getLocalJitsiAudioTrack } from '../base/tracks/functions';
|
||||
import { showErrorNotification } from '../notifications/actions';
|
||||
import { NoiseSuppressionEffect } from '../stream-effects/noise-suppression/NoiseSuppressionEffect';
|
||||
|
||||
import { SET_NOISE_SUPPRESSION_ENABLED } from './actionTypes';
|
||||
import { canEnableNoiseSuppression, isNoiseSuppressionEnabled } from './functions';
|
||||
import logger from './logger';
|
||||
|
||||
/**
|
||||
* Updates the noise suppression active state.
|
||||
*
|
||||
* @param {boolean} enabled - Is noise suppression enabled.
|
||||
* @returns {{
|
||||
* type: SET_NOISE_SUPPRESSION_STATE,
|
||||
* enabled: boolean
|
||||
* }}
|
||||
*/
|
||||
export function setNoiseSuppressionEnabledState(enabled: boolean): any {
|
||||
return {
|
||||
type: SET_NOISE_SUPPRESSION_ENABLED,
|
||||
enabled
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Enabled/disable noise suppression depending on the current state.
|
||||
*
|
||||
* @returns {Function}
|
||||
*/
|
||||
export function toggleNoiseSuppression(): any {
|
||||
return (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||
if (isNoiseSuppressionEnabled(getState())) {
|
||||
dispatch(setNoiseSuppressionEnabled(false));
|
||||
} else {
|
||||
dispatch(setNoiseSuppressionEnabled(true));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Attempt to enable or disable noise suppression using the {@link NoiseSuppressionEffect}.
|
||||
*
|
||||
* @param {boolean} enabled - Enable or disable noise suppression.
|
||||
*
|
||||
* @returns {Function}
|
||||
*/
|
||||
export function setNoiseSuppressionEnabled(enabled: boolean): any {
|
||||
return async (dispatch: IStore['dispatch'], getState: IStore['getState']) => {
|
||||
const state = getState();
|
||||
|
||||
const { noiseSuppression: nsOptions } = state['features/base/config'];
|
||||
const localAudio = getLocalJitsiAudioTrack(state);
|
||||
const noiseSuppressionEnabled = isNoiseSuppressionEnabled(state);
|
||||
|
||||
logger.info(`Attempting to set noise suppression enabled state: ${enabled}`);
|
||||
|
||||
if (enabled === noiseSuppressionEnabled) {
|
||||
logger.warn(`Noise suppression enabled state already: ${enabled}`);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// If there is no local audio, simply set the enabled state. Once an audio track is created
|
||||
// the effects list will be applied.
|
||||
if (!localAudio) {
|
||||
dispatch(setNoiseSuppressionEnabledState(enabled));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
if (enabled) {
|
||||
if (!canEnableNoiseSuppression(state, dispatch, localAudio)) {
|
||||
return;
|
||||
}
|
||||
|
||||
await localAudio.setEffect(new NoiseSuppressionEffect(nsOptions));
|
||||
dispatch(setNoiseSuppressionEnabledState(true));
|
||||
logger.info('Noise suppression enabled.');
|
||||
|
||||
} else {
|
||||
await localAudio.setEffect(undefined);
|
||||
dispatch(setNoiseSuppressionEnabledState(false));
|
||||
logger.info('Noise suppression disabled.');
|
||||
}
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`Failed to set noise suppression enabled to: ${enabled}`,
|
||||
error
|
||||
);
|
||||
|
||||
dispatch(showErrorNotification({
|
||||
titleKey: 'notify.noiseSuppressionFailedTitle'
|
||||
}));
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user