
æè¡ã®çºå±ã«äŒŽãã誰ããæ £ã芪ããã§ããããã¥ãŒããã¢ããã°ããããã©ã³ã¯æŽå²çã«è¡°éãã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ã³ãŒããã¯ã«é¢ããã¹ããŒã¹ã«ãã£ãŠåŒãèµ·ããããããã€ãã®ç¶ç¶ã¯ããã«ãããŸã ã
