¿Puedo acceder al nivel de entrada del micrófono interno a través del terminal?

7

Estoy interesado en usar mi viejo MacBook como monitor de audio para bebés. Mi flujo de trabajo imaginado es establecer un umbral de ruido para el micrófono interno en la MacBook cuando el bebé se está revolviendo o lloriqueando y usar los Mensajes para enviarme un mensaje de texto a mi esposa o yo cuando se alcance el umbral.

Cuando estoy buscando en Preferencias del sistema, puedo ver que Input level para el micrófono está captando ruido, pero ¿cómo puedo obtener un número cuantificable en la Terminal?

He visto en línea acerca de osascript -e "get volume settings" para acceder a un valor numérico de la sensibilidad del micrófono, pero no puedo encontrar la manera de acceder a la entrada de un volumen en un momento dado.

¿Alguna idea por ahí?

    
pregunta CephBirk 03.01.2017 - 18:51

1 respuesta

12

Usando herramientas de línea de comandos, puedes hacer lo siguiente:

  • Install brew
  • Actualización y elaboración del doctor
  • Instale portaudio, ffmpeg y todas las dependencias con brew

    brew install portaudio
    brew install ffmpeg
    
  • Instale pip descargando get-pip.py (enlace directo) y ejecutando

    sudo python ~/Downloads/get-pip.py
    
  • Instale medidor de sonido

    sudo pip install soundmeter
    
  • Ejecutar el medidor de sonido. Para obtener ayuda use el interruptor -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)
    

Simplemente ejecutando soundmeter generará un valor RMS . Después de definir un umbral, puede activar una acción de script de shell (que a su vez puede activar un script de AppleScript) con el interruptor -e.

Ingresar soundmeter --segment 0.1 --log viendo televisión en línea (cambio climático y cultivo de café en Colombia - el final de los granos de arábica) mostrará algo como:

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 para confirmar: ese es el nivel de entrada del micrófono y no el nivel de sonido de la transmisión de TV porque la instalación anterior se ejecuta en una máquina virtual invitada y la transmisión de TV en el Mac de alojamiento - probado pero no registrado con algunos aplausos que ¡aumentará el RMS a valores por encima de 200!

Para enviar un mensaje después de un evento desencadenante, haga lo siguiente: cambie <user_name> a su nombre de usuario corto de OS X y <telephone_number> a un número de teléfono apropiado a continuación:

  • Cree un directorio y cámbielo:

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

    nano sendMessage.applescript
    

    con el contenido:

    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
    
  • Crear un script de shell:

    nano sendMessage.sh
    

    con el contenido:

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

    y cambia los permisos:

    chmod 755 sendMessage.sh
    
  • Ahora inicie el medidor de sonido con un comando como este:

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

    Esto debería enviar un mensaje a su número de teléfono (iPhone). Ten en cuenta que no puedes enviarte un iMessage. Enviarlo a un alias puede funcionar. Otros scripts similares (de Apple) están disponibles aquí: ¿Cómo enviar un texto de imagen con applecript, solo en el servicio proporcionado?

respondido por el klanomath 25.01.2017 - 18:06

Lea otras preguntas en las etiquetas