精华内容
下载资源
问答
  • 蓝牙音乐之绝对音量

    千次阅读 2020-10-13 16:55:43
    蓝牙音乐之绝对音量 蓝牙音乐播放中总是避免不了音量调节的操作,生活中最常见的场景就是手机连接蓝牙耳机或音箱播放音乐,通过调节手机上的多媒体音量达到蓝牙音乐音量调节的目的。这些功能是如何具体实现的,使用...

    蓝牙音乐之绝对音量

    在这里插入图片描述

    蓝牙音乐播放中总是避免不了音量调节的操作,生活中最常见的场景就是手机连接蓝牙耳机或音箱播放音乐,通过调节手机上的多媒体音量达到蓝牙音乐音量调节的目的。这些功能是如何具体实现的,使用的技术的什么,你感兴趣吗?本篇文章我们就来一探究竟。

    蓝牙音乐音量调节有如下两种方法:

    1. 音频数据增益
    2. 绝对音量控制

    第一种方法是将手机端调节的多媒体音量大小,转化为音频数据的音量增益来间接达到控制音量,多见于安卓系统的设备上,最终的音量大小为音频数据音量增益和远端设备本身的音量设置共同作用的结果。下图为播放蓝牙音乐时手机上调节音量大小后,远端设备上接收到的音频数据:
    在这里插入图片描述

    从音频数据可以明显看出,手机端调大多媒体音量,则蓝牙设备端接收到的音频数据增益就变大,从而音乐音量变大;反之音乐音量变小。

    第二种方法绝对音量控制音乐声音大小就是本期的重点,通过绝对音量控制可以实现CT和TG两端的音量设置同步改变,多见于IOS系统(默认采用蓝牙绝对音量控制),安卓系统上该功能是默认关闭,需要主动进入开发人员选项中将蓝牙绝对音量开关打开:
    在这里插入图片描述

    蓝牙绝对音量的实现离不开AVRCP协议,详情参考《AVRCP_v1.6.2.pdf》。

    绝对音量:Absolute volume,使CT和TG两端的音量等级相同,允许CT端展示音量等级,该功能主要提供了如下两个命令来处理音量

    1. SetAbsoluteVolume:设置绝对音量,音量变化的一方主动将音量等级设置到对方
    2. RegisterNotification:注册音量变化的通知事件,来观察音量变化,对方音量等级改变后通过监听来改变本端的音量等级
      在这里插入图片描述

    在安卓系统中这套绝对音量控制逻辑的运行完全依赖GT端(手机等中心设备),即手机通过命令SetAbsoluteVolume设置当前的绝对音量值到设备端,并且通过注册通知音量事件监听CT端的音量变化。

    设置绝对音量的时序图如下(注册音量通知事件类似):
    在这里插入图片描述

    如上时序图所示,第二次及之后的SetAbsoluteVolume指令就可以实现手机改变蓝牙设备音量大小的功能,那如何实现蓝牙设备反过来改变手机的音量大小呢?该功能的实现就依赖手机注册的音量通知事件了,当设备端改变音量后通过RegisterNotification response告知手机后,手机就会主动改变自身的音量值。

    正好前段时间有位朋友向我咨询了如下这个问题:
    使用AvrcpControllerService 里面的 PASS_THRU_CMD_ID_VOL_UPPASS_THRU_CMD_ID_VOL_DOWN 通过Pass Through命令发送过去后,并不能实现机器控制手机音量的功能。

    上述方法无效的主要原因在于手机端的蓝牙服务接收到Pass Through命令后能够成功解析出对应的 KeyEvent.KEYCODE_VOLUME_UPKeyEvent.KEYCODE_VOLUME_DOWN,并将指令发送到安卓多媒体服务框架,但是这两个指令值不是media有效的key值,所以手机这边不会执行这两个动作。
    在这里插入图片描述

    因此安卓系统上实现设备端(CT)控制手机(GT)音量的功能可以使用手机向设备控制器注册音量通知的方式来完成。

    感兴趣的小伙伴欢迎私信留言一起讨论,共同学习,一起进步!

    更多互联互通技术,欢迎关注微信公众号:Connectivity
    在这里插入图片描述

    展开全文
  • Android 蓝牙绝对音量

    2021-05-18 14:25:56
    Android 蓝牙绝对音量 概念 开启 Android 蓝牙绝对音量 概念 大概意思就是: 此功能提供了音量处理功能,以允许CT显示音量级滑块或类似功能。 提供了两个命令,允许设置绝音量,并观声音的变化。 ...

    目录

     

     

    Android 蓝牙绝对音量

    概念

    开启


     

    Android 蓝牙绝对音量

    概念

    大概意思就是:

    此功能提供了音量处理功能,以允许CT显示音量级滑块或类似功能。

    提供了两个命令,允许设置绝音量,并观声音的变化。

    SetAbsoluteVolume命令用于设置渲染设备使用的音量,音频接收端将作为此命令的TG。

    RegisterNotification 命令用于CT端监测TG的音量变化,或者实际音量大小

    参考:https://baijiahao.baidu.com/s?id=1680582087403721956&wfr=spider&for=pc

    绝对音量:Absolute volume,使CT和TG两端的音量等级相同,允许CT端展示音量等级,该功能主要提供了如下两个命令来处理音量

    SetAbsoluteVolume:设置绝对音量,音量变化的一方主动将音量等级设置到对方

    RegisterNotification:注册音量变化的通知事件,来观察音量变化,对方音量等级改变后通过监听来改变本端的音量等级

     

    开启

        private void switchVolumeDevice(@NonNull BluetoothDevice device) {
            // Inform the audio manager that the device has changed
            d("switchVolumeDevice: Set Absolute volume support to " + mDeviceMap.get(device));
            mAudioManager.avrcpSupportsAbsoluteVolume(device.getAddress(), mDeviceMap.get(device));
    
            // Get the current system volume and try to get the preference volume
            int savedVolume = getVolume(device, sNewDeviceVolume);
    
            d("switchVolumeDevice: savedVolume=" + savedVolume);
    
            // If absolute volume for the device is supported, set the volume for the device
            if (mDeviceMap.get(device)) {
                int avrcpVolume = systemToAvrcpVolume(savedVolume);
                mVolumeEventLogger.logd(TAG,
                        "switchVolumeDevice: Updating device volume: avrcpVolume=" + avrcpVolume);
                mNativeInterface.sendVolumeChanged(device.getAddress(), avrcpVolume);
            }
        }

     

    展开全文
  • Android蓝牙绝对音量问题

    万次阅读 2019-05-16 11:17:40
    原因是由于上层判断出支持绝对音量设置,会调用绝对音量的设置,有些蓝牙设备设置绝对音量出问题导致的异常。 解决办法设置黑名单让一些设备不支持绝对音量的设置。 /*********************************************...

    问题Android连接蓝牙设备调节音量会出现乱变的问题

    原因是由于上层判断出支持绝对音量设置,会调用绝对音量的设置,有些蓝牙设备设置绝对音量出问题导致的异常。
    解决办法设置黑名单让一些设备不支持绝对音量的设置。
    external/bluetooth/bluedroid/btif/src/btif_rc.c

    /***************************************************************************
    **
    ** Function         set_volume
    **
    ** Description      Send current volume setting to remote side.
    **                  Support limited to SetAbsoluteVolume
    **                  This can be enhanced to support Relative Volume (AVRCP 1.0).
    **                  With RelateVolume, we will send VOLUME_UP/VOLUME_DOWN
    **                  as opposed to absolute volume level
    ** volume: Should be in the range 0-127. bit7 is reseved and cannot be set
    **
    ** Returns          bt_status_t
    **
    ***************************************************************************/
    static bt_status_t set_volume(uint8_t volume)
    {
        BTIF_TRACE_DEBUG1("%s", __FUNCTION__);
        CHECK_RC_CONNECTED
        tAVRC_STS status = BT_STATUS_UNSUPPORTED;
        rc_transaction_t *p_transaction=NULL;
        if(btif_rc_cb.rc_volume==volume)
        {
            status=BT_STATUS_DONE;
            BTIF_TRACE_ERROR2("%s: volume value already set earlier: 0x%02x",__FUNCTION__, volume);
            return status;
        }
    
        if ((btif_rc_cb.rc_features & BTA_AV_FEAT_RCTG) &&
            (btif_rc_cb.rc_features & BTA_AV_FEAT_ADV_CTRL))
        {
            tAVRC_COMMAND avrc_cmd = {0};
            BT_HDR *p_msg = NULL;
    
            BTIF_TRACE_ERROR2("%s: Peer supports absolute volume. newVolume=%d", __FUNCTION__, volume);
    
    

    黑名单设置

    static const UINT8 rc_black_addr_prefix[][3] = {
        {0x0, 0x18, 0x6B}, // LG HBS-730
        {0x0, 0x26, 0x7E}  // VW Passat
    };
    
    static const UINT8 rc_white_addr_prefix[][3] = {
        {0x94, 0xCE, 0x2C}, // Sony SBH50
        {0x30, 0x17, 0xC8}  // Sony wm600
    };
    
    static BOOLEAN dev_blacklisted_for_absolute_volume(BD_ADDR peer_dev)
    {
        int i;
        int whitelist_size = sizeof(rc_white_addr_prefix)/sizeof(rc_white_addr_prefix[0]);
        for (i = 0; i < whitelist_size; i++) {
            if (rc_white_addr_prefix[i][0] == peer_dev[0] &&
                rc_white_addr_prefix[i][1] == peer_dev[1] &&
                rc_white_addr_prefix[i][2] == peer_dev[2]) {
                BTIF_TRACE_DEBUG3("whitelist absolute volume for %02x:%02x:%02x",
                                    peer_dev[0], peer_dev[1], peer_dev[2]);
                return FALSE;
            }
        }
        BTIF_TRACE_WARNING3("blacklist absolute volume for %02x:%02x:%02x",
                            peer_dev[0], peer_dev[1], peer_dev[2]);
        return TRUE;
    } 
    void handle_rc_features()
    {
        btrc_remote_features_t rc_features = BTRC_FEAT_NONE;
        bt_bdaddr_t rc_addr;
        bdcpy(rc_addr.address, btif_rc_cb.rc_addr);
    
        if (dev_blacklisted_for_absolute_volume(btif_rc_cb.rc_addr))
        {
        	//不支持绝对音量设置
            btif_rc_cb.rc_features &= ~BTA_AV_FEAT_ADV_CTRL;
        }
    
        if (btif_rc_cb.rc_features & BTA_AV_FEAT_BROWSE)
        {
            rc_features |= BTRC_FEAT_BROWSE;
        }
        if ( (btif_rc_cb.rc_features & BTA_AV_FEAT_ADV_CTRL) &&
             (btif_rc_cb.rc_features & BTA_AV_FEAT_RCTG))
        { 
            rc_features |= BTRC_FEAT_ABSOLUTE_VOLUME;
        }
        if (btif_rc_cb.rc_features & BTA_AV_FEAT_METADATA)
        { 
            rc_features |= BTRC_FEAT_METADATA;
        }
    ...
    }
    
    

    frameworks/base/media/java/android/media/AudioSerivce.java

            public void applyDeviceVolume(int device) {
                int index;
                if (isMuted()) {
                    index = 0;
                } else if ((device & AudioSystem.DEVICE_OUT_ALL_A2DP) != 0 &&
                           mAvrcpAbsVolSupported) {   //mAvrcpAbsVolSupported 是底层返回是否支持绝对音量设置
                    index = (mIndexMax + 5)/10;
                } else {
                    index = (getIndex(device) + 5)/10;
                }
                AudioSystem.setStreamVolumeIndex(mStreamType, index, device);
            }
    
    
    展开全文
  • Win10系统怎么禁用绝对音量  当我们升级win10系统之后,如果Win10更新破坏了蓝牙音量控制,那么就需要禁用“绝对音量”,绝对音量功能与某些蓝牙设备不兼容,导致无法调节蓝牙设备的音量,那么怎么禁用绝对音量呢...

    Win10系统怎么禁用绝对音量

      当我们升级win10系统之后,如果Win10更新破坏了蓝牙音量控制,那么就需要禁用“绝对音量”,绝对音量功能与某些蓝牙设备不兼容,导致无法调节蓝牙设备的音量,那么怎么禁用绝对音量呢?具体步骤如下。

    Win10禁用绝对音量的方法:

    通过执行以下命令来使用命令提示符启用或禁用绝对音量:

    要禁用绝对音量功能,请执行:

    reg add HKLM\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AVRCP\CT /v DisableAbsoluteVolume /t REG_DWORD /d 1 /f

    要启用绝对音量功能,请执行以下操作:

    reg add HKLM\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AVRCP\CT /v DisableAbsoluteVolume /t REG_DWORD /d 0 /f

    重新启动Windows,以使注册表更改生效。

    注意:必须要重启设备才可以。

     

    展开全文
  • 新换了P30 Pro,连接过几次其他品牌蓝牙耳机,连接AirPods2之后音量不正常,AirPods2返修检测正常。 下面说一下问题处理步骤: 请进入设置>系统>关于手机,然后连续点击版本号7次(如设置锁屏密码,首次进入...
  • 修改bluez-5.37中./profiles/audio/avrcp.c 去掉改支持AVRCP_EVENT_VOLUME_CHANGED 3816 session-&gt;supported_events |= 3817 (1 &lt;&lt; AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED) | ...
  • win10 连接蓝牙耳机默认音量太大的问题

    万次阅读 多人点赞 2019-11-18 20:41:25
    其实这是 win10 1803 之后的绝对音量策略被默认置起了,只要把它关了就行了。我的 win10 版本是 1903 快捷键 win + r 打开 regedit 注册表,定位到:(可以直接复制到地址栏,回车即可) “ 计算机\HKEY_LOCAL_...
  • Android平台音量调节 本文基于Android 8.0讲述Android平台原生音量控制功能。 流的定义 Android中,音量都是分开控制,各种流定义各种流的音量。在Android8.0中,定义了11种流类型。对每种流类型都定义了最大...
  • airpods连接win10,暂停...问题原因:从1803版本开始后,WIN10调整了蓝牙策略,默认启用了蓝牙绝对音量,但却没有提供对应的关闭选项 1、win+r,输入regedit,打开注册表 2、进入路径:计算机\HKEY_LOCAL_MACHINE\S...
  • win10不能调节小爱同学音量

    千次阅读 2020-12-21 12:50:05
    查阅了一些资料发现是因为win10对蓝牙适配器使用了绝对音量设置,关闭就好了。 具体的关闭方法是: 1.win+r,输入regedit,打开注册表 2.计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Bluetooth\Audio\...
  • airpods连接win10音量异常的解决方法

    万次阅读 2019-04-19 09:07:09
    airpods连接win10,暂停...问题原因:从1803版本开始后,WIN10调整了蓝牙策略,默认启用了蓝牙绝对音量,但却没有提供对应的关闭选项 1、win+r,输入regedit,打开注册表 2、进入路径:计算机\HKEY_LOCAL_MACHINE\SY...
  • Android音量调节(一)音量键的处理流程

    千次阅读 多人点赞 2018-12-26 17:23:44
    文章目录1.Android音量键调节音量流程2.Android流定义3.按键的处理流程3.1 adjustSuggestedStreamVolume3.2 adjustStreamVolume 1.Android音量键调节音量流程 整个流程分析是基于Android 8.0来进行讲解的 2.Android...
  • 享受歌曲时,歌曲本身质量很重要,音量同样重要!...通常手机端和耳机端都有属于自己的音量,而绝对音量(Absolute Volume)就指的是蓝牙耳机和手机连接播放音频时双方音量同步,也就是当手机端音...
  • 设置绝对音量,只要大于0即可,一般限制为0-100.如设置为50,则: amixer set -c 0 Master 50 如果报错为找不到Master,则执行如下命令打开可视化界面来修改默认声卡: alsamixer 按F6来选择在使用的声卡,波动鼠标...
  • 全遥控数字音量控制的D类功率放大器资料制作及测试过绝对可用全套设计及说明材料
  • windows连接的蓝牙设备(如小爱同学),无法调节音量原因:从1803版本开始后,Win10调整了蓝牙策略,默认启用了蓝牙绝对音量,但却没有提供对应的关闭选项。1、【Win+R】键,输入regedit,打开注册表2、进入路径:...
  • 安卓音量增强

    2014-04-16 17:51:42
    可增强手机外放铃声,绝对有劲头 给你们用用看
  • 一、在响铃过程中,按音量键或者电源键停止铃声 二、调节音量流程梳理 三、相关文章推荐 一、在响铃过程中,按音量键或者电源键停止铃声 这里的逻辑一般都没有修改的,这里我们只做了解。首先会被...
  • 背景描述作为一个播放器, 除了能播放视频和声音外,音量控制是绝对不能缺少的功能; 本文在音视频播放的基础上,增加对音量的控制;实现流程 调用mixerGetDevCaps获取音频输出设备列表; 打开指定的音频输出设备; ...
  • 声音音量

    千次阅读 2017-02-13 16:34:39
    假如我们把横坐标分成10个档位,分别从音量1到音量10,可能从音量1到音量5(整个调节范围的一半),电阻或者输出电压才改变了10%,而往后只旋转一点点就能改变很大功率,比如从音量5到音量8(也就是50%位置到80%位置...
  • 音乐音量改变器,无毒,无需注册,绝对免费。。。!!请放心使用。。。!!
  • Edifier Easy音量调节

    2008-07-28 10:43:26
    想用win键+UP/DOWN方向键来调节系统音量的大小吗? 这个软件就能够帮您实现, 绝对绿色软件,免安装. 用的好,就请好评哦.
  • 用js实现调节音量滑块的方法发布时间:2020-03-26 14:07:36来源:亿速云阅读:879作者:小新今天小编分享的是用js实现调节音量滑块的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以...
  • 文章目录AndroidN 音量调节简单流程平台:Android NAudio流的定义流类型最大音量最小音量默认音量音频流映射音量按键处理流程1. 按下音量键时触发事件2. 发送调节音量的请求传至AudioService3. 进入AudioService::...
  • 我买了联想F41,音量小!! 联想F41音量增大驱动,绝对好用,超级经典。
  • PCM音量控制

    2018-01-02 21:22:00
    一.... 声音是介质振动在听觉系统中产生的反应。声音总可以被分解为不同频率不同强度正弦...声音的振幅就是音量,频率的高低就是指音调,频率用赫兹(Hz)作单位。人耳只能听到20Hz到20khz范围的声音。 模拟音频(A...
  • 三星R458亮度、音量调节驱动,绝对是你要找的。
  • 三星FN功能键调节亮度和音量的驱动。绝对是你要找的!
  • 鼠标拖动控制音量

    2019-06-09 20:09:41
    如何通过鼠标拖动来控制音量呢?其实很简单,跟拖动图标通过验证是差不多的原理,只不过几句代码的差别而已,首先让我们看一下它的页面布局; 这是一个向上滚动条式的模拟音量键,通过鼠标拖动中间的灰色方块上下...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,724
精华内容 3,089
关键字:

绝对音量