11 votes

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

J'aimerais utiliser mon vieux MacBook comme babyphone audio. Le processus que j'ai imaginé consiste à définir un seuil de bruit pour le microphone interne du MacBook lorsque le bébé remue ou gémit et à utiliser Messages pour envoyer un message à moi ou à ma femme lorsque le seuil est atteint.

Lorsque je regarde dans les préférences du système, je peux voir les Input level car le micro capte du bruit, mais comment obtenir un chiffre quantifiable en Terminal ?

J'ai vu en ligne osascript -e "get volume settings" pour accéder à une valeur numérique permettant de définir la sensibilité du microphone, mais je ne trouve pas de moyen d'accéder au volume de l'entrée à un moment donné.

Des idées ?

19voto

klanomath Points 63400

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

  • Installer brew

  • Mise à jour et brassage des médecins

  • Installez 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 sonomètre

    sudo pip install soundmeter
  • Lancez le sonomètre. 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)

Simplement courir soundmeter produira un Valeur RMS . Après avoir défini un seuil, vous pouvez déclencher une action shell script (qui peut elle-même déclencher un AppleScript script) avec le commutateur -e.

Entrer sur soundmeter --segment 0.1 --log En regardant la télévision en ligne (le changement climatique et la culture du café en Colombie - la fin des grains d'arabica), vous verrez quelque chose du genre :

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 fonctionne dans une VM invitée et le flux TV sur le Mac hôte - testé mais pas enregistré avec des applaudissements qui augmenteront le RMS à des valeurs supérieures à 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> au numéro de téléphone approprié ci-dessous :

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

    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éer un shell script :

    nano sendMessage.sh

    avec le contenu :

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

    et changez les permissions :

    chmod 755 sendMessage.sh
  • Maintenant, démarrez 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 à vous-même. L'envoyer à un alias peut fonctionner. D'autres scripts (Apple)scripts similaires sont disponibles ici : Comment envoyer un texte imessage avec applescript, uniquement dans le service fourni ?

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X