Posso accedere al livello di ingresso del microfono interno tramite il terminale?


10

Sono interessato a utilizzare il mio vecchio MacBook come baby monitor audio. Il mio flusso di lavoro immaginato è quello di impostare una soglia di rumore per il microfono interno nel MacBook quando il bambino si muove o si lamenta e di usare Messaggi per mandare messaggi a me o a mia moglie quando viene raggiunta la soglia.

Quando guardo nelle Preferenze di Sistema, vedo Input levelche il microfono sta rilevando rumore, ma come posso ottenere un numero quantificabile nel Terminale?

Ho visto online osascript -e "get volume settings"per accedere a un valore numerico per la sensibilità del microfono da impostare, ma non riesco a trovare un modo per accedere alla potenza di un ingresso che arriva in un dato momento.

Qualche idea là fuori?


Uno script di shell è davvero come vuoi farlo?
Timothy Mueller-Harder,

Sono aperto ad altri suggerimenti ...
CephBirk,

Risposte:


14

Utilizzando gli strumenti da riga di comando è possibile effettuare le seguenti operazioni:

  • Installa birra
  • Aggiornamento e preparazione del medico
  • Installa portaudio, ffmpeg e tutte le dipendenze con brew

    brew install portaudio
    brew install ffmpeg
  • Installa pip scaricando get-pip.py (collegamento diretto) ed eseguendolo

    sudo python ~/Downloads/get-pip.py
  • Installa il soundmeter

    sudo pip install soundmeter
  • Esegui il soundmeter. Per ottenere assistenza, utilizzare l'opzione -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)

La semplice esecuzione soundmetergenererà un valore RMS . Dopo aver definito una soglia è possibile attivare un'azione di script di shell (che può a sua volta attivare uno script AppleScript) con l'opzione -e.

Entrare soundmeter --segment 0.1 --logguardando la TV online (cambiamento climatico e coltivazione del caffè in Colombia - la fine dei chicchi di Arabica) mostrerà qualcosa del tipo:

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

Solo per confermare: questo è il livello di ingresso del microfono e non il livello sonoro del flusso TV perché l'installazione sopra viene eseguita in un guest VM e il flusso TV sul Mac di hosting - testato ma non registrato con qualche applauso che aumenterà l'RMS ai valori sopra 200!


Per inviare un messaggio dopo un evento scatenante, procedi come segue: <user_name>passa al nome utente breve di OS X e <telephone_number>al seguente numero di telefono appropriato:

  • Crea una directory e modificala:

    mkdir ~/.soundmeter
    cd ~/.soundmeter
  • Crea un AppleScript:

    nano sendMessage.applescript

    con il contenuto:

    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
  • Crea uno script shell:

    nano sendMessage.sh

    con il contenuto:

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

    e modifica le autorizzazioni:

    chmod 755 sendMessage.sh
  • Ora avvia soundmeter con un comando come questo:

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

    Questo dovrebbe inviare un messaggio al tuo numero di telefono (iPhone). Tieni presente che non puoi inviare un iMessage a te stesso. L'invio a un alias potrebbe funzionare. Altri script simili (Apple) sono disponibili qui: Come inviare un testo di imessage con applecript, solo nel servizio fornito?


1
ADORO la risposta! Ottimo lavoro! :)
Monomeeth
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.