I built a proof of concept doing exactly that a few years ago[0]. The codebase is unmaintained and the demo website has been down for a wee while too, but it's basically this idea.
Only issue is that the overhead to establish WebRTC connection is heavy, so it's not exactly lightweight...
Why can humans acquire vast vocabularies, while non-human primates cannot? This study addresses this question using brain-constrained neural networks that realize between-species differences in cortical connectivity.
ABSTRACT: Germany has one of the most ambitious energy transition policies dubbed ‘Die Energiewende’ to replace nuclear- and fossil power with renewables such as wind-, solar- and biopower. The climate gas emissions are reduced by 25% in the study period of 2002 through 2022. By triangulating available information sources, the total nominal expenditures are estimated at EUR 387 bn, and the associated subsidies are some EUR 310 bn giving a total nominal expenditures of EUR 696 bn. Alternatively, Germany could have kept the existing nuclear power in 2002 and possibly invest in new nuclear capacity. The analysis of these two alternatives shows that Germany could have reached its climate gas emission target by achieving a 73% cut in emissions on top of the achievements in 2022 and simultaneously cut the spending in half compared to Energiewende. Thus, Germany should have adopted an energy policy based on keeping and expanding nuclear power.
Pretty good write up - I reached the same conclusion doing something similar a few years back.
For the record, I got even better perfs with shared-memory by avoiding the mutex in `raw_sync::events::BusyEvent` - I used a blocking loop with atomics, and yielded the CPU (`yield_now` in rust) between the iterations of the loop.
Downside is that it becomes a bit less consistent. And it is a _lot_ more complex than a unix domain socket :)
yeah using a DSP for this definitely makes more sense - but I'm lacking experience in the field. Same goes for using a discrete band-pass filter. This project is more of an attempt at "how can I build something in 2 hours that works reliably" !
For reference, it eats ~25% of the available CPU resources on my rpi zero 2w - which draws a maximum of 350mA, so this implementation definitely draws less than 1 watt.
There's an audio file in the repo to simulate an alarm (works for 3 different models bought in Germany, they all sound the same).
You can pass the target frequency, beep-length and audio threshold as parameters in the CLI (you can estimate these params with audacity).
I was in a similar situation, and it turns out that setting up new zigbee devices with zigbee2mqtt and a frontend was more work than just detecting the sound pattern with a few lines of Go ! Plus the fire-alarms are compulsory and already installed and managed by my building...
Thanks :) It's a basic centralised idea - I'm working on a second version of the whitepaper to be more pragmatic with defining the solution, the current one is just conceptual.
0: https://github.com/pldubouilh/live-torrent