this post was submitted on 03 Apr 2024
78 points (93.3% liked)

Linux

48180 readers
1187 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS
 

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.

you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 6 points 7 months ago (4 children)

I actually want the sound thing because I think it would be cool for automating a lot of different things easily

It wouldn't be like, optimal in terms of power consumption, but an audio signal in a specific program being recognized by my computer and executing a script is generalizable and useable in many places.

[–] [email protected] 26 points 7 months ago (2 children)

And also prone to misfires and missed detection

[–] [email protected] 2 points 7 months ago

I would be interested in a solution to OP's specific question. I have a friend who will play a particular annoying meme clip over discord. I would like something that can listen for that clip being played, and immediately disconnect him from the voice channel 😁.

Doesn't need to be perfect. Misfires are also acceptable.

[–] [email protected] -4 points 7 months ago (1 children)

Not if it's specified to a single app

My chrome is literally only used for this, as are my other ideas, so, as long as it's half-decent at one specific sound per app it should work...

in theory

[–] [email protected] 4 points 7 months ago (1 children)

Sure if it doesn't play any other sound concurrently

[–] [email protected] 1 points 7 months ago (2 children)
[–] [email protected] 2 points 7 months ago (1 children)

Why not just fire the automation if chrome plays sound, like at all?

[–] [email protected] 3 points 7 months ago

There are two sounds it makes, they just never overlap

[–] [email protected] 1 points 7 months ago (1 children)

Or at least you think so. Are you sure for example that the trigger sound can not play more than once at a time, before the first one has finished?

And then what if the webpage updates the sound it plays?

[–] [email protected] 1 points 7 months ago* (last edited 7 months ago)

I am completely sure that cannot happen, the noise plays once until I deal with it

if it updates I'll just make a new recording, but it has been the same for over 3 years

[–] [email protected] 13 points 7 months ago (2 children)

You're still only explaining the Y problem, not the X one. Want to solve Y? Here you go https://people.csail.mit.edu/hubert/pyaudio/docs/ also prepare to learn a lot about streams and different audio formats, etc. You might have something usable in a few weeks or months depending on how fast you're able to learn those.

And just so we're clear, you mentioned chromium, so I'm 99.9% sure that there are easier solutions if you tell is the actual problem you're trying to solve. There's a reason no one is providing you with a simple script that does this, i.e. no one has ever needed this, and whenever you're in a situation where no one has ever needed something before you might be a visionary or you might be missing something that's obvious for everyone that came before and had the same problem you did.

[–] [email protected] 2 points 7 months ago* (last edited 7 months ago) (1 children)

here you go, if you have a better idea, pitch it:

  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.

but so far my solution is to setup dejavu to listen to a sink i've named work and then set chrome to play on that sink, and that sink will be setup to forward to my default audio device

https://github.com/worldveil/dejavu

[–] [email protected] 1 points 7 months ago

First thought was a chrome extension that detects if the button is on the screen, that should be easy. But since you don't want that you could check how the site receives the information that you've got a call or an email, it's either a periodic pull from the page, or most likely a websocket message from the server. Regardless you can use something like mitmproxy to intercept the communication and do things with it https://docs.mitmproxy.org/stable/api/mitmproxy/websocket.html this will allow you to analyze specifically what the page is receiving, so if there's information on who's calling or the subject of the email, or whatever it will be captured here in text which is a lot more easy to parse and analyze than audio.

[–] [email protected] 1 points 7 months ago (1 children)

He wants a script to trigger an alarm when he gets a call so he can get away with sleeping

[–] [email protected] 1 points 7 months ago

It's actually much more malicious hahaha. But sometimes it may be used while sleeping.

[–] [email protected] 5 points 7 months ago

Are you on linux? If you're using pipewire (or pulseaudio), you can connect the chromium audio pipe to your audio analyzer, analyze the audio, and execute commands on a match. Here's an example of capturing audio with pipewire. It's in C, but there's also a Rust crate.

Maybe gstreamer could make it easier. Audio analysis will probably be some library that you have to search for.

What you're trying to do is not very straight forward, IMO.

CC BY-NC-SA 4.0

[–] [email protected] 3 points 7 months ago (1 children)

How many audio notifications do you receive? The only ones I get are from the phone.

[–] [email protected] 2 points 7 months ago (1 children)
[–] [email protected] 1 points 7 months ago