首页 > 其他分享 >【问题】打开收音机,选择听筒模式,连接蓝牙耳机,播放录音文件,调节音量,声音没有变化

【问题】打开收音机,选择听筒模式,连接蓝牙耳机,播放录音文件,调节音量,声音没有变化

时间:2024-09-25 20:48:20浏览次数:1  
标签:耳机 媒体 调节 蓝牙 听筒 听感 音量

1、通过起流、停流,不确定stream应该是0,还是3,判断不出来是哪部分日志。

AudioFlinger: pid(30768)

AudioFlinger: pid(3375)

可以查一下,这两个pid都是什么应用在播,:com.hihonor.soundrecorder就是收音机在播放。

AS.AudioService: Voice call active pkgName:com.hihonor.soundrecorder   2、然后根据流类型 3或者0 把这里的stream改一下再搜 InputEvent: 25|InputEvent: 24|startoutput()|stopoutput()|factor is|adjuststreamvolume|volume_changed_action stream=0|checkandsetvolume volumesource 6|audioservice: setstreamvolume|audioflinger: pid|AudioFlinger: AudioFlinger: setStreamVolume stream=
    行 33782: 09-24 19:42:22.967  3375  3375 I InputEvent: 25-0
    行 33814: 09-24 19:42:22.971  3375  3375 I InputEvent: 25-1
    行 33840: 09-24 19:42:22.973  3687  3687 I AS.AudioService: adjustStreamVolume() stream=0, dir=-1, flags=4113, caller=android
    行 33878: 09-24 19:42:22.975  3687  6987 D AS.AudioService: setStreamVolumeIndexAS(0, 15, 128)
    行 33888: 09-24 19:42:22.976  1883  1993 I APM_AudioPolicyManager: checkAndSetVolume volumeSource 13, index 15, device 0x80, volumeDb 0.000000, output 13 
    行 33915: 09-24 19:42:22.978  3687  3687 I AS.AudioService: adjustStreamVolume() stream=0, dir=0, flags=4112, caller=android
    行 33957: 09-24 19:42:22.981  7175  9070 I vol.VolumeDialogControl: onReceive VOLUME_CHANGED_ACTION stream=0 level=3 oldLevel=4

index 15 --- level 3 : 数值不相等,说明调节的音量和播放的音量不一致

注:如果是通话流 蓝牙耳机 adjuststreamvolume这个的入参必须要是stream = 6,才能调节成功

if(isInCommunication() || mAudioSystem.isStreamActive(AudioManager.STREAM_VOICE_CALL, 0)){
if (mDeviceBroker.isBluetoothScoActive()){
    return AudioSystem.STREAM_BLUETOOTH_SCO;
    }
}
这里会赋值成最大音量 然后没变化,绝对音量 除媒体流外 其他的都是最大发给底层
AudioService.java
void applyDeviceVolume_syncVSS(int device) {
             int index;
             /* <DTS2019010904102 chengzeyuan WX394030 20190109 begin */
             boolean isTurnOff = false;
             String str = null;
             if (mVSSCust != null) {
                 isTurnOff = mVSSCust.isTurnOffAllSound();
             }
             if (isFullyMuted()|| isTurnOff) {
                 index = 0;
                 str = "fully muted";
             } else if (isAbsoluteVolumeDevice(device)
                     || isA2dpAbsoluteVolumeDevice(device)
                     || AudioSystem.isLeAudioDeviceType(device)) {
                 // do not change the volume logic for dynamic abs behavior devices like HDMI
                 if (absVolumeIndexFix() && isAbsoluteVolumeDevice(device)) {
                     index = getAbsoluteVolumeIndex((mIndexMax + 5) / 10);
                 } else {
                     index = getAbsoluteVolumeIndex((getIndex(device) + 5) / 10);
                 }
                 str = "AbsVolSupported " + mAvrcpAbsVolSupported + " index " + index;
             }

3、个别耳机有绝对音量,【蓝牙设备音量与手机同步】,重新打开蓝牙开关或重新连接蓝牙设备后生效

 这两行日志是,音量设置 是否开启的。

4、结论:

那可能是播的是媒体流 要在连接蓝牙前 先选听筒 1 先解释成规格,复现调节不了后让测试把这个开关关了,再关开蓝牙,就能调节成功了,历史一直这样,也没舆情 2 如果测试不接受是规格,那就拉录音机的看看,让他们在连接蓝牙的时候用媒体,或者建sco

https://dts.ipd.hihonor.com/DTSPortal/ticket/DTS2022072031850 5、附加其他相似问题的处理:

绝对音量蓝牙耳机在位,调节媒体音可调节屏幕朗读声音的大小,不会出现声音过小怎么都调不大的情况,但是单独调节无障碍音量条没有作用,会给用户带来疑惑。

该问题为谷歌原生特性,绝对音量蓝牙耳机在位时,耳机音量由媒体流音量等级决定,框架将数据最大发给蓝牙,所有流的音量由媒体音量条也就是耳机音量统一调节。

根因分析:

在蓝牙设置中,绝对音量的描述为“蓝牙设备音量与手机同步”,这个特性是为了解决用户使用过程中一般不会关注耳机音量的问题,具体在代码逻辑中,会将媒体流的音量等级发给蓝牙,蓝牙获取到媒体流的音量等级,按比例做运算,计算得出耳机的音量,框架侧不做音量处理,最大(音量等级15)发给蓝牙,蓝牙通过调节耳机音量的大小控制听感音量的大小。

现在在代码里面,绝对音量蓝牙耳机在位时,所有流类型的音量都不会做处理,最大发给蓝牙,如下:

else if (isAbsoluteVolumeDevice(device)
                     || isA2dpAbsoluteVolumeDevice(device)
                     || AudioSystem.isLeAudioDeviceType(device)) {
                 // do not change the volume logic for dynamic abs behavior devices like HDMI
                 if (absVolumeIndexFix() && isAbsoluteVolumeDevice(device)) {
                     index = getAbsoluteVolumeIndex((mIndexMax + 5) / 10);
                 } else {
                     index = getAbsoluteVolumeIndex((getIndex(device) + 5) / 10);
                 }
                 str = "AbsVolSupported " + mAvrcpAbsVolSupported + " index " + index;
             }
if (!isTv || (isTv && mStreamType == AudioSystem.STREAM_MUSIC)) {
                 setStreamVolumeIndex(index, device);
             }

也就是说,即使设置通知音等级为5,在Java层计算的时候也会赋值为15,发给native层,得出float型的音量值(最大为1)作为参数参与混音等逻辑,以最大数据发给蓝牙,由耳机音量(媒体音量)控制听感音量的大小。所以,在上层把通知音等级调节为7、8、9,也会赋值为15参与运算,表现出来的现象就是“通知音无法单独调节”。

需要说明一点,铃声、闹钟这些是双响场景,走复制流,在native层把扬声器数据复制一份作为发给蓝牙的PCM的数据,所以耳机音量(媒体音量)固定的情况下,调节铃声、闹钟音量实际上调节的是扬声器下的音量,耳机里面的听感音量是会有变化的。

这个地方框架可以做修改,增加流类型限制,只在媒体流的时候赋值为15,其他情况下是多少音量等级就发给native层多少。这个修改影响很大,静态动态都会影响,需要遍历蓝牙在位音量相关的测试场景,尤其需要测试各种设备下调节音量后再去切换设备,音量有没有正常被保存,重启后音量初始化是不是正常的等。

即便做了这个修改,无障碍领域的测试还是不满意效果,无障碍音量15,媒体音音量为1的时候声音还是很小,因为绝对音量的意思是“蓝牙设备音量与手机同步”,此时蓝牙耳机的耳机音量是由媒体流的音量等级决定的。

听感音量 = Audio音量 * 耳机音量。

1 * 0.1 = 0.1,Audio音量的最大值为1。

总结,框架可以做修改,无障碍音量条的音量大小变化会在最终听感音量中体现,但是听感音量的最大值会受到耳机音量也就是绝对音量下媒体音音量等级的限制。

这个事情,市面上所有安卓鸿蒙手机打开绝对音量开关后现象都是一致的,因为这个现象就是特性本身。

竞品对比:

鸿蒙手机与荣耀手机现象一致,绝对音量蓝牙耳机在位,通知音、无障碍音量完全由媒体音控制;

Pixel,小米,oppo手机可单独调节通知音、无障碍音量,但是听感音量受媒体音量(耳机音量)的制约,媒体音量等级决定了其他流听感音量的最大值;

鸿蒙手机绝对音量开关默认关闭,oppo绝对音量开关默认打开且开关在开发者选项里面,荣耀、Pixel、小米手机绝对音量开关默认打开且在蓝牙设置中。

解决方案:

1:问题单挂起,不做修改,保持现有规格,绝对音量蓝牙耳机在位,所有流的音量由媒体流音量条统一控制;

2:修改为只有媒体流走绝对音量,调节其他流的音量会起到影响最终听感音量的作用,保留听感音量的最大值会受媒体音量大小影响的绝对音量特性。  

 

标签:耳机,媒体,调节,蓝牙,听筒,听感,音量
From: https://www.cnblogs.com/mengyaoli/p/18432152

相关文章

  • 聊聊蓝牙配对技术-CTKD OVER BR/EDR
    背景最近一直在调试耳机的BLEAUDIO功能,一次测试中把CTKD(Cross-transportkeyderivation)宏开关给关了,发现手机完全不会去连接耳机的LEAUDIO服务,甚至BLE连接都不会建立。说明手机连接双模蓝牙耳机的机制是:先去配对BR/EDR,然后通过CTKD的方式去建立BLE连接。带着好奇心去一......
  • 基于STM32单片机的厨房天然气蓝牙手机APP检测GSM短信报警系统
    基于STM32单片机的厨房天然气蓝牙手机APP检测GSM短信报警系统0、毕业设计选题原则说明(重点)1、项目简介1.1系统功能1.2演示视频2、部分电路设计2.1STM32单片机核心板电路设计2.2HC05蓝牙无线通信电路设计2.3sim900AGSM短信报警电路2.4、MQ-4天然气检测电路设计2.5、HC-SR505......
  • HarmonyOS开发之BLE蓝牙扫描
    随着物联网技术的发展,短距离通信技术如蓝牙成为了连接各种智能设备的关键。HarmonyOSNEXT作为面向未来的操作系统,不仅支持传统的蓝牙技术,还特别优化了低功耗蓝牙(BLE)的支持,使得开发者能够轻松实现设备间的高效数据交换。本文将通过具体案例介绍如何在HarmonyOSNEXT中实现BLE蓝牙扫......
  • Android连接蓝牙自定义封装SDK(基于Cordova与ionic)
    今天给大家分享一款基于Cordova与ionic框架自定义封装的Android手机连接蓝牙的插件。自己公司遇到的业务需求是,与第三方公司合作,需要在项目现场打印项目物资与物料验收单,后期提供给财务核对报销等。第三方公司提供蓝牙打印机与手持机,我们需要自己结合业务开发相对应的功能。......
  • 如何修改音频的音量增益
    一、前言在开发音频相关的功能(比如说语音通话、播放音乐)时,经常会遇到音量太小的问题,这时候就需要我们对原始数据进行处理。本文将介绍如何通过修改原始音频数据来增加增益,本文包含如下内容:1.音频数据在软件上的形态2.音频增益计算公式3.修改音频增益的代码实现二、音频......
  • Android 11.0 蓝牙音乐获取歌手、歌曲等信息功能实现
    1.前言在11.0的系统rom定制化开发中,在一些功能性开发中,可能会遇到一些蓝牙音乐的项目,所以会要求在手机端获取蓝牙音乐的歌手歌曲的信息功能,这就需要了解Bluetooth的音乐播放功能,然后实现这些获取歌手信息和歌曲详情的功能2.蓝牙音乐获取歌手、歌曲等信息功能实现的核心类pa......
  • PHY6252 国产低功耗蓝牙5.2 SOC芯片 智能手环/智能家居方案 智能照明
    PHY6252国产低功耗蓝牙5.2SOC芯片智能手环/智能家居方案智能照明应用领域智能穿戴设备智能家居智能照明智能电表医疗健康智能楼宇智慧工业遥控器等SSOP24PHY6252是一款支持BLE5.2功能的系统级芯片(SoC),集成了低功耗的高性能多模射频收发机,搭载32位......
  • 电脑串口和手机蓝牙BLE串口数据包通信调试工具
    1,支持HEX收发2,支持文本收发3,支持自定义按钮发送自定义命令和数据包4,支持自定义解析包内任意位置1~4字节转int并显示5,自定义json举例说明[{"name":"1234命令","type":"button","cmd":"1234","data":"01020304"},{"name":"1......
  • 蓝牙认证一定要加入会员吗?
    蓝牙认证作为无线通信领域的一项重要标准,对于确保设备间的兼容性和互操作性起着至关重要的作用。然而,关于蓝牙认证是否需要加入会员的问题,一直是业界和消费者关注的焦点。本文旨在深入探讨蓝牙认证的相关流程、会员制度及其必要性,以期为读者提供清晰明了的解答。一、蓝牙认证概述蓝......
  • 蓝牙bqb认证需要什么资料 认证周期是多久?
    蓝牙BQB(BluetoothQualificationBody)认证是确保蓝牙设备符合蓝牙技术标准的关键过程。对于希望将蓝牙技术集成到其产品中的制造商来说,了解BQB认证所需的资料和认证周期至关重要。一、BQB认证所需资料1.**公司信息**:-公司名称、地址、联系方式、公司注册证书等基本信息。-公司简......