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!

  • Album@lemmy.ca
    link
    fedilink
    arrow-up
    46
    arrow-down
    3
    ·
    edit-2
    3 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.

    • Communist@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      6
      arrow-down
      2
      ·
      3 months ago

      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.

        • Communist@lemmy.mlOP
          link
          fedilink
          English
          arrow-up
          1
          arrow-down
          5
          ·
          3 months ago

          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

      • Nibodhika@lemmy.world
        link
        fedilink
        arrow-up
        8
        ·
        3 months ago

        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.

      • onlinepersona@programming.dev
        link
        fedilink
        English
        arrow-up
        4
        ·
        3 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

  • BCsven@lemmy.ca
    link
    fedilink
    arrow-up
    39
    arrow-down
    1
    ·
    3 months ago

    This smells of “So I work from home, but want to sleep, but if my boss pings me on teams I want an alarm to wake me up”

    • Communist@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      29
      ·
      3 months ago

      Is there anything wrong with that? Hahaha, it’s pretty similar but not quite that

      • Quazatron@lemmy.world
        link
        fedilink
        arrow-up
        11
        arrow-down
        1
        ·
        3 months ago

        Lazy people tend to be creative people, which is good, especially when confronted with boring activities.

        I’d solve it in hardware, maybe an ESP32 dongle with a mic pretending to be a keyboard.

        Seriously though, sounds like you need a more creative or fulfilling job.

      • ReversalHatchery@beehaw.org
        link
        fedilink
        English
        arrow-up
        1
        ·
        3 months ago

        “So I work from home, but want to sleep play games, but if my boss pings me on teams I want an alarm to wake me up”

        Depending on your employer it could be well okay

    • interdimensionalmeme@lemmy.ml
      link
      fedilink
      arrow-up
      2
      ·
      3 months ago

      What about have an LLM autoanswer and only wake me up if the bossman keeps talking and also autofill my timecard so I don’t have to

  • slickJujitsu@lemmy.today
    link
    fedilink
    English
    arrow-up
    15
    ·
    3 months ago

    This Github is for detecting sound playing and sending it to Shazam. Perhaps you can use the features to capture audio and find another example of audio comparison for the other half?

  • person@lemm.ee
    link
    fedilink
    arrow-up
    15
    arrow-down
    1
    ·
    3 months ago

    Now that is a specific request. Let’s see what people come up with 🍿

  • onlinepersona@programming.dev
    link
    fedilink
    English
    arrow-up
    7
    ·
    3 months ago

    I think it would possibly be easier to write an extension. You can inspire yourself from this extension, intercept media playback, possibly hash the media being played, compare the hash to a known DB you create, and call a script in response to a positive detection.

    CC BY-NC-SA 4.0

  • JovialSodium@lemmy.sdf.org
    link
    fedilink
    arrow-up
    6
    ·
    edit-2
    3 months ago

    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@lemmy.mlOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      3 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.

  • tunetardis@lemmy.ca
    link
    fedilink
    arrow-up
    6
    ·
    3 months ago

    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.

  • ace_garp@lemmy.world
    link
    fedilink
    arrow-up
    4
    ·
    3 months ago

    Expect automates things, based on text-input captured from a terminal.

    Not sure if it has been extended/hacked to take sound as an input.

  • qjkxbmwvz@startrek.website
    link
    fedilink
    arrow-up
    3
    ·
    3 months ago

    Can you isolate the call to the sound from the DevTools? And if so, does DevTools allow you to edit the function? Perhaps you could GET/POST something on localhost which could trigger a shell script.

  • bloodfart@lemmy.ml
    link
    fedilink
    arrow-up
    1
    ·
    3 months ago

    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!

  • thevoidzero@lemmy.world
    link
    fedilink
    arrow-up
    1
    ·
    3 months ago

    Someone already talked about the XY problem, so I’ll say this.

    Why sound notification instead of notification content? If your notification program (dunst in my case) have pattern matching or calling scripts based on patterns and the script has access to which app, notification title, contents etc. then it’s just about calling something in your bash script.

    And any time you wanna add that functionality to something else, add one more line with a different pattern or add a condition in your script. Comparing text is lot more reliable than audio.

    Of course your use case could be completely different, so maybe give some examples of use case so people can give you different ways to solve that instead of just the one you’re thinking of.

  • t0mri@lemmy.ml
    link
    fedilink
    arrow-up
    1
    arrow-down
    1
    ·
    edit-2
    3 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