import { NativeModules, Platform } from 'react-native'; import type { Errors } from '../native/ZoomVideoSdk'; const { RNZoomVideoSdkAudioHelper } = NativeModules; /** * A class to operate the audio action. */ export type ZoomVideoSdkAudioHelperType = { /** * Start audio. */ startAudio: () => Promise; /** * Stop audio. */ stopAudio: () => Promise; /** * Mute user audio by userId. */ muteAudio: (userId: string) => Promise; /** * Unmute user audio by userId. */ unmuteAudio: (userId: string) => Promise; /** * Call the function to subscribe audio rawdata. */ subscribe: () => Promise; /** * Call the function to unsubscribe video or share raw data. */ unsubscribe: () => Promise; /** * Set audio speaker */ setSpeaker: (isOn: boolean) => Promise; /** * Get audio speaker status */ getSpeakerStatus: () => Promise; /** * Query if audio speaker enabled */ canSwitchSpeaker: () => Promise; /** * Reset audio session including category and mode. */ resetAudioSession: () => Promise; /** * Clean audio session including category and mode. */ cleanAudioSession: () => void; /** * Allow attendees to unmute themselves. */ allowAudioUnmutedBySelf: (allowUnmute: boolean) => void; /** * Mute all audio. */ muteAllAudio: (allowUnmute: boolean) => Promise; /** * Unmute all audio. */ unmuteAllAudio: () => Promise; /** * Sets the AVAudioSession environment for the current session. * Only iOS is supported. */ setSDKAudioSessionEnv: () => Promise; }; export class ZoomVideoSdkAudioHelper implements ZoomVideoSdkAudioHelperType { async startAudio() { return await RNZoomVideoSdkAudioHelper.startAudio(); } async stopAudio() { return await RNZoomVideoSdkAudioHelper.stopAudio(); } async muteAudio(userId: string) { return await RNZoomVideoSdkAudioHelper.muteAudio(userId); } async unmuteAudio(userId: string) { return await RNZoomVideoSdkAudioHelper.unmuteAudio(userId); } async subscribe() { return await RNZoomVideoSdkAudioHelper.subscribe(); } async unsubscribe() { return await RNZoomVideoSdkAudioHelper.unsubscribe(); } async setSpeaker(isOn: boolean) { return await RNZoomVideoSdkAudioHelper.setSpeaker(isOn); } async getSpeakerStatus() { return await RNZoomVideoSdkAudioHelper.getSpeakerStatus(); } async canSwitchSpeaker() { return await RNZoomVideoSdkAudioHelper.canSwitchSpeaker(); } async resetAudioSession() { return await RNZoomVideoSdkAudioHelper.resetAudioSession(); } async cleanAudioSession() { return await RNZoomVideoSdkAudioHelper.cleanAudioSession(); } async allowAudioUnmutedBySelf(allowUnmute: boolean) { return await RNZoomVideoSdkAudioHelper.allowAudioUnmutedBySelf(allowUnmute); } async muteAllAudio(allowUnmute: boolean) { return await RNZoomVideoSdkAudioHelper.muteAllAudio(allowUnmute); } async unmuteAllAudio() { return await RNZoomVideoSdkAudioHelper.unmuteAllAudio(); } /** * Sets the AVAudioSession environment for Zoom Video SDK session (iOS only). * @returns If the function succeeds, it returns true. Otherwise, false. */ async setSDKAudioSessionEnv() { if (Platform.OS === 'ios') { return await RNZoomVideoSdkAudioHelper.setSDKAudioSessionEnv(); } return false; } }