手机设计中耳机左右声道不分的有关问题分析

手机设计中耳机左右声道不分的问题分析!

        最近在做一个MT6572的项目,遇到了一个问题,就是有一个项目的左右耳机声道不分,在这个基线上有三个项目,然后另外2个是好的,没有这个问题。其中2个项目的差异就是频段不一样,而耳机都是美标的。

       为此,我寻找了大量的资料。其中耳机

目前国际上通用的手机耳机接口标准有两个,一个是OMTP(美标)的标准,一个是CTIA(欧标)的标准。
美标 CTIA耳机四极接法:从最前头开始数1234,左/右声道/地线/麦系统。
欧标 OMTP耳机四极接法:从最前头开始数1234,左/右声道/麦系统/地线

然而通过对比2个手机的硬件走线图,发现是一样的。对比BOM图,也是一样的!
这样又回到软件这边来分析,然后我们通过软件修改flash,相互下载,发现有问题的手机,就是有问题,而没问题的手机,还是没问题。所以还是硬件问题!到底问题在哪里呢?

经过硬件高手拆机对比,发现耳机部分实际走线有问题!有问题的手机使用了欧标的走线方法,然后使用欧标的耳机之后,这个左右声道就分开了!

但是再仔细一看,左右耳机声道反掉了。又不想修改硬件,然后就通过下面的方法来软件,使用左右耳机声调对调!

[FAQ04682][Audio Drv]耳机左右声道接反,软件如何修正

[DESCRIPTION]

硬件工程师不小心将耳机左右声道输出接反,软件该如何修改将其修正
 
[SOLUTION]
 
可以用如下方法:
修改AudioYusuStreamOut.cpp,添加方法:
void AudioYusuStreamOut::swS2M(const void* buffer, size_t bytes)
{
  uint32 Idx_i;
  int16 PCM_M;
  short* pbuffer=(short*)buffer;
  {
   //enable software stereo to mono
   for(Idx_i = 0; Idx_i<bytes>>1; Idx_i+=2)
   {
    PCM_M = pbuffer[Idx_i+1];  
    pbuffer[Idx_i+1]=pbuffer[Idx_i];
    pbuffer[Idx_i]=PCM_M;
   }
  }
}
修改ssize_t AudioYusuStreamOut::write(const void* buffer, size_t bytes)
在    dumpPcmData(streamout_ori,outbuffer,bytes,streamout_ori_propty);
之前添加: swS2M(buffer,bytes);

总结:遇到类似耳机问题,先明确产品定义,然后明确硬件实际(拆机)电路是否有问题。