Android通话录音流程

        Android手机现在基本上都有通话录音的功能。那么这个功能的原理是什么呢,

原理:语音通话包含uplink 和downlink数据,因此只要分别获取这两部数据,然后将PCM

格式的语音流转存成其他格式的文件即可,通过Modem To App的某种内存共享机制传输数据;

1. 通过Mic获取uplink data

      //The framesize should be indicated by DSP, especially in call record

       framesize = SAL_PcmEx_GetBufLen(SAL_PCMEX_BUF_SE);

 

      /* handle uplink data from 1st mic */

       dspAddr = SAL_PcmEx_GetBuf(SAL_PCMEX_BUF_SE);

       IDMA_ReadFromDSP(buf, dspAddr, (uint32)framesize);

     解释: SE负责对uplink data,进行Encrypt和Encode,即以3G,4G的协议编码

 

2. 获取DSP的downlink  Data

          // get downlink data 

           dlFrameSize = SAL_PcmEx_GetBufLen(SAL_PCMEX_BUF_SD);

           dspAddr = SAL_PcmEx_GetBuf(SAL_PCMEX_BUF_SD);

           IDMA_ReadFromDSP(/*dualMicOrDlTempBuf*/buf+framesize, dspAddr, (uint32)dlFrameSize);

         解释: SD负责对网络下行数据进行Decode; 由于每次上下行的数据包都很小,所以在

数据简单的叠加,人耳并不会听出其中有什么延时,能同时听到双方的声音。

3. 发送数据to App

      void spc_record_sendPcmData(void)

      SpcIO_WriteDataToAp

      spcIO_sendDataViaCCCI

4. Android 侧的发起端

       audio/common/speech_driver/SpeechDriverNormal.cpp

        SpeechDriverNormal::sendSpeechMessageToModem

        sendMailbox(&sph_msg, MSG_A2M_RECORD_RAW_PCM_ON, param_16bit, 0);

5.  MTK整了M2A之间的机制sendMailbox

      sendMailbox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值