Czy mogę uzyskać dostęp do poziomu wejściowego mikrofonu wewnętrznego przez terminal?

10

Chciałbym używać mojego starego MacBooka jako elektronicznej nianie. Wyobrażam sobie, że praca polega na ustawieniu progu hałasu dla wewnętrznego mikrofonu w MacBooku, gdy dziecko się porusza lub narzeka, oraz na użyciu Wiadomości, aby wysłać SMS-a do mnie lub mojej żony, gdy próg zostanie osiągnięty.

Kiedy patrzę w Preferencjach systemowych, widzę, że Input levelmikrofon odbiera szum, ale jak mogę uzyskać policzalną liczbę w terminalu?

Widziałem online, osascript -e "get volume settings"jak uzyskać dostęp do wartości liczbowej określającej czułość mikrofonu, ale nie mogę znaleźć sposobu, aby uzyskać dostęp do tego, jak głośne jest wejście w danym momencie.

Jakieś pomysły?

CephBirk
źródło
Czy naprawdę jest to skrypt powłoki?
Timothy Mueller-Harder
Jestem otwarty na inne sugestie ...
CephBirk

Odpowiedzi:

14

Za pomocą narzędzi wiersza poleceń możesz wykonać następujące czynności:

  • Zainstaluj napar
  • Aktualizacja i napar doktorski
  • Zainstaluj portaudio, ffmpeg i wszystkie zależności za pomocą brew

    brew install portaudio
    brew install ffmpeg
  • Zainstaluj pip, pobierając plik get-pip.py (bezpośredni link) i uruchamiając

    sudo python ~/Downloads/get-pip.py
  • Zainstaluj miernik dźwięku

    sudo pip install soundmeter
  • Uruchom miernik dźwięku. Aby uzyskać pomoc, użyj przełącznika -h:

    soundmeter -h
    optional arguments:
      -h, --help            show this help message and exit
      -c, --collect         collect RMS values to determine thresholds
      -s SECONDS, --seconds SECONDS
                            time in seconds to run the meter (default forever)
      -a {stop,exec-stop,exec}, --action {stop,exec-stop,exec}
                            triggered action
      -t [+|-]THRESHOLD [NUM ...], --trigger [+|-]THRESHOLD [NUM ...]
                            trigger condition (threshold RMS and number of times)
      -e SCRIPT, --exec SCRIPT
                            shell script to execute upon trigger
      -d, --daemonize       run the meter in the background
      --log [LOGFILE]       log the meter (default to ~/.soundmeter/log)
      -v, --verbose         verbose mode
      --segment SECONDS     audio segment length recorded in seconds (defaults to
                            0.5)

Samo uruchomienie soundmeterspowoduje wyświetlenie wartości RMS . Po zdefiniowaniu progu można wywołać akcję skryptu powłoki (która sama może wywołać skrypt AppleScript) za pomocą przełącznika -e.

Wejście do soundmeter --segment 0.1 --logoglądania telewizji internetowej (zmiany klimatu i uprawa kawy w Kolumbii - koniec ziaren Arabiki) pokaże coś takiego:

2017-01-25 18:16:02,289 24
2017-01-25 18:16:02,665 24
2017-01-25 18:16:03,037 31
2017-01-25 18:16:03,399 3
2017-01-25 18:16:03,769 15
2017-01-25 18:16:04,142 11
2017-01-25 18:16:04,524 9
2017-01-25 18:16:04,891 7
2017-01-25 18:16:05,257 7
2017-01-25 18:16:05,632 0
2017-01-25 18:16:06,001 7
2017-01-25 18:16:06,384 0
2017-01-25 18:16:06,745 2
2017-01-25 18:16:07,113 10
2017-01-25 18:16:07,491 14
2017-01-25 18:16:07,860 6
2017-01-25 18:16:08,223 0
2017-01-25 18:16:08,609 13
2017-01-25 18:16:08,973 16
2017-01-25 18:16:09,347 7
2017-01-25 18:16:09,720 26
2017-01-25 18:16:10,091 1
2017-01-25 18:16:10,464 38  an Arabica bean died here
2017-01-25 18:16:10,835 13
2017-01-25 18:16:11,204 Stopped

Tylko w celu potwierdzenia: to poziom wejściowy mikrofonu, a nie poziom dźwięku strumienia telewizyjnego, ponieważ powyższa instalacja działa na gościu VM, a strumień telewizyjny na hostującym komputerze Mac - przetestowany, ale nie zalogowany z pewnym klaskaniem, co zwiększy RMS do wartości powyżej 200!


Aby wysłać wiadomość po zdarzeniu wyzwalającym, wykonaj następujące czynności - zmień <user_name>krótką nazwę użytkownika OS X i <telephone_number>odpowiedni numer telefonu poniżej:

  • Utwórz katalog i zmień na niego:

    mkdir ~/.soundmeter
    cd ~/.soundmeter
  • Utwórz AppleScript:

    nano sendMessage.applescript

    z treścią:

    on run {targetBuddyPhone, targetMessage}
        tell application "Messages"
            set targetService to 1st service whose service type = iMessage
            set targetBuddy to buddy targetBuddyPhone of targetService
            send targetMessage to targetBuddy
        end tell
    end run
  • Utwórz skrypt powłoki:

    nano sendMessage.sh

    z treścią:

    #!/bin/bash
    
    osascript /Users/<user_name>/.soundmeter/sendMessage.applescript <telephone_number> "Another Arabica bean died"

    i zmień uprawnienia:

    chmod 755 sendMessage.sh
  • Teraz uruchom miernik dźwięku za pomocą następującego polecenia:

    soundmeter -t +38 -a exec -e /Users/<user_name>/.soundmeter/sendMessage.sh

    To powinno wysłać wiadomość na Twój numer telefonu (iPhone). Pamiętaj, że nie możesz wysłać iMessage do siebie. Wysłanie go do aliasu może działać. Inne podobne skrypty (Apple) są dostępne tutaj: Jak wysłać tekst wiadomości za pomocą AppleScript, tylko w dostarczonej usłudze?

klanomath
źródło
1
UWIELBIAM odpowiedź! Dobra robota! :)
Monomeeth