I have a dumb work related chrome thing, i’d like to make it so that when a certain notification sound plays in chromium, my computer does a few things automatically for me

Does anyone know a good way to make this happen?

I imagine it’d have to be setup like:

when chrome starts playing audio && check if that audio matches soundfile.ogg && myscript.sh, but I don’t know any good cli utilities that could get something like that done, and if there are any better ideas!

edit: to avoid X/Y issues i’ve summarized the problem in full here:

  1. I have a work program, this notifies me if I get a call or email, the work program then presents an accept/decline page, and does not proceed until I either accept, decline, or it times out.
  2. I want it to do two different things depending on if it’s a call or email
  3. It provides no notification other than the sound and an “accept” button on the page
  4. I have a chrome window open that does nothing but this, and I never use chrome for anything else
  5. I want to automatically do various things when I receive either this call or email
  6. I want it to be broadly applicable rather than a script designed for the specific website giving me the notification (so not a chrome extension). This prevents me from having to update any code in the event that the backend changes dramatically, and even if the notification sound changes, i’d just record a new sound as the activation noise.
  7. The noise is always the same, and hasn’t changed for many years, and there is a distinct noise between calls and emails
  8. They never overlap, they never play multiple times at the same time, and they never make any noises other than those two. The noises are distinct.

These factors cause me to want to run a script once the noise is recognized, only if the noise is playing in a particular app. I’m using pipewire/hyprland on arch.

My current plan for isolating the noise is to do the following:

pactl load-module module-combine-sink sink_name=‘Work’ slaves=‘easyeffects_sink’

and then set chrome exclusively to play audio on work.

Then set a script to check the sink work for audio that matches what I want. That should be simpler than the other methods i’ve seen to isolate the noise.

  •  Album   ( @Album@lemmy.ca ) 
    link
    fedilink
    48
    edit-2
    6 months ago

    https://xyproblem.info/

    Don’t give people your solution and ask them how to do it. Start with your problem out of the gate.

    Instead of checking for audio maybe you can write a usescript to run actions based on what’s happening on the website. Dunno tho cuz Im making assumptions at what the problem is.

  • I have some vague recollection of a hacker convention from the 90s where people were challenged to come up with wireless networking in a one night coding marathon. (This was long before wifi.) So some dude used speech synthesis to get a machine to say “one zero one one zero…” and another to assemble the binary data into packets using speech recognition. It was hilarious, and the dev had to keep telling people to shut up and stop laughing so he could complete the demo.

    But anyways… what I’m trying to suggest here is you might have the best luck if your notification sounds contain spoken commands and you use speech recognition to trigger scripts? That tech is pretty mature at this point.

  • Maybe you can do something with the tampermonkey extension to catch when that audio is triggered and have it do an api call that your script catches?

    I don’t know if that’ll actually work, I know of the extension but have never it used nor am I skilled with Javascript but it seems feasible.

    •  Communist   ( @Communist@lemmy.ml ) OP
      link
      fedilink
      English
      46 months ago

      That sounds like a somewhat appealing solution, however, i’d like this to be more broadly applicable, i’d like it if even if it wasn’t chrome, and was some other application making a particular noise, I could easily execute a script whenever that particular noise is played, allowing me to automate a bunch of things rather than just one specific weird thing.

  • My assumption is that you don’t care if your notification gets spoofed, ex. Someone rings a little bell and the script deletes all cookies from porn websites as if the little bell notification played.

    So I think the hardest and best way to do this is to have the script run on a separate device than the sound plays on.

    First record the sound you want to trigger with. Use the script executing device with the microphone and interface you’ll be using in production set up in the location of production to make it easier on yourself.

    Now reduce the bitrate of the target sound a lot. No, more than that, keep going, a little more, that’s perfect.

    Now write something that will capture the last target_sound_length seconds of audio and compare it with the bitcrushed version. Depending on your device, there may be a buffer object in the adc you can interface with, although if it’s running a normal operating system you won’t be able to just get to it without going through the os first.

    If you can go through the chrome notificationing machine, figure out the hook used to trigger the notification you want to respond to and intercept and perform the script. No nyquist needed!

  •  enix   ( @enix@reddthat.com ) 
    link
    fedilink
    English
    2
    edit-2
    6 months ago

    I think sox is what you want

    I went ahead and asked a free AI how to use sox and played audio to trigger a script. Probably won’t be 100% accurate but maybe send you down the right path. Good luck.

    1. Install ‘sox’ if you haven’t already. You can use the package manager of your Linux distribution to install it.

    2. Open a terminal and use the ‘rec’ command from ‘sox’ to continuously listen to the audio input:

      sox -d -t .wav - silence 1 0.1 3% 1 1.0 3%
      

      This command will listen for audio and create a .wav file when it detects sound.

    3. Write a script that will be triggered when a sound is detected. For example, you can create a script called “myscript.sh” with the following content:

      #!/bin/bash
      echo "Sound detected! Running my script."
      # Add your desired actions here
      
    4. Make the script executable by running the following command in the terminal:

      chmod +x myscript.sh
      
    5. Use the ‘rec’ command along with the ‘play’ command from ‘sox’ to continuously listen for sound and execute your script when sound is detected:

      sox -d -t .wav - silence 1 0.1 3% 1 1.0 3% | while read -r; do ./myscript.sh; done
      

      This command will continuously listen for sound and execute your script each time sound is detected.

    Remember to customize the script “myscript.sh” with your desired actions.

  •  t0mri   ( @t0mri@lemmy.ml ) 
    link
    fedilink
    1
    edit-2
    6 months ago

    I dunno exactly but, for shell script, playerctl can detect the audio output ig.

    There might be some audio library. May be you can write a daemon or something to watch for events. That way you can you use it on anywhere not just on chrome.

    Can you add more specifications, coz id like to help

  • Sometimes the easiest solution is multiple solutions

    Maybe just write something to hook into the notification in Chrome, there’s probably a way to get that working within an electron app too if the desktop app (teams?) is electron

    •  Communist   ( @Communist@lemmy.ml ) OP
      link
      fedilink
      English
      1
      edit-2
      6 months ago

      That won’t work if the backend ever changes, and will be locked into a single program

      https://github.com/JorenSix/Olaf I’ve decided to use this, i’ll probably have a solution this week, i have to actually record the sounds my next workday, then i’ll test it. Seems much easier to do than making a chrome extension, honestly.