next iteration state + audio settings
parent
1469f6c5fb
commit
a2d11121d3
|
|
@ -11,6 +11,7 @@
|
||||||
"@material-ui/core": "^4.5.1",
|
"@material-ui/core": "^4.5.1",
|
||||||
"@material-ui/icons": "^4.5.1",
|
"@material-ui/icons": "^4.5.1",
|
||||||
"bowser": "^2.7.0",
|
"bowser": "^2.7.0",
|
||||||
|
"classnames": "^2.2.6",
|
||||||
"dompurify": "^2.0.7",
|
"dompurify": "^2.0.7",
|
||||||
"domready": "^1.0.8",
|
"domready": "^1.0.8",
|
||||||
"end-of-stream": "1.4.0",
|
"end-of-stream": "1.4.0",
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,19 @@ var config =
|
||||||
{
|
{
|
||||||
tcp : true
|
tcp : true
|
||||||
},
|
},
|
||||||
lastN : 4,
|
lastN : 4,
|
||||||
mobileLastN : 1,
|
mobileLastN : 1,
|
||||||
background : 'images/background.jpg',
|
defaultAudio :
|
||||||
|
{
|
||||||
|
sampleRate : 48000,
|
||||||
|
channelCount : 1,
|
||||||
|
volume : 1.0,
|
||||||
|
autoGainControl : true,
|
||||||
|
echoCancellation : true,
|
||||||
|
noiseSuppression : true,
|
||||||
|
sampleSize : 16
|
||||||
|
},
|
||||||
|
background : 'images/background.jpg',
|
||||||
// Add file and uncomment for adding logo to appbar
|
// Add file and uncomment for adding logo to appbar
|
||||||
// logo : 'images/logo.svg',
|
// logo : 'images/logo.svg',
|
||||||
title : 'Multiparty meeting',
|
title : 'Multiparty meeting',
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ let requestTimeout,
|
||||||
transportOptions,
|
transportOptions,
|
||||||
lastN,
|
lastN,
|
||||||
mobileLastN,
|
mobileLastN,
|
||||||
|
defaultAudio,
|
||||||
defaultResolution;
|
defaultResolution;
|
||||||
|
|
||||||
if (process.env.NODE_ENV !== 'test')
|
if (process.env.NODE_ENV !== 'test')
|
||||||
|
|
@ -39,6 +40,7 @@ if (process.env.NODE_ENV !== 'test')
|
||||||
transportOptions,
|
transportOptions,
|
||||||
lastN,
|
lastN,
|
||||||
mobileLastN,
|
mobileLastN,
|
||||||
|
defaultAudio,
|
||||||
defaultResolution
|
defaultResolution
|
||||||
} = window.config);
|
} = window.config);
|
||||||
}
|
}
|
||||||
|
|
@ -203,6 +205,9 @@ export default class RoomClient
|
||||||
if (defaultResolution)
|
if (defaultResolution)
|
||||||
store.dispatch(settingsActions.setVideoResolution(defaultResolution));
|
store.dispatch(settingsActions.setVideoResolution(defaultResolution));
|
||||||
|
|
||||||
|
if (defaultAudio)
|
||||||
|
store.dispatch(settingsActions.setDefaultAudio(defaultAudio));
|
||||||
|
|
||||||
// Max spotlights
|
// Max spotlights
|
||||||
if (device.bowser.getPlatformType() === 'desktop')
|
if (device.bowser.getPlatformType() === 'desktop')
|
||||||
this._maxSpotlights = lastN;
|
this._maxSpotlights = lastN;
|
||||||
|
|
@ -1036,23 +1041,24 @@ export default class RoomClient
|
||||||
if (this._micProducer && this._micProducer.track)
|
if (this._micProducer && this._micProducer.track)
|
||||||
this._micProducer.track.stop();
|
this._micProducer.track.stop();
|
||||||
|
|
||||||
logger.debug('changeAudioDevice() | calling getUserMedia()');
|
logger.debug('changeAudioDevice() | calling getUserMedia() %o', store.getState().settings);
|
||||||
|
|
||||||
const stream = await navigator.mediaDevices.getUserMedia(
|
const stream = await navigator.mediaDevices.getUserMedia(
|
||||||
{
|
{
|
||||||
audio :
|
audio :
|
||||||
{
|
{
|
||||||
deviceId : { exact: device.deviceId },
|
deviceId : { exact: device.deviceId },
|
||||||
sampleRate : 48000,
|
sampleRate : store.getState().settings.sampleRate,
|
||||||
channelCount : 1,
|
channelCount : store.getState().settings.channelCount,
|
||||||
volume : 1.0,
|
volume : store.getState().settings.volume,
|
||||||
autoGainControl : true,
|
autoGainControl : store.getState().settings.autoGainControl,
|
||||||
echoCancellation : false,
|
echoCancellation : store.getState().settings.echoCancellation,
|
||||||
noiseSuppression : false,
|
noiseSuppression : store.getState().settings.noiseSuppression,
|
||||||
sampleSize : 16
|
sampleSize : store.getState().settings.sampleSize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
logger.debug('Constraints: %o', stream.getAudioTracks()[0].getConstraints());
|
logger.debug('Constraints: %o', stream.getAudioTracks()[0].getConstraints());
|
||||||
const track = stream.getAudioTracks()[0];
|
const track = stream.getAudioTracks()[0];
|
||||||
|
|
||||||
|
|
@ -2697,6 +2703,7 @@ export default class RoomClient
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
logger.debug('Constraints: %o', stream.getAudioTracks()[0].getConstraints());
|
logger.debug('Constraints: %o', stream.getAudioTracks()[0].getConstraints());
|
||||||
|
|
||||||
track = stream.getAudioTracks()[0];
|
track = stream.getAudioTracks()[0];
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,45 @@ export const togglePermanentTopBar = () =>
|
||||||
type : 'TOGGLE_PERMANENT_TOPBAR'
|
type : 'TOGGLE_PERMANENT_TOPBAR'
|
||||||
});
|
});
|
||||||
|
|
||||||
|
export const setEchoCancellation = (echoCancellation) =>
|
||||||
|
({
|
||||||
|
type : 'SET_ECHO_CANCELLATION',
|
||||||
|
payload : { echoCancellation }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const setAutoGainControl = (autoGainControl) =>
|
||||||
|
({
|
||||||
|
type : 'SET_AUTO_GAIN_CONTROL',
|
||||||
|
payload : { autoGainControl }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const setNoiseSuppression = (noiseSuppression) =>
|
||||||
|
({
|
||||||
|
type : 'SET_NOISE_SUPPRESSION',
|
||||||
|
payload : { noiseSuppression }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const setDefaultAudio = (defaultAudio) =>
|
||||||
|
({
|
||||||
|
type : 'SET_DEFAULT_AUDIO',
|
||||||
|
payload : { defaultAudio }
|
||||||
|
});
|
||||||
|
|
||||||
|
export const toggleEchoCancellation = () =>
|
||||||
|
({
|
||||||
|
type : 'TOGGLE_ECHO_CANCELLATION'
|
||||||
|
});
|
||||||
|
|
||||||
|
export const toggleAutoGainControl = () =>
|
||||||
|
({
|
||||||
|
type : 'TOGGLE_AUTO_GAIN_CONTROL'
|
||||||
|
});
|
||||||
|
|
||||||
|
export const toggleNoiseSuppression = () =>
|
||||||
|
({
|
||||||
|
type : 'TOGGLE_NOISE_SUPPRESSION'
|
||||||
|
});
|
||||||
|
|
||||||
export const setLastN = (lastN) =>
|
export const setLastN = (lastN) =>
|
||||||
({
|
({
|
||||||
type : 'SET_LAST_N',
|
type : 'SET_LAST_N',
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,9 @@ const Settings = ({
|
||||||
settings,
|
settings,
|
||||||
onToggleAdvancedMode,
|
onToggleAdvancedMode,
|
||||||
onTogglePermanentTopBar,
|
onTogglePermanentTopBar,
|
||||||
|
setEchoCancellation,
|
||||||
|
setAutoGainControl,
|
||||||
|
setNoiseSuppression,
|
||||||
handleCloseSettings,
|
handleCloseSettings,
|
||||||
handleChangeMode,
|
handleChangeMode,
|
||||||
classes
|
classes
|
||||||
|
|
@ -329,6 +332,49 @@ const Settings = ({
|
||||||
</FormHelperText>
|
</FormHelperText>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
</form>
|
</form>
|
||||||
|
<FormControlLabel
|
||||||
|
className={classes.setting}
|
||||||
|
control={
|
||||||
|
<Checkbox checked={settings.echoCancellation} onChange={
|
||||||
|
(event) =>
|
||||||
|
{
|
||||||
|
setEchoCancellation(event.target.checked);
|
||||||
|
roomClient.changeAudioDevice(settings.selectedAudioDevice);
|
||||||
|
}}
|
||||||
|
/>}
|
||||||
|
label={intl.formatMessage({
|
||||||
|
id : 'settings.echoCancellation',
|
||||||
|
defaultMessage : 'Echo Cancellation'
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
<FormControlLabel
|
||||||
|
className={classes.setting}
|
||||||
|
control={
|
||||||
|
<Checkbox checked={settings.autoGainControl} onChange={
|
||||||
|
(event) => {
|
||||||
|
setAutoGainControl(event.target.checked);
|
||||||
|
roomClient.changeAudioDevice(settings.selectedAudioDevice);
|
||||||
|
}}
|
||||||
|
/>}
|
||||||
|
label={intl.formatMessage({
|
||||||
|
id: 'settings.autoGainControl',
|
||||||
|
defaultMessage: 'Auto Gain Control'
|
||||||
|
})}
|
||||||
|
/>
|
||||||
|
<FormControlLabel
|
||||||
|
className={classes.setting}
|
||||||
|
control={
|
||||||
|
<Checkbox checked={settings.noiseSuppression} onChange={
|
||||||
|
(event) => {
|
||||||
|
setNoiseSuppression(event.target.checked);
|
||||||
|
roomClient.changeAudioDevice(settings.selectedAudioDevice);
|
||||||
|
}}
|
||||||
|
/>}
|
||||||
|
label={intl.formatMessage({
|
||||||
|
id: 'settings.noiseSuppression',
|
||||||
|
defaultMessage: 'Noise Suppression'
|
||||||
|
})}
|
||||||
|
/>
|
||||||
<FormControlLabel
|
<FormControlLabel
|
||||||
className={classes.setting}
|
className={classes.setting}
|
||||||
control={<Checkbox checked={settings.permanentTopBar} onChange={onTogglePermanentTopBar} value='permanentTopBar' />}
|
control={<Checkbox checked={settings.permanentTopBar} onChange={onTogglePermanentTopBar} value='permanentTopBar' />}
|
||||||
|
|
@ -359,6 +405,9 @@ Settings.propTypes =
|
||||||
settings : PropTypes.object.isRequired,
|
settings : PropTypes.object.isRequired,
|
||||||
onToggleAdvancedMode : PropTypes.func.isRequired,
|
onToggleAdvancedMode : PropTypes.func.isRequired,
|
||||||
onTogglePermanentTopBar : PropTypes.func.isRequired,
|
onTogglePermanentTopBar : PropTypes.func.isRequired,
|
||||||
|
setEchoCancellation : PropTypes.func.isRequired,
|
||||||
|
setAutoGainControl : PropTypes.func.isRequired,
|
||||||
|
setNoiseSuppression : PropTypes.func.isRequired,
|
||||||
handleChangeMode : PropTypes.func.isRequired,
|
handleChangeMode : PropTypes.func.isRequired,
|
||||||
handleCloseSettings : PropTypes.func.isRequired,
|
handleCloseSettings : PropTypes.func.isRequired,
|
||||||
classes : PropTypes.object.isRequired
|
classes : PropTypes.object.isRequired
|
||||||
|
|
@ -376,6 +425,9 @@ const mapStateToProps = (state) =>
|
||||||
const mapDispatchToProps = {
|
const mapDispatchToProps = {
|
||||||
onToggleAdvancedMode : settingsActions.toggleAdvancedMode,
|
onToggleAdvancedMode : settingsActions.toggleAdvancedMode,
|
||||||
onTogglePermanentTopBar : settingsActions.togglePermanentTopBar,
|
onTogglePermanentTopBar : settingsActions.togglePermanentTopBar,
|
||||||
|
setEchoCancellation : settingsActions.setEchoCancellation,
|
||||||
|
setAutoGainControl : settingsActions.toggleAutoGainControl,
|
||||||
|
setNoiseSuppression : settingsActions.toggleNoiseSuppression,
|
||||||
handleChangeMode : roomActions.setDisplayMode,
|
handleChangeMode : roomActions.setDisplayMode,
|
||||||
handleCloseSettings : roomActions.setSettingsOpen
|
handleCloseSettings : roomActions.setSettingsOpen
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ const initialState =
|
||||||
selectedWebcam : null,
|
selectedWebcam : null,
|
||||||
selectedAudioDevice : null,
|
selectedAudioDevice : null,
|
||||||
advancedMode : false,
|
advancedMode : false,
|
||||||
|
sampleRate : 48000,
|
||||||
|
channelCount : 1,
|
||||||
|
volume : 1.0,
|
||||||
|
autoGainControl : true,
|
||||||
|
echoCancellation : true,
|
||||||
|
noiseSuppression : true,
|
||||||
|
sampleSize : 16,
|
||||||
resolution : 'medium', // low, medium, high, veryhigh, ultra
|
resolution : 'medium', // low, medium, high, veryhigh, ultra
|
||||||
lastN : 4,
|
lastN : 4,
|
||||||
permanentTopBar : true
|
permanentTopBar : true
|
||||||
|
|
@ -37,6 +44,76 @@ const settings = (state = initialState, action) =>
|
||||||
return { ...state, advancedMode };
|
return { ...state, advancedMode };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case 'SET_SAMPLE_RATE':
|
||||||
|
{
|
||||||
|
const { sampleRate } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, sampleRate };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_CHANNEL_COUNT':
|
||||||
|
{
|
||||||
|
const { channelCount } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, channelCount };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_VOLUME':
|
||||||
|
{
|
||||||
|
const { volume } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, volume };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_AUTO_GAIN_CONTROL':
|
||||||
|
{
|
||||||
|
const { autoGainControl } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, autoGainControl };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_ECHO_CANCELLATION':
|
||||||
|
{
|
||||||
|
const { echoCancellation } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, echoCancellation };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_NOISE_SUPPRESSION':
|
||||||
|
{
|
||||||
|
const { noiseSuppression } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, noiseSuppression };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'TOGGLE_AUTO_GAIN_CONTROL':
|
||||||
|
{
|
||||||
|
const autoGainControl = !state.autoGainControl;
|
||||||
|
|
||||||
|
return { ...state, autoGainControl };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'TOGGLE_ECHO_CANCELLATION':
|
||||||
|
{
|
||||||
|
const echoCancellation = !state.echoCancellation;
|
||||||
|
|
||||||
|
return { ...state, echoCancellation };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'TOGGLE_NOISE_SUPPRESSION':
|
||||||
|
{
|
||||||
|
const noiseSuppression = !state.noiseSuppression;
|
||||||
|
|
||||||
|
return { ...state, noiseSuppression };
|
||||||
|
}
|
||||||
|
|
||||||
|
case 'SET_SAMPLE_SIZE':
|
||||||
|
{
|
||||||
|
const { sampleSize } = action.payload;
|
||||||
|
|
||||||
|
return { ...state, sampleSize };
|
||||||
|
}
|
||||||
|
|
||||||
case 'SET_LAST_N':
|
case 'SET_LAST_N':
|
||||||
{
|
{
|
||||||
const { lastN } = action.payload;
|
const { lastN } = action.payload;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue