Puis-je accéder au niveau d'entrée du microphone interne via le terminal?

10

Je souhaite utiliser mon ancien MacBook en tant que babyphone audio. Mon flux de travail imaginé consiste à définir un seuil de bruit pour le microphone interne du MacBook lorsque bébé remue ou gémit et à utiliser Messages pour envoyer un SMS à moi ou à ma femme lorsque le seuil est atteint.

Lorsque je regarde dans les Préférences Système, je peux voir Input levelque le microphone capte du bruit, mais comment puis-je obtenir un nombre quantifiable dans Terminal?

J'ai vu en ligne sur le point osascript -e "get volume settings"d'accéder à une valeur numérique pour la sensibilité du microphone, mais je ne peux pas trouver un moyen d'accéder à la puissance d'une entrée à un moment donné.

Des idées?

CephBirk
la source
Un script shell est-il vraiment la façon dont vous voulez procéder?
Timothy Mueller-Harder
Je suis ouvert à d' autres suggestions ...
CephBirk

Réponses:

14

À l'aide des outils de ligne de commande, vous pouvez effectuer les opérations suivantes:

  • Installer l'infusion
  • Mise à jour et préparation du docteur
  • Installer portaudio, ffmpeg et toutes les dépendances avec brew

    brew install portaudio
    brew install ffmpeg
    
  • Installez pip en téléchargeant get-pip.py (lien direct) et en exécutant

    sudo python ~/Downloads/get-pip.py
  • Installer le sonomètre

    sudo pip install soundmeter
  • Exécutez le sondeur. Pour obtenir de l'aide, utilisez le commutateur -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)
    

Une simple exécution soundmeterproduira une valeur RMS . Après avoir défini un seuil, vous pouvez déclencher une action de script shell (qui peut elle-même déclencher un script AppleScript) avec le commutateur -e.

Entrer en soundmeter --segment 0.1 --logregardant la télévision en ligne (changement climatique et culture du café en Colombie - la fin des grains d'arabica) montrera quelque chose comme:

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

Juste pour confirmer: c'est le niveau d'entrée du microphone et non le niveau sonore du flux TV, car l'installation ci-dessus s'exécute dans un invité VM et le flux TV sur le Mac hôte - testé mais non enregistré avec des applaudissements qui augmenteront le RMS aux valeurs au-dessus de 200!


Pour envoyer un message après un événement déclencheur, procédez comme suit - changez <user_name>votre nom d'utilisateur court OS X et <telephone_number>un numéro de téléphone approprié ci-dessous:

  • Créez un répertoire et changez-le:

    mkdir ~/.soundmeter
    cd ~/.soundmeter
    
  • Créez un AppleScript:

    nano sendMessage.applescript

    avec le contenu:

    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
    
  • Créez un script shell:

    nano sendMessage.sh

    avec le contenu:

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

    et modifiez les autorisations:

    chmod 755 sendMessage.sh
  • Maintenant, lancez soundmeter avec une commande comme celle-ci:

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

    Cela devrait envoyer un message à votre numéro de téléphone (iPhone). Veuillez noter que vous ne pouvez pas vous envoyer un iMessage. L'envoyer à un alias peut fonctionner. D'autres scripts similaires (Apple) sont disponibles ici: Comment envoyer un texte imessage avec applescript, uniquement dans le service fourni?

klanomath
la source
1
AIMEZ la réponse! Bon travail! :)
Monomeeth