| name | audio-controls |
| description | Control audio during calls — mute/unmute microphone, switch audio output device (speaker, earpiece, bluetooth). Use when implementing audio toggle, audio mode switching, or custom mute buttons. Triggers on "mute audio", "unmute", "audio mode", "speaker", "earpiece", "bluetooth audio". |
| inclusion | manual |
CometChat Calls SDK v5 — Audio Controls
Overview
Programmatically control the local microphone (mute/unmute) and audio output device during an active call.
Key Imports
import CometChatCallsSDK
import AVFoundation
Implementation
Mute / Unmute
CallSession.shared.muteAudio()
CallSession.shared.unmuteAudio()
Switch Audio Output (AVAudioSession)
let session = AVAudioSession.sharedInstance()
try session.overrideOutputAudioPort(.speaker)
try session.overrideOutputAudioPort(.none)
try session.setCategory(.playAndRecord, mode: .voiceChat, options: [.allowBluetooth, .allowBluetoothA2DP])
Listen for Audio Events
class MediaHandler: NSObject, MediaEventsListener {
func onAudioMuted() {
}
func onAudioUnMuted() {
}
func onAudioModeChanged(audioMode: AudioMode) {
}
}
CallSession.shared.addMediaEventsListener(handler)
Initial Audio Settings (Pre-Session)
let settings = SessionSettingsBuilder()
.startAudioMuted(true)
.hideToggleAudioButton(false)
.hideAudioModeButton(false)
.build()
Gotchas
muteAudio() / unmuteAudio() only work during an active session
- For voice calls, default to earpiece; for video calls, default to speaker
- Bluetooth audio mode only works when a Bluetooth device is connected
- AVAudioSession changes should be wrapped in try/catch
Sample App Reference
CallView.swift — Session settings with audio configuration