Могу ли я получить доступ к уровню входного сигнала внутреннего микрофона через Терминал?

Я заинтересован в использовании моего старого MacBook в качестве аудионяни. Мой воображаемый рабочий процесс состоит в том, чтобы установить порог шума для внутреннего микрофона в MacBook, когда ребенок шевелится или скулит, и использовать сообщения, чтобы отправлять текстовые сообщения мне или моей жене, когда порог достигнут.

Когда я смотрю в Системных настройках, я вижу, Input levelчто микрофон улавливает шум, но как я могу получить количественное число в Терминале?

Я видел в Интернете osascript -e "get volume settings", как получить доступ к числовому значению того, насколько чувствительным должен быть установлен микрофон, но я не могу найти способ получить доступ к тому, насколько громкий вход поступает в любой момент времени.

Есть идеи?

Является ли сценарий оболочки действительно тем, что вы хотите сделать?
Я открыт для других предложений...

Ответы (1)

Используя инструменты командной строки, вы можете сделать следующее:

  • Установить пиво
  • Обновление и докторский напиток
  • Установите portaudio, ffmpeg и все зависимости с помощью brew

    brew install portaudio
    brew install ffmpeg
    
  • Установите pip, загрузив get-pip.py (прямая ссылка) и выполнив

    sudo python ~/Downloads/get-pip.py
    
  • Установить шумомер

    sudo pip install soundmeter
    
  • Запустите шумомер. Чтобы получить помощь, используйте ключ -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)
    

Простое выполнение soundmeterвыведет среднеквадратичное значение . После определения порога вы можете запустить действие сценария оболочки (которое может само вызвать сценарий AppleScript) с помощью переключателя -e.

Заходя soundmeter --segment 0.1 --logна просмотр онлайн ТВ (изменение климата и выращивание кофе в Колумбии - конец арабики) покажет что-то вроде:

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

Просто для подтверждения: это уровень входного сигнала микрофона, а не уровень звука ТВ-потока, потому что описанная выше установка выполняется в гостевой виртуальной машине, а ТВ-поток на хостинге Mac — протестирован, но не зарегистрирован с некоторыми хлопками, которые увеличат RMS до значений выше 200!


Чтобы отправить сообщение после инициирующего события, выполните следующие действия: измените <user_name>свое имя пользователя OS X на короткое и <telephone_number>соответствующий номер телефона ниже:

  • Создайте каталог и перейдите в него:

    mkdir ~/.soundmeter
    cd ~/.soundmeter
    
  • Создайте AppleScript:

    nano sendMessage.applescript
    

    с содержанием:

    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
    
  • Создайте сценарий оболочки:

    nano sendMessage.sh
    

    с содержанием:

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

    и измените разрешения:

    chmod 755 sendMessage.sh
    
  • Теперь запустите саундметр с помощью такой команды:

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

    Это должно отправить сообщение на ваш номер телефона (iPhone). Обратите внимание, что вы не можете отправить iMessage самому себе. Отправка на псевдоним может сработать. Другие подобные (Apple) скрипты доступны здесь: Как отправить текст imessage с помощью applescript, только в предоставленном сервисе?

ЛЮБЛЮ ответ! Прекрасная работа! :)