Add handling for local volume control
Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
parent
a3e4d6998f
commit
4ad4cff23f
2 changed files with 20 additions and 3 deletions
|
@ -27,6 +27,7 @@ function getCallFeedState(callFeed) {
|
||||||
: true,
|
: true,
|
||||||
videoMuted: callFeed ? callFeed.isVideoMuted() : true,
|
videoMuted: callFeed ? callFeed.isVideoMuted() : true,
|
||||||
audioMuted: callFeed ? callFeed.isAudioMuted() : true,
|
audioMuted: callFeed ? callFeed.isAudioMuted() : true,
|
||||||
|
localVolume: callFeed ? callFeed.getLocalVolume() : 0,
|
||||||
stream: callFeed ? callFeed.stream : undefined,
|
stream: callFeed ? callFeed.stream : undefined,
|
||||||
purpose: callFeed ? callFeed.purpose : undefined,
|
purpose: callFeed ? callFeed.purpose : undefined,
|
||||||
};
|
};
|
||||||
|
@ -44,6 +45,10 @@ export function useCallFeed(callFeed) {
|
||||||
setState((prevState) => ({ ...prevState, audioMuted, videoMuted }));
|
setState((prevState) => ({ ...prevState, audioMuted, videoMuted }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onLocalVolumeChanged(localVolume) {
|
||||||
|
setState((prevState) => ({ ...prevState, localVolume }))
|
||||||
|
}
|
||||||
|
|
||||||
function onUpdateCallFeed() {
|
function onUpdateCallFeed() {
|
||||||
setState(getCallFeedState(callFeed));
|
setState(getCallFeedState(callFeed));
|
||||||
}
|
}
|
||||||
|
@ -51,6 +56,7 @@ export function useCallFeed(callFeed) {
|
||||||
if (callFeed) {
|
if (callFeed) {
|
||||||
callFeed.on(CallFeedEvent.Speaking, onSpeaking);
|
callFeed.on(CallFeedEvent.Speaking, onSpeaking);
|
||||||
callFeed.on(CallFeedEvent.MuteStateChanged, onMuteStateChanged);
|
callFeed.on(CallFeedEvent.MuteStateChanged, onMuteStateChanged);
|
||||||
|
callFeed.on(CallFeedEvent.LocalVolumeChanged, onLocalVolumeChanged);
|
||||||
callFeed.on(CallFeedEvent.NewStream, onUpdateCallFeed);
|
callFeed.on(CallFeedEvent.NewStream, onUpdateCallFeed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,6 +69,7 @@ export function useCallFeed(callFeed) {
|
||||||
CallFeedEvent.MuteStateChanged,
|
CallFeedEvent.MuteStateChanged,
|
||||||
onMuteStateChanged
|
onMuteStateChanged
|
||||||
);
|
);
|
||||||
|
callFeed.removeListener(CallFeedEvent.LocalVolumeChanged, onLocalVolumeChanged);
|
||||||
callFeed.removeListener(CallFeedEvent.NewStream, onUpdateCallFeed);
|
callFeed.removeListener(CallFeedEvent.NewStream, onUpdateCallFeed);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -33,7 +33,8 @@ declare global {
|
||||||
export const useMediaStream = (
|
export const useMediaStream = (
|
||||||
stream: MediaStream,
|
stream: MediaStream,
|
||||||
audioOutputDevice: string,
|
audioOutputDevice: string,
|
||||||
mute = false
|
mute = false,
|
||||||
|
localVolume: number,
|
||||||
): RefObject<MediaElement> => {
|
): RefObject<MediaElement> => {
|
||||||
const mediaRef = useRef<MediaElement>();
|
const mediaRef = useRef<MediaElement>();
|
||||||
|
|
||||||
|
@ -84,6 +85,13 @@ export const useMediaStream = (
|
||||||
}
|
}
|
||||||
}, [audioOutputDevice]);
|
}, [audioOutputDevice]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (!mediaRef.current) return;
|
||||||
|
if (localVolume === null || localVolume === undefined) return;
|
||||||
|
|
||||||
|
mediaRef.current.volume = localVolume;
|
||||||
|
}, [localVolume])
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const mediaEl = mediaRef.current;
|
const mediaEl = mediaRef.current;
|
||||||
|
|
||||||
|
@ -187,7 +195,8 @@ export const useSpatialMediaStream = (
|
||||||
audioOutputDevice: string,
|
audioOutputDevice: string,
|
||||||
audioContext: AudioContext,
|
audioContext: AudioContext,
|
||||||
audioDestination: AudioNode,
|
audioDestination: AudioNode,
|
||||||
mute = false
|
mute = false,
|
||||||
|
localVolume: number,
|
||||||
): [RefObject<Element>, RefObject<MediaElement>] => {
|
): [RefObject<Element>, RefObject<MediaElement>] => {
|
||||||
const tileRef = useRef<Element>();
|
const tileRef = useRef<Element>();
|
||||||
const [spatialAudio] = useSpatialAudio();
|
const [spatialAudio] = useSpatialAudio();
|
||||||
|
@ -195,7 +204,8 @@ export const useSpatialMediaStream = (
|
||||||
const mediaRef = useMediaStream(
|
const mediaRef = useMediaStream(
|
||||||
stream,
|
stream,
|
||||||
audioOutputDevice,
|
audioOutputDevice,
|
||||||
spatialAudio || mute
|
spatialAudio || mute,
|
||||||
|
localVolume,
|
||||||
);
|
);
|
||||||
|
|
||||||
const pannerNodeRef = useRef<PannerNode>();
|
const pannerNodeRef = useRef<PannerNode>();
|
||||||
|
|
Loading…
Add table
Reference in a new issue