Android REMOTE_SUBMIX原理(九)

栗子:public AudioRecord audiorecord;
audiorecord = new AudioRecord(MediaRecorder.AudioSource.REMOTE_SUBMIX,
                   16000, 
                   AudioFormat.CHANNEL_IN_STEREO, 
                   AudioFormat.ENCODING_PCM_16BIT, 
                   minBufferSize);

先说下REMOTE_SUBMIX工作原理:
  其实SUBMIX可以截取speaker/headphone/lineout等,分别对应AUDIO_DEVICE_OUT_SPEAKER/AUDIO_DEVICE_OUT_WIRED_HEADPHONE
/AUDIO_DEVICE_OUT_LINE.
  播放音乐时,Android系统直接创建的是MixerThread,不停往codec喂数据,然后声卡就播放出声音,
这时如果new AudioRecord(REMOTE_SUBMIX),Android会创建一个DuplicatingThread线程,从MixerThread线程里拷贝一份播放音乐
的数据,首先DuplicatingThread会把copy过来音频数据写到一块ringbuffer里,SUBMIX就从ringbuffer里读取数据,
这里读取的数据就是SUBMIX得到的数据,目前发现一个bug,就是在DuplicatingThread线程中
write的速度太慢,导致read的速度大于write速度,会导致每次读都丢2bytes的数据(待解决),
当播放音乐的时候同时,使用SUBMIX截取speaker音频数据时,流音量会降低(已知bug).

今天我们来看下REMOTE_SUBMIX原理,废话不多说,起飞...
1.frameworks/av/media/libmedia/Au
  • 3
    点赞
  • 2
    评论
  • 8
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值