# Listen for audio events The Video SDK for Windows fires audio-related callbacks through `IZoomVideoSDKDelegate`. Implement the callbacks below to react to audio state changes in your session. For details on setting up a delegate, see [callback events](/docs/video-sdk/windows/integrate/#callback-events). The `onUserAudioStatusChanged` callback is different from `onUserActiveAudioChanged`. - The SDK calls `onUserAudioStatusChanged` when the user's audio status changes. - The SDK calls `onUserActiveAudioChanged` when a given user's active audio changes. For example, if the user is unmuted and is using their device's microphone, the SDK triggers this callback whenever their microphone detects a sound. ## Get notified when a user's audio status has changed `onUserAudioStatusChanged` fires when a user mutes, unmutes, connects, or disconnects their audio. ```cpp void CExampleListener::onUserAudioStatusChanged(IZoomVideoSDKAudioHelper* pAudioHelper, IVideoSDKVector* userList) { IZoomVideoSDKUser* pUser; int count = userList->GetCount(); for (int i = 0; i < count; i++) { pUser = userList->GetItem(i); // Use isMuted to check whether the user's audio is muted. bool isMuted = pUser->getAudioStatus().isMuted; } } ``` ## Get notified when a user's active audio changes `onUserActiveAudioChanged` fires when an unmuted user's microphone detects sound. Use the `isTalking` field of the user's audio status to drive a talking indicator in your UI. ```cpp void CExampleListener::onUserActiveAudioChanged(IZoomVideoSDKAudioHelper* pAudioHelper, IVideoSDKVector* list) { IZoomVideoSDKUser* pUser; int count = list->GetCount(); for (int i = 0; i < count; i++) { pUser = list->GetItem(i); // Use isTalking to see whether the user is currently talking. if (pUser->getAudioStatus().isTalking) { // The user began talking. } } } ``` ## Get notified when mixed audio raw data is received After you [subscribe to raw audio](/docs/video-sdk/windows/audio/advanced/#subscribe-to-raw-audio-data), `onMixedAudioRawDataReceived` delivers the mixed audio of all users. ```cpp void CExampleListener::onMixedAudioRawDataReceived(AudioRawData* data_) { // data_ contains the mixed PCM audio for all users. } ``` ## Get notified when one-way audio raw data is received `onOneWayAudioRawDataReceived` delivers the raw audio of a single user. ```cpp void CExampleListener::onOneWayAudioRawDataReceived(AudioRawData* data_, IZoomVideoSDKUser* pUser) { // data_ contains the PCM audio for the given user. } ``` ## Get notified when shared audio raw data is received `onSharedAudioRawDataReceived` delivers the raw audio shared along with a screen share. ```cpp void CExampleListener::onSharedAudioRawDataReceived(AudioRawData* data_) { // data_ contains the shared PCM audio. } ```