# \[Best Practices\] Who is talking?

**URL:** <https://devforum.zoom.us/t/best-practices-who-is-talking/19541>\
**Category:** Electron\
**Created:** [May 29, 2020, 1:11pm UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541 "2020-05-29T13:11:42Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![f.barone](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/f.barone/32/9216_2.png) [@f.barone](https://devforum.zoom.us/u/f.barone)\
**Post date:** [May 29, 2020, 1:11pm UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/1 "2020-05-29T13:11:42Z")

</div>

I need a fast way to identify who have an open or “not open” mic and compare this state with a custom list that change over time.

Immagine doing this scan every 100msec

**What whould you suggest as a best practice to get fast as possible a “mic open” user state ?**

Thanks

## Extra info

Until now i update an array lets say ZoomUserList

```
let zoomparticipantsctrl = remote.app.zoomparticipantsctrl;
    if (zoomparticipantsctrl) { 
        let userList = zoomparticipantsctrl.GetParticipantsList();
        zoomUserList = [];
        userList.forEach(element => {           
            let userObj = zoomparticipantsctrl.GetUserInfoByUserID(element.userid);                         
            zoomUserList.push(userObj);         
        });
    }

```

and update when a user join/left

then i call the `isAudioMuted` function to check if a user is mute and consider the `not mute = talking` (i didn’t find a fast better way to do this)

and also use the audiochange call back to do the check

this method is good for meeting with 50 or less people, but when i have a large meeting with \> 50 people i put under pressure my app!

So, if there is some faster way to identify who is talking, please, any suggest is welcome !

Thanks

---

<div class="post-metadata">

**Author:** ![carson.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/carson.zoom/32/785_2.png) [@carson.zoom](https://devforum.zoom.us/u/carson.zoom)\
**Post date:** [June 3, 2020, 6:16am UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/2 "2020-06-03T06:16:13Z")

</div>

Hi @f.barone,

Thanks for the post. If you would like to get notified and know who is talking, you may implement and listen to the following callback to identify the currently active audio:

```auto
/**
 *@brief Notification of in-meeting active speakers.
 *@param useridArray The array contain userid of the active speakers.
 */
- (void)onUserActiveAudioChanage:(NSArray *)useridArray;

```

Hope this helps. Thanks!

---

<div class="post-metadata">

**Author:** ![f.barone](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/f.barone/32/9216_2.png) [@f.barone](https://devforum.zoom.us/u/f.barone)\
**Post date:** [June 3, 2020, 8:11am UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/3 "2020-06-03T08:11:29Z")

</div>

> [@Solved by Carson\_Chen in post #2](#):
>
> `onUserActiveAudioChanage`

Thanks !  
So the best is listen to the events (y)

PS: is a typo ? “chanage” instead of “change” ?

```
lib/node_add_on/mac/meetingServiceDelegate.mm:165
sdk/mac/ZoomSDK/ZoomSDK.framework/Versions/A/Headers/ZoomSDKMeetingActionController.h:302

onUserActiveAudioChanage

```

---

<div class="post-metadata">

**Author:** ![carson.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/carson.zoom/32/785_2.png) [@carson.zoom](https://devforum.zoom.us/u/carson.zoom)\
**Post date:** [June 4, 2020, 7:35am UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/4 "2020-06-04T07:35:59Z")

</div>

Hi @f.barone,

Yes, the best way so far is to listen to the events. Ah yes, good catch, that is a typo, a cat ran on the keyboard 🙂 I will forward this to the engineering team.

Thanks!

---

<div class="post-metadata">

**Author:** ![f.barone](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/f.barone/32/9216_2.png) [@f.barone](https://devforum.zoom.us/u/f.barone)\
**Post date:** [June 4, 2020, 8:29am UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/5 "2020-06-04T08:29:34Z")

</div>

Ps: another one is : “audioStauts”

![Annotazione 2020-06-04 102414](https://us1.discourse-cdn.com/flex016/uploads/zoomdeveloper/original/2X/9/9bee740ea9423c56ad80b33e6923988dba54b1e1.png)

---

<div class="post-metadata">

**Author:** ![carson.zoom](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/carson.zoom/32/785_2.png) [@carson.zoom](https://devforum.zoom.us/u/carson.zoom)\
**Post date:** [June 5, 2020, 9:27am UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/6 "2020-06-05T09:27:11Z")

</div>

Thanks for pointing that out. Really appreciate it. I will forward this to the engineering team as well.

Thanks!

---

<div class="post-metadata">

**Author:** ![DeveloperBot](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/developerbot/32/12632_2.png) [@DeveloperBot](https://devforum.zoom.us/u/DeveloperBot)\
**Post date:** [August 21, 2020, 9:53pm UTC](https://devforum.zoom.us/t/best-practices-who-is-talking/19541/7 "2020-08-21T21:53:38Z")

</div>

Closed on August 21, 2020, 9:53pm UTC


