Zoom Mute Indicator

Can you hear me now?

zoom mute Anyone that’s seen the pop up above knows the shame of trying to speak when on mute in a Zoom call.

Someone asks you a question and you’re halfway through your response when the you are muted popup reminds you too late. Then everyone shouts at you “Sorry, I think you’re muted,” while thinking that moron didn’t unmute himself again.

I was sick of being that moron, so I wanted to find something that would provide an always visible indicator that I was muted.

(Not realizing you’re muted is actually a UI/UX problem blog posts have been written on the subject).

There are plenty of apps out there that provide a universal mute for MacOS (see Mutify, Mic Drop, Mic Check). These apps work by muting the mic input at the system level. I gave Mutify a spin, and it seemed to work well and it worked across multiple video conferencing apps.

The big issue I had was none of the apps synced up with the mute status in Zoom. For instance, if I muted myself in Zoom the Mutify app would still show an unmuted status (and again I’d look like an idiot if I tried to respond to a question). I would have to change my behavior and only mute through the Mutify app if I wanted to keep using Mutify.

DIY

At work we almost exclusively use Zoom, so I decided I wanted to build something that would sync with the actual Zoom mute status. The problem is I’m not a developer. I find writing in Markdown for this blog challenging enough. One look at the Zoom SDK documentation, and I knew I wasn’t going to be able to build anything on my own.

But for all my lack of software development skills, I am very good at Googling. After some extensive Google searches I found a couple of useful bits of information.

  1. A Gist from tyzbit with some AppleScript that (ingeniously) checks the menu bar for Meeting > Mute Audio. If it finds that menu item it knows Zoom is currently unmuted.
  2. The AnyBar app. AnyBar is a little circle that sits in your menu bar and can accept commands to change color. It’s basically a status indicator where the user determines what the colors mean. Mercifully, AppleScript can change the color of the AnyBar indicator.

After more Googling of how to write AppleScript, I strung together tyzbit’s AppleScript with AnyBar.

1
2
3
4
5
6
7
8
9
property btnTitle : "Mute audio"

tell application "System Events" to tell application process "zoom.us"
  if exists (menu item btnTitle of menu 1 of menu bar item "Meeting" of menu bar 1) then
    tell application "AnyBar" to set image name to "green"
  else
    tell application "AnyBar" to set image name to "red"
  end if
end tell

Once I gave Script Editor accessibility access, the script checked if the Zoom app was running, checked the name of the menu items and changed AnyBar to green if unmuted and red if muted. Of course, I didn’t want the process to only run once, so I needed to loop it every few seconds (I settled on a three second interval), and then I also had the script start AnyBar in case it wasn’t running. I also added the white status indicator if a meeting wasn’t in progress.

Script Editor also lets you export your Apple Script as an application so I wouldn’t always need the Script Editor window open, and I could add the application to my dock.

Script Editor

In the end this is what it looked like:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
tell application "AnyBar" to activate

property liveTitle : "Mute audio"
property mutedTitle : "Unmute audio"

on idle
  tell application "System Events"
    if (get name of every application process) contains "zoom.us" then
      tell application "System Events" to tell application process "zoom.us"
        if exists (menu item liveTitle of menu 1 of menu bar item "Meeting" of menu bar 1) then
          tell application "AnyBar" to set image name to "green"
        else
          if exists (menu item mutedTitle of menu 1 of menu bar item "Meeting" of menu bar 1) then
            tell application "AnyBar" to set image name to "red"
          else
            tell application "AnyBar" to set image name to "white"
          end if
        end if
      end tell
    else
      tell application "AnyBar" to set image name to "white"
    end if
  end tell
  return 3
end idle

Zoom mute animation

I’m sure there is plenty wrong with my AppleScript, but it’s working for me and my computer hasn’t blown up yet. I’d love to learn some Objective-C and build the script right into an AnyBar fork. I’d also add muting and unmuting Zoom by clicking the AnyBar app.

Realistically, I’m probably too old (or too lazy) to learn to code, so I’m just going to use my hacky solution until someone else makes something better.


See also