美文网首页
使用腾讯语音聊天SDK没有3D音效问题

使用腾讯语音聊天SDK没有3D音效问题

作者: Ed_Lannister | 来源:发表于2019-09-30 15:11 被阅读0次

问题现象:
    手机和手机间使用腾讯语音聊天SDK demo进行语音会话测试,分别调整两台手机DEMO 应用界面上的X值,对方听到的声音3D音效功能正常
    手机和Alien一体机使用腾讯语音聊天SDK demo进行语音会话测试,分别调整Alien和手机的demo应用界面上的X值,Alien一体机听到的声音没有3D音效,手机中听到的声音有3D音效
    手机和Alien pro一体机使用腾讯语音聊天SDK demo进行语音会话测试,分别调整Alien pro和手机的demo应用界面上的X值,Alien pro一体机听到的声音有3D音效,手机中听到的声音有3D音效

问题分析:
    3D音效实现原理是声音在两个声道上差异虚拟出来的结果,一般的手机SPEAKER都是单声道的,耳机通路是双声道的。单声道Speaker通路无法实现3D音效,因此一般3D 音效sdk算法都会根据当前声音播放通路进行选择是否输出3D效果
    根据sdk中的log打印以及以往处理三方聊天问题经验,应该是不同设备在audio 通路上的不同导致现象不同,Alien一体机的声音播放设备是接到了speaker上,APP层通过API拿到的结果都是speaker audio route,不会是headset 或headphone audio route; Alien pro一体机的声音播放设备外接到了line上,App层通过APP拿到的结果会是headphone audio route,因此从理论上可以解释Alien pro与Alien设备现象
    由于腾讯SDK代码是不开放的,SDK肯定是通过Android的API获取的当前播放通路信息,通过在Android audio API上加log信息进行debug.比如:AudioManager中public boolean isWiredHeadsetOn() 和public int getDevicesForStream(int streamType) 。 经过验证,腾讯SDK是使用 isWiredHeadsetOn() 接口进行audio route 状态判断,经过修改API的返回状态,Alien 设备上腾讯SDK可以进行正常工作,现象和手机相同

解决方案:

    public boolean isWiredHeadsetOn() { 
        if (AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADSET,"") 
                == AudioSystem.DEVICE_STATE_UNAVAILABLE && 
            AudioSystem.getDeviceConnectionState(DEVICE_OUT_WIRED_HEADPHONE,"") 
                == AudioSystem.DEVICE_STATE_UNAVAILABLE) { 
            //return false; 
            //Alien has no speaker 
            return true; 
        } else { 
            return true; 
        } 
    }

相关文章

网友评论

      本文标题:使用腾讯语音聊天SDK没有3D音效问题

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