[英]How to detect microphone usage on OS X?
有沒有辦法檢測 Mac 的麥克風何時在使用中? 類似於 Mikro Snitch 的做法? 這可以在可可中完成嗎?
這不是真正的 Objective-C 或 Cocoa 解決方案,但如果您願意進行子流程調用,請嘗試以下操作:
ioreg -c AppleHDAEngineInput | grep IOAudioEngineState
當音頻輸入處於活動狀態時,您將看到"IOAudioEngineState" = 1
。
此外,嘗試搜索IOAudioEngineNumActiveUserClients
,每個應用程序接收音頻都會增加 1。
我之前的答案不再有效並且相當脆弱(它僅適用於內部設備)。 這是 PyObjC 的快速解決方案,可以相當容易地轉換為 Objective-C 或 Swift。
import AVFoundation
import CoreAudio
import struct
mic_ids = {
mic.connectionID(): mic
for mic in AVFoundation.AVCaptureDevice.devicesWithMediaType_(
AVFoundation.AVMediaTypeAudio
)
}
opa = CoreAudio.AudioObjectPropertyAddress(
CoreAudio.kAudioDevicePropertyDeviceIsRunningSomewhere,
CoreAudio.kAudioObjectPropertyScopeGlobal,
CoreAudio.kAudioObjectPropertyElementMaster
)
for mic_id in mic_ids:
response = CoreAudio.AudioObjectGetPropertyData(mic_id, opa, 0, [], 4, None)
print('Mic', mic_ids[mic_id], 'active:', bool(struct.unpack('I', response[2])[0]))
請注意,此腳本將運行一次,但如果您的應用程序沒有運行循環,如本問題所述,重復調用AudioObjectGetPropertyData
將始終返回相同的結果。
基於@kgutwin 的解決方案,我能夠找到一種方法來獲取 MacOS Big Sur 上麥克風的活動狀態。 實際上只是將-c
與-l
交換。 所以所有的榮譽都給@kgutwin。
ioreg -l |grep IOAudioEngineState
我正在研究檢測相機/麥克風狀態的 go 模塊(使用cgo
),這是我為IsMicrophoneOn()
精心設計的 Objective-C 實現: https : //github.com/antonfisher/go-media-devices-state/blob /main/pkg/microphone/microphone_darwin.mm
我使用kAudioHardwarePropertyDevices
來獲取所有音頻設備(麥克風 + 揚聲器),然后[AVCaptureDevice deviceWithUniqueID:uid]
通過設備 UID 僅過濾掉麥克風。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.