æè¡ã®çºå±ã«äŒŽãã誰ããæ
£ã芪ããã§ããããã¥ãŒããã¢ããã°ããããã©ã³ã¯æŽå²çã«è¡°éããBluetoothã¯ã€ã€ã¬ã¹å¯Ÿå¿è£œåã«åã£ãŠä»£ããããŠããŸãã
çŸä»£ã®ã¹ããŒããã©ã³ã§ã¯ã湿æ°ãã»ããããä¿è·ããããã«ãéåžžã®ã³ãã¯ã¿ã奪ãããŠããŸãã
éçºè
ã¯ãBluetoothãããã³ã«ã®ãã¹ãŠã®æ°ããããŒãžã§ã³ãšã³ãŒããã¯ã®ãã¹ãŠã®æ°ããããŒãžã§ã³ããªãªãŒã¹ãããããéããããé«ãããã匷ãã-åçã®ââé
å»¶ãæžãããå質ãåäžãããŸãã
ãã¹ãŠããšãŠãè¯ãã§ããïŒ èŠãŠã¿ãŸãããã
ã¯ããã«
ãããã³ã«ã®æè¡çãªå®è£
ããéå±ãªä»æ§ã«ã€ããŠã¯æãäžããŸããã 芪æãªã
ValdikSS㯠ããã®èšäºã§ã€ã³ã¹ãã¬ãŒã·ã§ã³ãç§åŠã³ã³ãµã«ã¿ã³ããšããŠã
倧ãã«åœ¹ç«ã£ãŠãããã³ãŒããã¯ã«é¢ããå
æ¬çãªè³æãæºåããŠããŸã-ãããŠããã¹ãŠããã詳现ãã€æè¡çã«æ£ç¢ºã«æç€ºãããŸãã
ç§ã¯å人çãªçµéšã«ã€ããŠãã£ãšäŒãããã§ãã ãŸããå°ãé¢çœãïŒéå±ïŒïŒç·Žç¿ã
1幎ååãaptXã®ã¢ã€ãã¢ã«è奮ããŸããã ã¯ããç§ã¯
ãã®ãããªããããã®ã¬ãã¥ãŒãèªã¿ããããã®æè¡çãªtwistäœæ²æããã¹ãŠä¿¡ããŠããŸããã åäŸãçãŸããŸããããããŠå€ã劻ãšäžç·ã«ããããã©ã³ã§ã·ã§ãŒãèŠãããšæã£ãŠããŸããã
ããã¯äœããããããŸãããïŒ
å質
æ°åãšäºå®ããå§ããŸãããïŒããã«ã¡ã¯ããŠã£ãããã£ã¢ïŒïŒ
SBCã¯å€ãããããã³ãŒããã¯ã§ãããA2DPæšæºã«æºæ ããŠããŸãã ãã®ã³ãŒããã¯ã¯ãFrans de Bont
ïŒF. de BontãMãGroenewegenããã³W. Oomenãã128 kb / sã®é«å質ãªãŒãã£ãªã³ãŒãã£ã³ã°ã·ã¹ãã ãã第98åAESã³ã³ãã³ã·ã§ã³ã1995幎2æ25ã28æ¥ïŒãšäœ¿çšã®
çµæã§ãã ç¹èš±EP-0400755B1ã«èšèŒãããŠããã¢ã«ãŽãªãºã ã ç¹èš±ã®èè
ãBluetoothã¢ããªã±ãŒã·ã§ã³ã§ã®ã¿SBCã®ç¡æäœ¿çšãèš±å¯ããŠããããšã¯æ³šç®ã«å€ããŸããããã®ç¹èš±ã¯2010幎6æ2æ¥ã«å€±å¹ããŸããã A2DPèŠæ Œã¯éåžžã«äžè¬çã§ãããããSBCããµããŒãããŠããªãããããã©ã³ãã¹ããŒã«ãŒãèŠã€ããããšã¯éåžžã«å°é£ã§ãã
ã³ãŒããã¯ã¯ã16ã32ã44.1ã48 kHzã®ãµã³ããªã³ã°åšæ³¢æ°ãš10ã1500 kbit / sã®æµéãæäŸããŸãã ã¯ããããªãã¯æ£ãããšèããŸããã æå€§1500 kbpsã ã³ãŒããã¯ã«ã¯ãããã¬ãŒãã®å¶éã¯ãããŸããã ããããããã«ã€ããŠã¯åŸã§ã
aptXã³ãŒããã¯
㯠ã1988幎ã«ã¯ã€ãŒã³ãºå€§åŠãã«ãã¡ã¹ãã§éçºãããŸãã ã ã¯ããBluetoothãç»å ŽãããŸã§ã«ã¯ãŸã çŽ12幎ãããŸããããã®ãããã³ãŒããã¯ã¯ããã®ãªãŒãã£ãªæ©åšã§äœ¿çšãããŠããŸããã ã¯ã¢ã«ã³ã ã¯çŸåšæš©å©ãä¿æããŠããããã䜿çšã«ã¯ã©ã€ã»ã³ã¹ãšãã€ã€ãªãã£ãå¿
èŠã§ãã 2014å¹Žã®æç¹ã§ãã³ã¹ãã¯ãããæ¬¡ã®ãšããã§ããæå€§10,000ããã€ã¹ã®é¢ä¿è
ã«å¯ŸããŠãªãªãŒã¹ãããåããã€ã¹ã«å¯ŸããŠã6,000ãã«ãš1ãã«ã®1åéãã®æ¯æãã ãã®ãããSnapdragon 835ã845ã821ã820ã810ã805ã801ã800ã650ã615ã410ããããæèŒããå€ãã®ããã€ã¹ã¯éåžžã«å¯èœæ§ãé«ããaptXããµããŒãããŠããŸãããã©ã€ã»ã³ã¹ã賌å
¥ãããŠããªããããããã§ã¢ã¯ãã£ãåãããŸããã ããã«ã€ããŠ-以äžãã
16ãããã®ãããæ·±åºŠãš48 kHzã®ãµã³ããªã³ã°åšæ³¢æ°ã§ãã³ãŒããã¯ã¯384 kbit / sïŒãã¥ã¢ã«ãã£ãã«ïŒãããã¬ãŒããæäŸã§ããŸãã
aptXãå
¬åŒã«ãµããŒããã補åã®ãªã¹ã ã aptXããµããŒãããŠããå€ãã®æªç¥ã®ã·ã¹ãã ãAliexpressã§èŠã€ããããšãã§ããŸãããå®éã«ã¯åãå€ãè¯ãSBCãååšãããšããäºå®ã«åããŠãã ããã
aptX HD-åãã³ãŒããã¯ã§ããããšã³ã³ãŒããããã¡ã€ã«ãç°ãªããã¹ããªãŒã é床ã¯576 kbit / sããµã³ããªã³ã°åšæ³¢æ°ã¯æå€§48 kHzããããæ·±åºŠã¯æå€§24ãããã§ãã ãããaptX Losslessã³ãŒããã¯ãšåŒã¶äººãããŸãããããã¯å®å
šãªãã³ã»ã³ã¹ã§ãããã¹ã¬ã¹ããŒã¿ãäŒéã§ããã¹ããªãŒã ã®äŸ¡å€ãçŸæç¹ã§éæã§ããªãããã§ãã ãã®ã³ãŒããã¯ã®ç¹å¥ãªå©ç¹ã¯ã調æŽå¯èœãªãšã³ã³ãŒãé
å»¶ã§ããã48 kHzã®ãµã³ããªã³ã°åšæ³¢æ°ã§1 msã«ççž®ã§ããŸãã ãŸããã³ãŒããã¯ã¯ããã»ããµã®ããŒãã®èгç¹ããéåžžã«æå©ã§ãããMP3ããã³AASãããæå©ã§ãã
aptX HDãå
¬åŒã«ãµããŒããã補åã®ãªã¹ã ã 圌ã¯ååã«å°ããã§ãã
aptXäœã¬ã€ãã³ã· ïŒãŸãã¯LLïŒã¯ããµãŠã³ãé
å»¶æéã40ããªç§æªæºã«ççž®ã§ããã³ãŒããã¯ã®ç¹å¥ãªããŒãžã§ã³ã§ãã
aptX LLãå
¬åŒã«ãµããŒããã補åã®ãªã¹ã ã

圌女ãããã ãã€ãŠç§ã«èæžãè²·ã£ãã®ã¯ãã®åçã§ããã é
ããïŒ çµå±ã®ãšãããã¢ã¯ã·ã§ã³æ ç»ã§ççºã®é³ããã©ãŒæ ç»ã§ã®ã¢ã³ã¹ã¿ãŒã®å«ã³å£°ããããããŒã«ã®è©Šåã§ã®èгè¡ã®ofé³ãçµãã£ããšãã«èª°ãèãããã§ããïŒ
ããããããã¯æ¬åœã«ããã§ããïŒ
ãããããã
ä»ã®ããŒã±ãã£ã³ã°è³æãšåæ§ã«ãæ°å€ã¯éåžžã«é«ãè©äŸ¡ãããŠããŸãã é
å»¶ã¯ãã·ã¹ãã ã®ãããã¡ãªã³ã°ãšã³ãŒããã¯ã®å®è£
ã«å€§ããäŸåããŸãã ãã®ãããSBCã®é
å»¶ã¯40ããªç§æªæºã§ããå¯èœæ§ãããããã¬ãæŸéã®æšæºïŒ+40ããªç§ã-60ããªç§ïŒãèæ
®ãããšãå®å
šã«èš±å®¹å¯èœã§ãã
èŠçŽãããšïŒ- ã³ãŒããã¯ã¯çã®ãã¹ã¬ã¹å§çž®ãå®çŸã§ããªããããæ¢åã®ã³ãŒããã¯ã¯æç·æè¡ããåªãããã®ã¯ãããŸããã
- æãäžè¬çãªã³ãŒããã¯ã¯SBCã§ãã åœŒã¯æãæè»ãªèšå®ã§ãã ãŸããaptXã以åã«ãªãªãŒã¹ããããšããäºå®ã«ãããããããæããã«SBCãç¡æã§ãããããSBCã®äººæ°ã«åããã®ã¯ãããŸããã
- é³è³ªã¯ãã³ãŒããã¯ã®å®è£
ãããã³äžè¬çãªããããã©ã³/ã¹ããŒã«ãŒã®ããŒããŠã§ã¢æ§èœã«å€§ããäŸåããŸã-ã¹ããŒã«ãŒèªäœã匱ãå Žåãã³ãŒããã¯ã«ãã£ãŠåè³ªãæ¹åããããšã¯ã§ããŸããã ãããã£ãŠãå°æ¥çã«ã¯ãåè³ªãæ¯èŒããŠãåãã¹ããŒã«ãŒ/ããããã©ã³ã§åããœãŒã¹ã®åãã³ã³ãã³ããç°ãªãã³ãŒããã¯ã§åçããããšã«ã€ããŠè©±ããŸãã
å®çšçã§éåžžã«äž»èгçãªçµæ

ãã®æ
å ±ã¯ãå€éšã®ãªã¹ããŒã®æäœãæ¯èŒãããã³èªèŽã«é¢ãã1幎åã®çµéšã«åºã¥ããŠããŸãã
ãã®äœéšã¯ãã³ãŒããã¯ãéžæã§ããSONYãŠã©ãŒã¯ãã³NWZ-A17ãã¬ãŒã€ãŒã§ãã¹ã¬ã¹ãèŽãããšãšãAvantree Priva IIIãä»ãããªãŒãã£ãªåºåãåããããŸããŸãªããã°ã©ã ãèŠèŽããããšã«åºã¥ããŠããŸãã
3ã€ã®ããããã©ã³ããããŸããããŒã³ãã€ã¶ãŒPMX 60ãã³ã¹ãã«ã¿ãããã³ã¹UR-20ã§ãã
Jabra BT3030ïŒSBCïŒããã³Avantree Clipper ProïŒaptXïŒãã¯ã€ã€ã¬ã¹ä¿¡å·ã¬ã·ãŒããŒãšããŠäœ¿çšãããŸããã
Voombox OutdoorïŒSBCïŒã¹ããŒã«ãŒãšAftershokz Trekz TitaniumïŒaptXïŒéªšäŒå°ããããã©ã³ã䜿çšãããŸããã
ãã¹ãŠã®ã€ã³ã©ã€ã¶ãŒãšãšã³ãã³ãµãŒããªãã«ãªããŸãã-ããã¯éèŠã§ãã
åèšïŒ- æç·æ¥ç¶ã§åçããããµãŠã³ãã®å質ã¯åžžã«åªããŠããŸãã ããã¯ééããªãã§ãã
- SBCãšaptXã®éãã¯èãã®ãéåžžã«é£ãããäžéšã®çš®é¡ã®é³æ¥œã®å Žåã®ã¿ã§ãã ããšãã°ããã®èšäºã®èè
ã¯ãã¯ã©ã·ãã¯äœæ²ã®ãã§ããœãã®éããã¯ã£ãããšèããŸãããããã€ãªãªã³ãšäœåšæ³¢ã®æ¥œåšã§ã¯ããã®éãã¯ããŸãæããããŸããã§ããã ãããããšã¬ã¯ããããã¯ãã¥ãŒãžãã¯ãããã¯ãªã©ã®çŸä»£ã®ãžã£ã³ã«ã§ã¯ãéãã¯èãããŸããã å Žåã«ãã£ãŠã¯ãSBCãaptXãããé³ãããäŒéããããã«äž»èгçã«æãããŸããã
- SBCãšaptXéã®é
å»¶ã¯ãåããœãŒã¹ã«æ¥ç¶ããç°ãªãã¬ã·ãŒããŒãç°ãªãè³ã«æ¿å
¥ããå Žåã«ã®ã¿è¡šç€ºãããŸãïŒããšãã°ãå·Šãã£ã³ãã«ã¯SBCãå³ãã£ã³ãã«ã¯aptXã§ãïŒã åçã§é
å»¶ã確èªããããšã¯ã»ãšãã©äžå¯èœã§ãããaptXãåçãªã·ãŒã³ãšã³ã³ãã³ãã察象ãšããŠãããšãã話ã¯ç¥è©±ã§ããããã§ãã
- é©ãã¯ãããªãå®äŸ¡ã§ãæåã§ã¯ãªããVoombox Outdoorã®é³è³ªã«èµ·å ããŠããŸããã ã©ããããããã¯äžã§è¿°ã¹ãSBCã®æåããå®è£
ã§ãã
- 骚äŒå°ã䌎ãããããã©ã³ã§ã®aptXã®å®è£
ã¯å®å
šã«çè§£äžèœã§ã-ãã¯ãããžãŒã¯éåžžã«å
·äœçã§ããããããã¯ãããžãŒèªäœã«ããå質ã®äœäžãé¡èã§ãã ããã€ã¹ã®ãç¯å²ãã®çãç¯å²ã2ã€ã®ããã€ã¹ãšã®ãã¢ãªã³ã°ã®å®è£
ãéåžžã«æªãããšãèãããšãAftershokzã¯éçºãããããŒã±ãã£ã³ã°ã«å€ãæè³ããŠããäŒç€Ÿã§ãããšèšããŸãã
ããããçš®é¡ã®ã¹ãã¯ãã«ã¢ãã©ã€ã¶ãŒãªã©ãæ¥ç¶ããã°ãéãã確èªã§ããã¯ãã ãšäž»åŒµããŠããããã§ã¯ãããŸããã ãããã人éã®è³ãããã«æªãããšã«ãå¹³åçãªäººéã®è³ã¯ã¹ãã¯ãã«ããã€ã¹ã§ã¯ãªããããããããã¹ãŠã®ãã¥ã¢ã³ã¹ãèãããŸããã
ç·Žç¿ïŒä¿®æ£ã§ãããã®ãä¿®æ£ãã
ããŒã1. aptXããªã³ã«ãã
ãã§ã«è¿°ã¹ãããã«ãäžéšã®ããã€ã¹ã§ã¯ãããããç¹èš±åºé¡ãé¿ããããã«ãaptXã®äœ¿çšãç¡å¹ã«ãªã£ãŠããŸãã
ãã®åé¡ã¯ãã©ã€ãã©ãªããã€ã¹ãã¹ãªãããããŠã³ãŒããã¯ãå®è£
ããbuild.propã§ãã®ã³ãŒããã¯ã䜿çšããæ©èœãèšå®ããã ãã§ç°¡åã«è§£æ±ºã§ããŸãã
ã€ã³ã¿ãŒãããã«ã¯ããã®æ§è³ªã®ãœãªã¥ãŒã·ã§ã³ã倿°ãããŸãã Magiskã®ã¢ãžã¥ãŒã«ãšããŠèªèããªããããããã1ã€ã«çµåããèªç±ãåããŸããã ã¯ããç§ã¯ãã®ãããžã§ã¯ããæ¬åœã«å¥œãã§ãã·ã¹ãã ãžã®å€æŽãMagiskã¢ãžã¥ãŒã«ã®åœ¢ã§å®è£
ããããšã¯ãã·ã¹ãã ãå
ã®åœ¢ã§ç°¡åã«ããŒã«ããã¯ã§ããæ©èœãåããããå®å
šã§å®å
šãªãœãªã¥ãŒã·ã§ã³ã ãšæããŸãã
ã¢ãžã¥ãŒã«ã¯
ããããããŠã³ããŒãã§ã
ãŸã ã ã¯ããgithubã«ã€ããŠç¥ã£ãŠããŸãã ãããããã«åºããæéããªãéãã
aptXãå«ãbuild.propã®ãšã³ããªãããã³å¯èœã§ããã°aptX HDã¯ãã¢ãžã¥ãŒã«ã«ãã£ãŠèªåçã«ãšãã¥ã¬ãŒããããŸãã

ããŒã2. SBCãããã¬ãŒããå¢ãã
ãã§ã«å ±åãããŠããããã«ãSBCã³ãŒããã¯ã«ã¯åºæ¬çã«ãããã¬ãŒãã®å¶éã¯ãããŸããã ãã ããã¡ãŒã«ãŒã¯éåžžããã¹ãŠã®ã¿ã€ãã®åä¿¡ããã€ã¹ã§ä¿¡é Œæ§ã®é«ãåäœãä¿é²ããããã«ãã¢ãã©ã«ã§ã¯342 kbit / sãã¹ãã¬ãªã§ã¯345 kbit / sã®å¶éãèšå®ããŠããŸãã
åæã«ã2007幎ãã2015幎ãŸã§ã¢ã¯ãã£ãã ã£ãA2DP v1.2仿§ã§ã¯ããã¹ãŠã®ãã³ãŒãããã€ã¹ããã¢ãã©ã«ã§ã¯æå€§320 kbit / sãã¹ãã¬ãªä¿¡å·ã®å Žåã¯512 kbit / sã®ãããã¬ãŒãã§æ£ããåäœããå¿
èŠããããŸãã
仿§ã®æ°ããããŒãžã§ã³ã§ã¯ããããã¬ãŒãã®å¶éã¯ãŸã£ãããããŸããã 2015幎以éã«ãªãªãŒã¹ãããEDRããµããŒãããææ°ã®ããããã©ã³ã¯ãæå€§730 kbpsã®ãããã¬ãŒãããµããŒãã§ãããšæ³å®ãããŠããŸãã
å®éãããã¯ç¢ºãã«ããã§ã¯ãããŸããã
ValdikSSã宿œã
ãå€§èŠæš¡ãªèª¿æ»ã§ã¯ãã»ãšãã©ãã¹ãŠã®åä¿¡ããã€ã¹ã454 kbit / sã®ãããã¬ãŒããããã³507 kbit / sã®ãããã¬ãŒãã®ããªã倧ããªæ°ã§ç¢ºå®ã«åäœããããšãããããŸããã
ãŸãã ValdikSS㮠調æ»ã§ã¯ãaptXã³ãŒããã¯ã®é³è³ªã«é¢ããäžè¬çãªèãã«åããŠãäžéšã®ãã¡ã€ã«ã§ã¯æšæºãããã¬ãŒãã328 kbpsã®SBCãããæªãçµæãåŸãããå Žåããããé«ãããã¬ãŒãSBCã«åãæ¿ãããšãå€ãã®å Žåã aptXãããããã©ã³ã
ãããã®ããŒã¿ã«
åºã¥ããŠã
ValdikSSã¯Lineage OSããã³Googleã®éçºè
ã«ã³ã¡ã³ããéä¿¡ããŸãããããããŸã§ã®ãšããåå¿ã¯ãããŸããã§ããã
ãããã£ãŠãBluetoothã¹ã¿ãã¯ãæåã§å€æŽããããšããã§ããŸããã
ARMãä»»æã®HEXãšãã£ã¿ãŒïŒWinHEXã䜿çšããŸããïŒãããã³ããã€ã¹ã®bluetooth.default.soãã¡ã€ã«ãéã³ã³ãã€ã«ã§ããIDA Proãå¿
èŠã§ãã éåžžããã¹/ã·ã¹ãã / lib / hwã«ãããŸããããã¹/ã·ã¹ãã / lib64 / hwã«ããããŸãïŒã«ãŒãã¢ã¯ã»ã¹ãå¿
ãå¿
èŠã§ãïŒã
ãã®ãããbluetooth.default.soãã¡ã€ã«ãéããŸã以äžã§èª¬æããæäœãšå€æŽã¯ãå
ã®Androidã¹ã¿ãã¯ïŒbluedroidïŒã«ã®ã¿é©çšãããŸãã IDA Proã§ãNeeded Library 'com.qualcomm.qti.bluetooth_audio@1.0.so'ããªã©ã®è¡ã衚瀺ãããå Žåããã®åœä»€ã¯åœ¹ã«ç«ããªãå¯èœæ§ãé«ãã§ãã

æåã®ã¿ã¹ã¯ã¯ãæšæºæ§æã§ãžã§ã€ã³ãã¹ãã¬ãªããã¥ã¢ã«ãã£ãã«ã«çœ®ãæããããšã§ãã
bta_av_build_src_cfg颿°ã䜿çšããŸã ã
IDAã§ãã®æé ãèŠã€ããã«
ã¯ããããã°ãã°ãCant parse src cap ret =ïŒ
dãã®ç¹æ§ã¡ãã»ãŒãžã®è¡æ€çŽ¢
ã䜿çšã
ãŸã ã


ãã®çµæãéåžžã«è¿
éã«ãã³ãŒãèªäœã®åœ¢ã§é¢æ°èªäœãèŠã€ããŸãã

ç§ãã¡ã®ã¿ã¹ã¯ã¯ããã§ãã¯ã®å
ã®æ§é ã眮ãæããããšã§ã
if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_JOINT) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_JOINT; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO;</code> <code> if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_STEREO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_STEREO; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_DUAL) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_DUAL; else if (src_cap.ch_mode & A2D_SBC_IE_CH_MD_MONO) pref_cap.ch_mode = A2D_SBC_IE_CH_MD_MONO;
ãããè¡ãã«ã¯ããã€ãã®æ¹æ³ããããŸãã
1ã€ç®ã¯ãTST.W R0ãïŒ1ãTST.W R0ãïŒ4ã«çœ®ãæããMOVS R0ãïŒ1ãMOVS R0ãïŒ4ã«ãã§ãã¯é åºã§çœ®ãæããŸãã

ãã€ãã³ãŒãã§ã¯ãããã¯x01ããx04ãžã®çœ®ãæãã§ãã ãã®ãã¿ãŒã³ãèŠã€ããããšãã§ãããã€ãã®ç¹åŸŽçãªã·ãŒã±ã³ã¹ã«æ³šæããããšãéèŠã§ãã è©³çŽ°ã«æ·±ãå
¥ãããšãªããæ¬è³ªçã«ã¯ã·ãŒã±ã³ã¹ã®æ€çŽ¢ã ãšèšããŸã
10 20 8D F8 04 00 9D F8 0D 00 10 F0 01 0F ?? ?? 10 F0 02 0F ?? ?? 10 F0 04 0F ?? ?? 10 F0 08 0F ?? ?? 08 20 ?? ?? 01 20 ?? ?? 02 20 ?? ?? 04 20
ããã³ãã®çœ®ãæã
?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 04 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 04 ?? ?? ?? ?? ?? ?? ?? ?? ??
ãã ãããã®æ¹æ³ã«ã¯æ¬ ç¹ããããŸãã
å€ãã®ã³ã³ãã€ã©ãŒã¯ãæé©åã«å¿ããŠã³ãã³ãã®å®è¡é åºã倿ŽããŸãã ãã®å Žåãç®çã®ãã¿ãŒã³ãèŠã€ããããšãã§ãããæ§é å
ã®ãã§ãã¯ã¡ã«ããºã ãäžè¬ã«ã€ã³ã©ã€ã³ã³ãŒãã«å°å
¥ãããããšããããŸãã ãããã£ãŠã宿°
btif_av_sbc_default_configã倿Žããæ¹ãä¿¡é Œæ§ãé«ããªããŸãã
æå§ãã«-圌女ãèŠã€ããŠãã ããã 圌女ã¯ç§ãã¡ã®æ©èœã®ãŸãã«å§ãŸãã§ãã
void bta_av_build_src_cfg (UINT8 *p_pref_cfg, UINT8 *p_src_cap) { tA2D_SBC_CIE src_cap; tA2D_SBC_CIE pref_cap; UINT8 status = 0; /* initialize it to default SBC configuration */ A2D_BldSbcInfo(AVDT_MEDIA_AUDIO, (tA2D_SBC_CIE *) &btif_av_sbc_default_config, p_pref_cfg); /* now try to build a preferred one */ /* parse configuration */ if ((status = A2D_ParsSbcInfo(&src_cap, p_src_cap, TRUE)) != 0) { APPL_TRACE_DEBUG(" Cant parse src cap ret = %d", status);
ãããŠããã«åœŒå¥³ã¯ïŒ


btif_av_sbc_default_configèªäœãäžé£ã®ãã€ã20 01 10 04 01 35 02ã§ããäžæ¹ãæåã®ãã€ãã¯ãµã³ããªã³ã°åšæ³¢æ°ããšã³ã³ãŒããã10ïŒ48 kHzïŒããã³20ïŒ44 kHzïŒã§ãããããç¹å®ã§ããªãããšãããããŸãã ãããã£ãŠãç§ãã¡ã®ã¿ã¹ã¯ã¯ã·ãŒã±ã³ã¹ã眮ãæããããšã§ã
01 10 04 01 35 02
ã«
04 ?? ?? ?? ?? ??
ããã«ãããåæ§ã®æ¹æ³ã§æ§é ã®ããžãã¯ã倿Žã§ããŸãããåæã«ã³ã³ãã€ã©ãŒãæé©åããŠãåé¡ã¯çºçããŸããã
å Žåã«ãã£ãŠã¯ãããããã©ã³ãŸãã¯ã¹ããŒã«ãŒèªäœãæ¥ç¶ãéå§ããŸãã ãã®å Žåãã¢ãŒãã¯
bta_av_co_audio_init颿°ã«ãã£ãŠæ±ºå®ãããŸãã
ãã®é¢æ°ã¯
ããbta_av_co_audio_initïŒïŒ
dããšããè¡ã§ç¹åŸŽä»ããã ãã³ãŒãã§ç°¡åã«æ€çŽ¢ã§ããŸãã

å¯èœãªæ¥ç¶ã¢ãŒãã®åæã¯ã次ã®ã³ãã³ãã§å®è¡ãããŸãã
switch (index) { case BTIF_SV_AV_AA_SBC_INDEX: /* Set up for SBC codec for SRC*/ *p_codec_type = BTA_AV_CODEC_SBC; /* This should not fail because we are using constants for parameters */ A2D_BldSbcInfo(AVDT_MEDIA_AUDIO, (tA2D_SBC_CIE *) &bta_av_co_sbc_caps, p_codec_info); /* Codec is valid */ return TRUE;
宿°bta_av_co_sbc_capsã®æ§é ã¯æ¬¡ã®ãšããã§ãã
const tA2D_SBC_CIE bta_av_co_sbc_caps = { (A2D_SBC_IE_SAMP_FREQ_44), /* samp_freq */ (A2D_SBC_IE_CH_MD_MONO | A2D_SBC_IE_CH_MD_STEREO | A2D_SBC_IE_CH_MD_JOINT | A2D_SBC_IE_CH_MD_DUAL), /* ch_mode */ (A2D_SBC_IE_BLOCKS_16 | A2D_SBC_IE_BLOCKS_12 | A2D_SBC_IE_BLOCKS_8 | A2D_SBC_IE_BLOCKS_4), /* block_len */ (A2D_SBC_IE_SUBBAND_4 | A2D_SBC_IE_SUBBAND_8), /* num_subbands */ (A2D_SBC_IE_ALLOC_MD_L | A2D_SBC_IE_ALLOC_MD_S), /* alloc_mthd */ BTA_AV_CO_SBC_MAX_BITPOOL, /* max_bitpool */ A2D_SBC_IE_MIN_BITPOOL /* min_bitpool */ };
宿°ã¯ã³ãŒãã§ç°¡åã«èŠã€ãããŸããç§ã®å Žåã¯20 0F F0 0C 03 35 02ã§ãã

ãã€ã
0Fã«æ³šæããŠãã ãã-æå¹ãªã¢ãŒãã®ãããããšæ¥ç¶ããæ©èœãæäŸããŸãã
x0F = A2D_SBC_IE_CH_MD_MONO | A2D_SBC_IE_CH_MD_STEREO | A2D_SBC_IE_CH_MD_JOINT | A2D_SBC_IE_CH_MD_DUAL = x08 | x02 | x01 | x04
ç§ãã¡ã®ã¿ã¹ã¯ã¯ããã®å€ã次ã®ããã«å€æŽããããšã§ãã
x0F = A2D_SBC_IE_CH_MD_DUAL = x04
ãããã£ãŠã亀æããå¿
èŠããããŸã
?? 0F F0 0C 03 35 02
ã«
?? 04 ?? ?? ?? ?? ??
ãã®ãããããã€ã¹ã«ããæ¥ç¶ãéå§ããå Žåãšãä¿¡å·åä¿¡åŽã«ããæ¥ç¶ãéå§ããå Žåã®äž¡æ¹ã§ãã¹ã¿ãã¯ããã¥ã¢ã«ãã£ãã«ã¢ãŒãã§åŒ·å¶çã«æ¥ç¶ããŸããã
次ã«ããããã¬ãŒãã®å¶éãåé€ããããäžéãããå€ãäžããå¿
èŠããããŸãã
btif_media_task_get_sbc_rateãåŠçããå¿
èŠããã
ãŸã ã åæ§ã«ã
ãnon-edr a2dpã·ã³ã¯ãæ€åºãããã¬ãŒããïŒ
dã«å¶éããšãã
ç¹æ§ç·ãæ€çŽ¢ããã«ã¯ãã³ãŒãå
ã§é¢æ°
ãæ¢ããŸãã

ãããã¬ãŒãå¶éã¯æååã§è¡šãããŸã
UINT16ã¬ãŒã= DEFAULT_SBC_BITRATEïŒé çª
ã«328 kbpsã§ã ïŒ
ã³ãŒãã§ã¯ãããã¯æ¬¡ã®ãšããã§ãã

ãã®å€ã454 kbit / sã«å€æŽããŸã-ããã¯æšæºãããé«ãã倧éšåã®åä¿¡ããã€ã¹ã§æ©èœããŸãã ãããè¡ãã«ã¯ããã€ãã眮ãæããŸã
B1 4F F4 A4 74 ?? E0
ã«
?? ?? ?? E3 ?? ?? ??
ãŸãããã¿ãŒã³ã§æ€çŽ¢ããå¿
èŠããããŸãã
E0 4F F4 A4 74 ?? E0
ãããŠããã
?? ?? ?? E3 ?? ?? ??
-ããã¯å€ãã®ããã€ã¹ã«å¿
èŠã§ãã
E3ã®å€ã¯ãåžæããæå€§ãããã¬ãŒãã«å¿ããŠç°ãªãå ŽåããããŸãã
- E3-454 kbps
- F1-482 kbps
- F3-486 kbps
- 10-576 kbps
- 48-å¶éãªã
äžè¬çã«ãããã¯æäœMOV.W R4ãXXXã®ãã€ãã³ãŒãã«ãã£ãŠæ±ºå®ãããŸãã
å®éã«ã¯ããã¹ãŠã®åä¿¡ããã€ã¹ãå®å®ããä¿¡å·åä¿¡ãåä¿¡ããæå€§å€ãå®éšããŠéžæãã䟡å€ããããŸããã¯ã©ãã¯ãäžæãæªã¿ã¯ãããŸããã
ç§ã®å®éšã®ãã¹ãŠã®åä¿¡æ©ïŒäžèšã§ç€ºããïŒã§ã¯ããã®å€ã¯576 kbit / sã§ãããXiaomi Redmi 4x MIUI10 Android 7.1é»è©±ãä¿¡å·ã®ãœãŒã¹ã§ããã
説æãããã¢ã¯ã·ã§ã³ã«åºã¥ããŠãBluetooth.default.soã§æå®ããããã¿ãŒã³ãæ€åºãããããã眮ãæããæ±çšããããäœæãããŸãããïŒ åŒ·å¶ãã¥ã¢ã«ãã£ãã«ã¢ãŒããå«ãããããã¬ãŒãå¶éã454 kbpsã«èšå®ããŸãã å¿
èŠã«å¿ããŠãå¶éå€ã¯ã察å¿ãããã€ãã®æ€çŽ¢ãšçœ®æã«åºã¥ããŠç°¡åã«å€æŽã§ããŸããæ³šææ·±ãèªè
ã¯ãããç°¡åã«è¡ãããšãã§ããŸãã
ãããã¯bluedroidã¹ã¿ãã¯ã®å Žåã«ã®ã¿æ©èœããããåç©ã¹ã¿ãã¯ãšAndroidããŒãžã§ã³8以éã®å Žåã¯æåããªãå¯èœæ§ãé«ããšç§ã¯åŒ·èª¿ããŸãã
ãããã¯
ããããããŠã³ããŒãã§ã
ãŸã ã
ãªãªãžãã«ã®ãã¡ã€ã«ãMagiskã¢ãžã¥ãŒã«ãšããŠçœ®ãæããããšã匷ããå§ãããŸããç§èªèº«ã¯
次ã®ããã«ãããè¡ã
ãŸãã ã
泚 ïŒãããã®ã¢ãžã¥ãŒã«ã¯ãå·çæç¹ã§çŸåšã®ã°ããŒãã«ãªå®å®ããMIUI 10ãã¡ãŒã ãŠã§ã¢ãåããXiaomi Redmi 4x 3/32 GBé»è©±çšã«äœæãããŸãããããªãã®å Žåãäžèšã®ããã«bluetooth.default.soãã¡ã€ã«ãç¬èªã®ãããã§çœ®ãæããå¿
èŠããããŸãã ãŸãããã¡ã€ã«ãpath / system / lib64 / hwã«æ²¿ã£ãŠè€è£œããå¿
èŠãããå¯èœæ§ããããŸããããã¯ãé»è©±æ©ã®ã¢ãã«ãšãã¡ãŒã ãŠã§ã¢ããŒãžã§ã³ã«ãã£ãŠç°ãªããŸãã
Magiskã¢ãžã¥ãŒã«ã䜿çšãããã®ã¢ãããŒãã«ãããåä¿¡ããã€ã¹ã®äžéšããã¥ã¢ã«ãã£ãã«ããµããŒãããŠããªãããšã倿ããå Žåãæå€§ãããã¬ãŒããç°¡åã«å€æŽããäžè¬ã«å€æŽãç¡å¹ã«ããããšãã§ããŸãã
ãããã«
çŸæç¹ã§ã¯ã販売ã远æ±ããããã«ãå€ãã®äŒæ¥ãããé«ãäŸ¡æ Œã®æ£åœåãšããŠããã€ãã®æè¡é©æ°ãæåºããŠããŸãã
å®éã«ã¯ãæ¢åã®å®äŸ¡ãªæè¡ãå®å
šã«éçºãããŠããããæè¡é©æ°ãå®å
šã«å®è£
ãããŠããããå質ã«å€§ããªåœ±é¿ãäžããŠããããšãããããŸããã
éåžžã«é »ç¹ã«ããŠãŒã¶ãŒã¯ããã©ã»ã广ããäœéšãã補åã®å®æåºŠãããæ°ããããããã«ã©ãã«ã§ãããšããçç±ã ãã§èª¬åŸåãçºæ®ããŸãã å®éããã®åè³ªã¯æ³åäžã®ãã®ã§ãã
æç·ããŒãžã§ã³ãšæ¯èŒããŠã¯ã€ã€ã¬ã¹ãªãŒãã£ãªäŒéã®å質ãæããã«äœäžããŠããã«ãããããããçŸä»£ã®ããã€ã¹ã¡ãŒã«ãŒã¯ã¯ã€ã€ã¬ã¹ãã¯ãããžãŒãžã®å®å
šãªç§»è¡ãç®æããŠããããã§ãã åæã«ãäŸ¡æ Œäžæãæ£åœåããããã«ããŒã±ãã£ã³ã°ã®ããªãã¯ã䜿çšãããŸãïŒé»è©±ãžã®æ°Žæµžããã®ä¿è·ïŒæ°Žã®äžã§ã©ã®ããã«è©±ãããšãã§ããŸããïŒãªãããã€ã¹ãæ°Žã«èœãšããŸããïŒïŒãããé«äŸ¡ãªã³ãŒããã¯ã®äœ¿çšãªã© åæã«ãæ¢åã®äžè¬çãªSBCã³ãŒããã¯ã®å¯èœæ§ãååã«æŽ»çšãããŠããŸããã
Googleãã328 kbpsã®ãããã¬ãŒãå¶éã«é¢ããŠæç¢ºåããããšãããã®å¶éããªããããšãã§ãããLineage OSã®éçºè
ããBluetoothã¡ãã¥ãŒã§ãã¥ã¢ã«ãã£ãã«ãæå¹ã«ãããªãã·ã§ã³ã远å ããããšãã§ããŸããã§ããã
æåŸãŸã§èªãã§ãããã¿ããªã«æè¬ããŸãïŒ
ã³ã¡ã³ãã§ã®è°è«ãšLDACã³ãŒããã¯ã«é¢ããã¹ããŒã¹ã«ãã£ãŠåŒãèµ·ããããããã€ãã®ç¶ç¶ã¯
ããã«ãã
ãŸã ã
