Bisakah saya mengakses level input mikrofon internal melalui Terminal?

10

Saya tertarik menggunakan MacBook lama saya sebagai monitor audio bayi. Alur kerja yang saya bayangkan adalah untuk menetapkan ambang kebisingan untuk mikrofon internal di MacBook ketika bayi mengaduk atau merengek dan menggunakan Pesan untuk mengirim pesan teks kepada saya atau istri saya ketika ambang tersebut tercapai.

Ketika saya mencari di System Preferences, saya dapat melihat bahwa Input levelmikrofon sedang mengeluarkan suara, tetapi bagaimana saya bisa mendapatkan nomor yang dapat diukur di Terminal?

Saya telah melihat secara online tentang osascript -e "get volume settings"mengakses nilai numerik untuk seberapa sensitif mikrofon seharusnya diatur, tetapi saya tidak dapat menemukan cara untuk mengakses seberapa keras input yang masuk pada waktu tertentu.

Ada ide di luar sana?

CephBirk
sumber
Apakah skrip shell benar-benar bagaimana Anda ingin melakukannya?
Timothy Mueller-Harder
Saya terbuka untuk saran lain ...
CephBirk

Jawaban:

14

Menggunakan alat baris perintah Anda dapat melakukan hal berikut:

  • Pasang brew
  • Perbarui dan sediakan dokter
  • Instal portaudio, ffmpeg dan semua dependensi dengan minuman

    brew install portaudio
    brew install ffmpeg
    
  • Instal pip dengan mengunduh get-pip.py (tautan langsung) dan jalankan

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

    sudo pip install soundmeter
  • Jalankan soundmeter. Untuk mendapatkan bantuan, gunakan sakelar -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)
    

Cukup menjalankan soundmeterakan menghasilkan nilai RMS . Setelah mendefinisikan ambang batas, Anda dapat memicu aksi skrip shell (yang dapat memicu skrip AppleScript) dengan tombol -e.

Memasuki soundmeter --segment 0.1 --logmenonton TV online (perubahan iklim dan pertanian kopi di Kolombia - akhir biji Arabika) akan menunjukkan sesuatu seperti:

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

Hanya untuk mengonfirmasi: itulah tingkat input mikrofon dan bukan tingkat suara aliran TV karena instalasi di atas berjalan di tamu VM dan aliran TV di hosting Mac - diuji tetapi tidak dicatat dengan beberapa tepukan yang akan meningkatkan RMS ke nilai-nilai di atas 200!


Untuk mengirim pesan setelah peristiwa yang memicu lakukan hal berikut - ubah <user_name>nama pengguna pendek OS X Anda dan <telephone_number>ke nomor telepon yang sesuai di bawah ini:

  • Buat dir dan ubahlah:

    mkdir ~/.soundmeter
    cd ~/.soundmeter
    
  • Buat AppleScript:

    nano sendMessage.applescript

    dengan konten:

    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
    
  • Buat skrip shell:

    nano sendMessage.sh

    dengan konten:

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

    dan ubah izin:

    chmod 755 sendMessage.sh
  • Sekarang mulai soundmeter dengan perintah seperti ini:

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

    Ini akan mengirim pesan ke nomor telepon (iPhone) Anda. Harap dicatat bahwa Anda tidak dapat mengirim iMessage ke diri Anda sendiri. Mengirimnya ke alias mungkin berhasil. Script (Apple) serupa lainnya tersedia di sini: Bagaimana cara mengirim teks imessage dengan applescript, hanya dalam layanan yang disediakan?

klanomath
sumber
1
CINTA jawabannya! Kerja bagus! :)
Monomeeth