Posso acessar o nível de entrada do microfone interno via Terminal?

10

Estou interessado em usar meu antigo MacBook como um monitor de áudio para bebês. Meu fluxo de trabalho imaginado é definir um limite de ruído para o microfone interno no MacBook quando o bebê está mexendo ou choramingando e para usar Mensagens para enviar mensagens de texto para mim ou minha esposa quando o limite for atingido.

Quando estou procurando nas Preferências do Sistema, posso ver Input levelque o microfone está captando ruído, mas como posso obter um número quantificável no Terminal?

Eu já via on-line osascript -e "get volume settings"para acessar um valor numérico de quão sensível o microfone deve ser definido, mas não consigo encontrar uma maneira de acessar o volume de entrada de uma entrada a qualquer momento.

Alguma idéia por aí?

CephBirk
fonte
É um script de shell realmente como você quer ir sobre isso?
Timothy Mueller-Harder
Estou aberto a outras sugestões ...
CephBirk

Respostas:

13

Usando ferramentas de linha de comando, você pode fazer o seguinte:

  • Instalar brew
  • Atualização e preparo médico
  • Instale portaudio, ffmpeg e todas as dependências com brew

    brew install portaudio
    brew install ffmpeg
  • Instale o pip baixando get-pip.py (link direto) e executando

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

    sudo pip install soundmeter
  • Execute o soundmeter. Para obter ajuda, use a opção -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)

Basta executar soundmeterum valor de RMS . Depois de definir um limite, você pode acionar uma ação do shell script (que pode desencadear um script AppleScript) com a opção -e.

Entrando soundmeter --segment 0.1 --logassistindo TV on-line (mudança climática e cafeicultura na Colômbia - o fim do feijão 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

Apenas para confirmar: esse é o nível de entrada do microfone e não o nível de som do fluxo de TV porque a instalação acima é executada em um convidado da VM e o fluxo de TV no Mac de hospedagem - testado, mas não registrado com alguns clapping que aumentará o RMS para valores acima de 200!


Para enviar uma mensagem após um evento de ativação, faça o seguinte - altere <user_name>para o nome de usuário abreviado do OS X e <telephone_number>para um número de telefone apropriado abaixo:

  • Crie um diretório e mude para ele:

    mkdir ~/.soundmeter
    cd ~/.soundmeter
  • Crie um AppleScript:

    nano sendMessage.applescript

    com o conteúdo:

    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
  • Crie um script de shell:

    nano sendMessage.sh

    com o conteúdo:

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

    e mude as permissões:

    chmod 755 sendMessage.sh
  • Agora inicie o soundmeter com um comando como este:

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

    Isso deve enviar uma mensagem para o seu número de telefone (iPhone). Por favor, note que você não pode enviar um iMessage para si mesmo. Enviá-lo para um alias pode funcionar. Outros scripts semelhantes (Apple) estão disponíveis aqui: Como enviar um texto imessage com applescript, apenas no serviço fornecido?

klanomath
fonte
1
AMO a resposta! Bom trabalho! :)
Monomeeth