mac os监听扬声器、麦克风的音量、静音
一、前言
还是不想写前言的,这边是接着windows下监听系统扬声器、麦克风的音量、静音事件接着写的。话不多说,直接上代码。
值得注意的是,里面使用object C写的。
|版本声明:山河君,未经博主允许,禁止转载
二、实现
以下代码保证可用,各位可以根据需要进行修改
1.接口
void addPlayoutListener();void removePlayoutListener();void addRecodingListener();void removeRecodingListenr();//静态方法,将系统事件通过以下回调回来//麦克风静音事件static OSStatus inputMutePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData);//麦克风音量事件static OSStatus inputVolumePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData);//扬声器静音事件static OSStatus outputMutePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData);//扬声器音量事件static OSStatus outputVolumePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData);
2.实现
void AudioDeviceMac::addPlayoutListener(){SpeakerMute(_bSpeakerMute);SpeakerVolume(_nSpeakerVolume);AudioObjectPropertyAddress volumeaddress = {kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,kAudioDevicePropertyScopeOutput,kAudioObjectPropertyElementMaster};//_outputDeviceID 输出设备idOSStatus relsult = AudioObjectAddPropertyListener(_outputDeviceID, &volumeaddress, &AudioDeviceMac::outputVolumePropertyListenerProc, this);WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 0, "AudioDeviceMac::addPlayoutListener Volume result:%d", relsult);AudioObjectPropertyAddress muteaddress = {kAudioDevicePropertyMute,kAudioDevicePropertyScopeOutput,kAudioObjectPropertyElementMaster};relsult = AudioObjectAddPropertyListener(_outputDeviceID, &muteaddress, &AudioDeviceMac::outputMutePropertyListenerProc, this);WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 0, "AudioDeviceMac::addPlayoutListener mute result:%d", relsult);}void AudioDeviceMac::removePlayoutListener(){AudioObjectPropertyAddress volumeaddress = {kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,kAudioDevicePropertyScopeOutput,kAudioObjectPropertyElementMaster};OSStatus relsult = AudioObjectRemovePropertyListener(_outputDeviceID, &volumeaddress, &AudioDeviceMac::outputVolumePropertyListenerProc, this);WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 0, "AudioDeviceMac::removePlayoutListener Volume result:%d", relsult);AudioObjectPropertyAddress muteaddress = {kAudioDevicePropertyMute,kAudioDevicePropertyScopeOutput,kAudioObjectPropertyElementMaster};relsult = AudioObjectRemovePropertyListener(_outputDeviceID, &muteaddress, &AudioDeviceMac::outputMutePropertyListenerProc, this);WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 0, "AudioDeviceMac::removePlayoutListener mute result:%d", relsult);}void AudioDeviceMac::addRecodingListener(){MicrophoneMute(_bMicMute);MicrophoneVolume(_nMicVolume);AudioObjectPropertyAddress volumeaddress = {kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,kAudioDevicePropertyScopeInput,kAudioObjectPropertyElementMaster};//_inputDeviceID 输入设备idOSStatus relsult = AudioObjectAddPropertyListener(_inputDeviceID, &volumeaddress, &AudioDeviceMac::inputVolumePropertyListenerProc, this);WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 0, "AudioDeviceMac::addRecodingListener Volume result:%d", relsult);}void AudioDeviceMac::removeRecodingListenr(){AudioObjectPropertyAddress volumeaddress = {kAudioHardwareServiceDeviceProperty_VirtualMasterVolume,kAudioDevicePropertyScopeInput,kAudioObjectPropertyElementMaster};OSStatus relsult = AudioObjectRemovePropertyListener(_inputDeviceID, &volumeaddress, &AudioDeviceMac::inputVolumePropertyListenerProc, this);WEBRTC_TRACE(kTraceInfo, kTraceAudioDevice, 0, "AudioDeviceMac::removeRecodingListenr Volume result:%d", relsult);}OSStatus AudioDeviceMac::inputMutePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData){AudioDeviceMac* ptrThis = (AudioDeviceMac*)inClientData;for(UInt32 addressIndex = 0; addressIndex < inNumberAddresses; ++addressIndex) {if (inObjectID != ptrThis->_inputDeviceID) {continue;}AudioObjectPropertyAddress currentAddress = inAddresses[addressIndex];switch(currentAddress.mSelector) {case kAudioDevicePropertyMute:{UInt32 mute;UInt32 propsize = sizeof(UInt32);OSStatus result = AudioObjectGetPropertyData(inObjectID, ¤tAddress,0, nullptr, &propsize,&mute);if(kAudioHardwareNoError != result) {continue;}if(ptrThis->_bMicMute != mute){ptrThis->_bMicMute = mute;printf("mic is mute:%d", mute);}break;}default:break;}}return 0;}OSStatus AudioDeviceMac::inputVolumePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData){AudioDeviceMac* ptrThis = (AudioDeviceMac*)inClientData;for(UInt32 addressIndex = 0; addressIndex < inNumberAddresses; ++addressIndex) {if (inObjectID != ptrThis->_inputDeviceID) {continue;}AudioObjectPropertyAddress currentAddress = inAddresses[addressIndex];switch(currentAddress.mSelector) {case kAudioHardwareServiceDeviceProperty_VirtualMasterVolume:{Float32 volume = 0;UInt32 dataSize = sizeof(volume);OSStatus result = AudioObjectGetPropertyData(inObjectID, ¤tAddress, 0, NULL, &dataSize, &volume);if(kAudioHardwareNoError != result) {continue;}uint32_t uVolumeLast =volume * MAX_CORE_MICROPHONE_VOLUME;if(ptrThis->_nMicVolume != uVolumeLast){ptrThis->_nMicVolume = uVolumeLast;printf("mic volume:%d", uVolumeLast);}break;}default:break;}}return 0;}OSStatus AudioDeviceMac::outputMutePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData){AudioDeviceMac* ptrThis = (AudioDeviceMac*)inClientData;for(UInt32 addressIndex = 0; addressIndex < inNumberAddresses; ++addressIndex) {if (inObjectID != ptrThis->_outputDeviceID) {continue;}AudioObjectPropertyAddress currentAddress = inAddresses[addressIndex];switch(currentAddress.mSelector) {case kAudioDevicePropertyMute:{UInt32 mute;UInt32 propsize = sizeof(UInt32);OSStatus result = AudioObjectGetPropertyData(inObjectID, ¤tAddress,0, nullptr, &propsize,&mute);if(kAudioHardwareNoError != result) {continue;}if(ptrThis->_bSpeakerMute != mute){ptrThis->_bSpeakerMute = mute;printf("speakser is mute:%d", mute);}break;}default:break;}}return 0;}OSStatus AudioDeviceMac::outputVolumePropertyListenerProc( AudioObjectID inObjectID,UInt32 inNumberAddresses,const AudioObjectPropertyAddress inAddresses[],void* inClientData){AudioDeviceMac* ptrThis = (AudioDeviceMac*)inClientData;for(UInt32 addressIndex = 0; addressIndex < inNumberAddresses; ++addressIndex) {if (inObjectID != ptrThis->_outputDeviceID) {continue;}AudioObjectPropertyAddress currentAddress = inAddresses[addressIndex];switch(currentAddress.mSelector) {case kAudioHardwareServiceDeviceProperty_VirtualMasterVolume:{Float32 volume = 0;UInt32 dataSize = sizeof(volume);OSStatus result = AudioObjectGetPropertyData(inObjectID, ¤tAddress, 0, NULL, &dataSize, &volume);if(kAudioHardwareNoError != result) {continue;}uint32_t uVolumeLast =volume * MAX_CORE_SPEAKER_VOLUME;if(ptrThis->_nSpeakerVolume != uVolumeLast){ptrThis->_nSpeakerVolume = uVolumeLast;printf("speakser volume:%d", uVolumeLast);}break;}default:break;}}return 0;}
mac os监听扬声器、麦克风的音量、静音相关推荐
- windows监听扬声器、麦克风静音、音量事件
一.前言 不想写前言的,就是想记录一下平常在做和操作系统相关的测试时用的demo,整理一下发出来,具体使用场景根据需求具体对待. 该博客只是记录了在windows下如何监听系统扬声器和麦克风静音.音量 ...
- mac os之监听触摸板(捏合、旋转、三指)
文章目录 前言 一.创建工程实例 二.监听事件 1.捏合事件 步骤一 步骤二 2.捏合事件,以中心为坐标 步骤一 步骤二 3.监听旋转手势 步骤一 步骤二 4.滑动手势 步骤一 步骤二 步骤三 前言 ...
- win10下实现PyAudio持续监听并录音(麦克风/扬声器)
Pyaudio默认是通过麦克风录音,扬声器播放. 实现在win10下,录制扬声器的声音需要设置默认音频设备(否则要修改pyaudio的代码) pyaudio对象结构如下: def __init__(s ...
- Android 听筒扬声器切换 并且监听音量变化
记录一下. 在activity 监听按键: @Override public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode = ...
- 监听Mac OS X的全局鼠标事件
因为Mac OS X下没有给力的鼠标手势软件,所以昨天突然想自己实现个玩玩,便研究了一番怎么监听全局的鼠标事件. 首先不能错过的是Cocoa Event-Handling Guide这篇文档.它详细介 ...
- 关于监听Android的静音键以及音量按键
最近项目中涉及到物理键以及静音的监听,上来就写了个BrocastReceiver,然后注册,处理.但是在测的时候发现,在不同的手机上的这块的onReceive()回调是有不一样的,以下为总结: 1.类 ...
- 太恐怖!黑客能把你的耳机变成麦克风用来监听
北京时间11月24日消息,据外媒报道,目前,有关智能手机恶意件或黑客用来监视/监听用户的新手段的消息可谓层出不穷.信息黄金时代为黑客获取用户信息,甚至窃取钱财提供了更多手段. 以色列本·古里安大学网络 ...
- jquery控制只监听数字_无源!模拟!颜值高!简单实用!TC Level Pilot监听音量控制器...
Level Pilot是一款立体声无源模拟音量控制器,独立于电脑.声卡之外工作,用于有源监听音箱的音量控制,设计简洁,操作手感流畅.很多监听都不带音量旋钮,只能通过声卡或电脑进行音量控制,在手边放一个 ...
- iOS 设置系统音量和监听系统音量变化
很简单的调用 首先在工程引入MediaPlayer.framework #import <MediaPlayer/MediaPlayer.h> 1. 获取系统音量 // 获取系统音量 MP ...
最新文章
- mysql 设置 0、1 用什么数据类型_MySQL索引的基本使用
- 成为Python大牛必须要掌握的高端语法(附链接代码)
- mysql5.5+版本与mysql5.5之前版本部署主从的一些差异
- Python之黏包的解决
- 2.4g 无线键鼠对码软件_无线路由器的2.4G和5G同时开速度有影响吗?
- Boost:双图bimap与双向地图的测试程序
- git 工程工作目录下的git相关文件解释
- 我计划搞直播了,欢迎来一起聊一聊
- vs2013链接Mysql时出现 (由于找不到libmysql.dll,无法继续执行代码。重新安装程序可能会解决此问题)
- 如何查看vantUI官方组件的.vue文件(抛转篇)
- IE11浏览器:请不要再叫我IE,谢谢
- 事件选择WSAEventSelect
- PHP PDO连接mysql,sqlsrv;得到任意2个日期之间的所有日期;递归创建文件
- 使用JavaVisualVM远程监控JVM虚拟机
- 计算机组成原理基本概念,《计算机组成原理》基本概念.doc
- 小程序开发之全栈开发(一)
- 荣耀30青春版发布 简单说说有哪些亮点
- STM32F429实现USB通过IAP在线升级
- java int Integer
- 高斯过程 (Gaussian Process)