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

10

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

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

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

Есть идеи?

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

Ответы:

14

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

  • Установить варку
  • Обновление и доктор варево
  • Установите 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 - протестирован, но не зарегистрирован с некоторым хлопанием, что увеличит среднеквадратичное значение до значений выше 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) скрипты доступны здесь: Как отправить текст сообщения с appleScript, только в предоставленном сервисе?

klanomath
источник
1
ЛЮБЛЮ ответ! Отличная работа! :)
Мономет