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

9

Mi interessa usare il mio vecchio MacBook come monitor per bambini audio. Il mio flusso di lavoro immaginato è quello di impostare una soglia di rumore per il microfono interno nel MacBook quando il bambino è in agitazione o piagnucolare e utilizzare Messaggi per inviare messaggi a me oa mia moglie quando viene raggiunta la soglia.

Quando guardo in Preferenze di Sistema, posso vedere Input level per il microfono che sta rilevando rumore, ma come posso ottenere un numero quantificabile in Terminale?

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

Qualche idea là fuori?

    
posta CephBirk 03.01.2017 - 18:51
fonte

1 risposta

13

Utilizzando gli strumenti della riga di comando puoi fare quanto segue:

  • Installa brew
  • 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 eseguendo

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

    sudo pip install soundmeter
    
  • Esegui soundmeter. Per ottenere aiuto usa 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)
    

L'esecuzione di soundmeter genererà un valore RMS . Dopo aver definito una soglia, puoi attivare un'azione script della shell (che a sua volta può attivare uno script AppleScript) con l'opzione -e.

Inserendo soundmeter --segment 0.1 --log guardando la TV online (il cambiamento climatico e la coltivazione del caffè in Colombia - la fine dei fagioli Arabica) mostrerà qualcosa come:

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

Giusto per confermare: questo è il livello di ingresso del microfono e non il livello sonoro dello streaming TV perché l'installazione di cui sopra viene eseguita in un guest VM e lo streaming TV sul Mac di hosting - testato ma non registrato con alcuni applausi che aumenterà il valore RMS a valori superiori a 200!

Per inviare un messaggio dopo un evento di attivazione, procedi come segue: modifica <user_name> nel nome utente breve di OS X e <telephone_number> in un numero di telefono appropriato di seguito:

  • 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 di 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). Si noti che non è possibile inviare un iMessage a se stessi. L'invio a un alias può funzionare. Altri script (Apple) simili sono disponibili qui: Come inviare un testo di imessage con applescript, solo nel servizio fornito?

risposta data 25.01.2017 - 18:06
fonte

Leggi altre domande sui tag