diff --git a/app/lib/RoomClient.js b/app/lib/RoomClient.js index b709fbc..b17dfc3 100644 --- a/app/lib/RoomClient.js +++ b/app/lib/RoomClient.js @@ -601,6 +601,34 @@ export default class RoomClient const newTrack = await this._micProducer.replaceTrack(track); + const harkStream = new MediaStream; + + harkStream.addTrack(newTrack); + if (!harkStream.getAudioTracks()[0]) + throw new Error('changeAudioDevice(): given stream has no audio track'); + if (this._micProducer.hark != null) this._micProducer.hark.stop(); + this._micProducer.hark = hark(harkStream, { play: false }); + + // eslint-disable-next-line no-unused-vars + this._micProducer.hark.on('volume_change', (dBs, threshold) => + { + // The exact formula to convert from dBs (-100..0) to linear (0..1) is: + // Math.pow(10, dBs / 20) + // However it does not produce a visually useful output, so let exagerate + // it a bit. Also, let convert it from 0..1 to 0..10 and avoid value 1 to + // minimize component renderings. + let volume = Math.round(Math.pow(10, dBs / 85) * 10); + + if (volume === 1) + volume = 0; + + if (volume !== this._micProducer.volume) + { + this._micProducer.volume = volume; + this._dispatch(stateActions.setProducerVolume(this._micProducer.id, volume)); + } + }); + track.stop(); this._dispatch( diff --git a/app/lib/components/ToolArea/ToolAreaButton.jsx b/app/lib/components/ToolArea/ToolAreaButton.jsx index 43139a7..a0a3dd3 100644 --- a/app/lib/components/ToolArea/ToolAreaButton.jsx +++ b/app/lib/components/ToolArea/ToolAreaButton.jsx @@ -29,7 +29,6 @@ class ToolAreaButton extends React.Component })} data-tip='Toggle tool area' data-type='dark' - data-for='globaltip' onClick={() => toggleToolArea()} /> diff --git a/app/lib/store.js b/app/lib/store.js index cdff97d..1208e8c 100644 --- a/app/lib/store.js +++ b/app/lib/store.js @@ -18,6 +18,7 @@ if (process.env.NODE_ENV === 'development') { const reduxLogger = createLogger( { + predicate : (getState, action) => action.type !== 'SET_PRODUCER_VOLUME', duration : true, timestamp : false, level : 'log', @@ -43,4 +44,4 @@ export const store = createStore( reducers, undefined, enhancer -); \ No newline at end of file +);