# Core features The Video SDK for macOS lets you control user audio during a session: check whether a user is connected to audio, connect, mute and unmute, and disconnect. For host-level controls over everyone's audio, see [Host audio controls](/docs/video-sdk/macos/audio/host-controls/). > Prior to using audio controls, you must **request permission to use the microphone**. For details, see [Requesting Authorization for Media Capture on macOS](https://developer.apple.com/documentation/avfoundation/cameras_and_media_capture/requesting_authorization_for_media_capture_on_macos?language=objc). ## Check if the user is connected to audio Before you can use audio controls, check if the user is connected to audio by getting the user's `ZMVideoSDKAudioType`. ```swift // Get the user's audioStatus. if let audioStatus = user.getAudioStatus() { // Get the user's audioType. let audioType = audioStatus.getAudioType() } ``` ```objectivec // Get the user's audioStatus. ZMVideoSDKAudioStatus *audioStatus = [user getAudioStatus]; // Get the user's audioType. ZMVideoSDKAudioType audioType = [audioStatus getAudioType]; ``` ## Connect to audio If the user is not already connected, connect to the audio through the `ZMVideoSDKAudioHelper`. ```swift if audioType == ZMVideoSDKAudioType_None { // User's audio is not connected. // Get the ZMVideoSDKAudioHelper to perform audio actions. if let audioHelper = ZMVideoSDK.shared()?.getAudioHelper() { // Connect user's audio. audioHelper.startAudio() } } else { // User is already connected to audio. } ``` ```objectivec if (audioType == ZMVideoSDKAudioType_None) { // User's audio is not connected. // Get the ZMVideoSDKAudioHelper to perform audio actions. ZMVideoSDKAudioHelper *audioHelper = [[ZMVideoSDK sharedVideoSDK] getAudioHelper]; if (audioHelper) { // Connect user's audio. [audioHelper startAudio]; } } else { // User is already connected to audio. } ``` ## Mute audio Once connected, mute a user's audio by calling `muteAudio` with the user. ```swift // Get the ZMVideoSDKAudioHelper to perform audio actions. if let audioHelper = ZMVideoSDK.shared()?.getAudioHelper() { // Mute user. audioHelper.muteAudio(user) } ``` ```objectivec // Get the ZMVideoSDKAudioHelper to perform audio actions. ZMVideoSDKAudioHelper *audioHelper = [[ZMVideoSDK sharedVideoSDK] getAudioHelper]; if (audioHelper) { // Mute user. [audioHelper muteAudio:user]; } ``` ## Unmute audio Unmute a user's audio in a similar manner using `unMuteAudio`. ```swift // Get the ZMVideoSDKAudioHelper to perform audio actions. if let audioHelper = ZMVideoSDK.shared()?.getAudioHelper() { // Unmute user. audioHelper.unMuteAudio(user) } ``` ```objectivec // Get the ZMVideoSDKAudioHelper to perform audio actions. ZMVideoSDKAudioHelper *audioHelper = [[ZMVideoSDK sharedVideoSDK] getAudioHelper]; if (audioHelper) { // Unmute user. [audioHelper unMuteAudio:user]; } ``` ## Disconnect from audio To disconnect completely from audio, use `stopAudio`. ```swift // Get the ZMVideoSDKAudioHelper to perform audio actions. if let audioHelper = ZMVideoSDK.shared()?.getAudioHelper() { // Disconnect user's audio. audioHelper.stopAudio() } ``` ```objectivec // Get the ZMVideoSDKAudioHelper to perform audio actions. ZMVideoSDKAudioHelper *audioHelper = [[ZMVideoSDK sharedVideoSDK] getAudioHelper]; if (audioHelper) { // Disconnect user's audio. [audioHelper stopAudio]; } ``` To react to audio status changes, implement the [audio events](/docs/video-sdk/macos/audio/audio-events/).