美文网首页
在 OS X 中监听系统音量改变

在 OS X 中监听系统音量改变

作者: zhongxiaoyue | 来源:发表于2019-06-12 18:04 被阅读0次

iOS中的音频监听

在iOS监听系统音量改变非常简单,只需要监听一个系统的通知就可以了.

NotificationCenter.default.addObserver(self, selector: #selector(ViewController.volumeChange(_:)) , name:Notification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification") , object: nil)

@objc func volumeChange(_ notification:NSNotification) {
    let userInfo = notification.userInfo!
    let volume = userInfo["AVSystemController_AudioVolumeNotificationParameter"] as! Double
}

MacOSX中的音频监听

在macosx中没有对应的系统音量改变通知,只能通过比较底层的方法去监听.
主要分为三步

  • 1.获取选中的音频设备ID.
  • 2.添加该音频设备ID的音量监听方法.
  • 3.移除监听.

一. 获取选中音频设备的ID

/// 返回选中的音频输出设备ID
AudioDeviceID defaultOutputDevice()
{
    AudioDeviceID theAnswer = kAudioObjectUnknown;
    UInt32 theSize = sizeof(AudioDeviceID);
    AudioObjectPropertyAddress theAddress;
    
    theAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
    theAddress.mScope = kAudioObjectPropertyScopeGlobal;
    theAddress.mElement = kAudioObjectPropertyElementMaster;
    
    //first be sure that a default device exists
    if (! AudioObjectHasProperty(kAudioObjectSystemObject, &theAddress) )   {
        NSLog(@"Unable to get default Output audio device");
        return theAnswer;
    }
    //get the property 'default output device'
    OSStatus theError = AudioObjectGetPropertyData(kAudioObjectSystemObject, &theAddress, 0, NULL, &theSize, &theAnswer);
    if (theError != noErr) {
        NSLog(@"Unable to get output audio device");
        return theAnswer;
    }
    return theAnswer;
}

二. 添加监听

/// 添加输出音量监听
+ (void)addAudioOutputVolumeListener {

    // 获取当前音频默认输出设备ID
    AudioDeviceID outputDeviceID = defaultOutputDevice();
    
    if (outputDeviceID == kAudioObjectUnknown) {
        return;
    }
    
    
    AudioObjectPropertyAddress outputVolumePropertyAddress = {
        .mScope = kAudioDevicePropertyScopeOutput,
        .mElement = kAudioObjectPropertyElementMaster,
        .mSelector = kAudioHardwareServiceDeviceProperty_VirtualMasterVolume
    };

    // 添加监听
    AudioObjectAddPropertyListener(outputDeviceID, &outputVolumePropertyAddress, onSystemOutputVolumeChange, (__bridge void*)self);
}

/// 系统输出音量改变回调
OSStatus onSystemOutputVolumeChange(AudioObjectID inObjectID,
                                   UInt32 inNumberAddresses,
                                   const AudioObjectPropertyAddress* inAddresses,
                                   void* inClientData) {
    NSLog(@"Volume Change");
    return noErr;
}

三. 移除监听

/// 移除输出音量监听
+ (void)removeAudioOutputVolumeListener {
    
    // 获取当前音频默认输出设备ID
    AudioDeviceID outputDeviceID = defaultOutputDevice();

    if (outputDeviceID == kAudioObjectUnknown) {
        return;
    }
    
    AudioObjectPropertyAddress outputVolumePropertyAddress = {
        .mScope = kAudioDevicePropertyScopeOutput,
        .mElement = kAudioObjectPropertyElementMaster,
        .mSelector = kAudioHardwareServiceDeviceProperty_VirtualMasterVolume
    };
    
    AudioObjectRemovePropertyListener(outputDeviceID, &outputVolumePropertyAddress, onSystemOutputVolumeChange, (__bridge void * _Nullable)(self));
}

相关文章

  • 在 OS X 中监听系统音量改变

    iOS中的音频监听 在iOS监听系统音量改变非常简单,只需要监听一个系统的通知就可以了. MacOSX中的音频监听...

  • iOS系统音量&屏幕亮度调节

    一,系统音量获取 系统框架 获取系统音量slider 监听系统物理按键调节音量 获取系统当前音量 二,屏幕亮度 很...

  • iOS分屏相机实现

    话不多说首先上效果图 代码 隐藏系统的音量调节窗口 监听系统音量调节事件 根据音量加减来调节相机焦距

  • FFmpeg采集设备(2)

    FFmpeg中OS X设备操作 在FFmpeg中采集OS X系统的输入输出设备,常规方式采用的是OS X的avfo...

  • 配置iOS中React-native环境

    创建步骤 在ReactNative主页中,你可以看以下内容。 环境配置要求 1、OS X:目前只有在OS X中能够...

  • 在 OS X 中设置时区环境变量

    在 Linux 和 OS X 中,为进程设置不同的时区都可以通过修改 TZ 这个环境变量来实现,在 OS X 上使...

  • Mac下用OracleSQLDeveloper连接Windows

    因为在OS X中无法安装Oracle数据库(除了雪豹系统)所以只能用虚拟机安装Oracle来替代。Mac OS X...

  • 安装Homebrew(Mac系统的包管理器)

    在终端中执行此行命令: NOTE:在Max OS X 10.11(El Capitan)版本中,homebrew在...

  • Mac OS X中配置Apache

    Mac OS X中配置Apache 我使用的Mac OS X版本是10.8.2,Mac自带了Apache环境。 启...

  • Mac下安装rar工具

    在Mac OS X系统中默认不支持 RAR 文件的解压缩。下面演示如何在Mac OS X系统中使用 rar 命令行...

网友评论

      本文标题:在 OS X 中监听系统音量改变

      本文链接:https://www.haomeiwen.com/subject/macrfctx.html