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原理,废话不多说
Android REMOTE_SUBMIX原理(九)相关推荐
- Android10.0 Binder通信原理(九)-AIDL Binder示例
摘要:本节主要来讲解Android10.0 Binder中如何使用AIDL 阅读本文大约需要花费20分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平 ...
- 【转】Android Activity原理以及其子类描述,androidactivity
Android Activity原理以及其子类描述,androidactivity 简介 Activity是Android应用程序组件,实现一个用户交互窗口,我们可以实现布局填充屏幕,也可以实 ...
- Android测试原理(三)——使用Eclipse的ADT进行测试
原文链接:http://developer.android.com/tools/testing/testing_eclipse.html 1.使用Eclipse的ADT进行测试 这次的主题介绍了怎么使 ...
- Android 颜色渲染(九) PorterDuff及Xfermode详解
Android 颜色渲染(九) PorterDuff及Xfermode详解 之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前, ...
- android 开发art,Android应用开发之Android 系统启动原理(art 虚拟机)
本文将带你了解Android应用开发之Android 系统启动原理(art 虚拟机),希望本文对大家学Android有所帮助. Android 系统启动原理(art 虚拟机) 一.虚拟机的启动 A ...
- android 实例源码解释,Android Handler 原理分析及实例代码
Android Handler 原理分析 Handler一个让无数android开发者头疼的东西,希望我今天这边文章能为您彻底根治这个问题 今天就为大家详细剖析下Handler的原理 Handler使 ...
- Android RecyclerView(九)滑动监听综述
Android RecyclerView(九)滑动监听 1 RecyclerView 的滑动监听 1.1 RecyclerView 设置滑动监听 mRecyclerView.setOnScrollLi ...
- Android布局原理与优化
Android布局原理与优化 目录: 绘制原理 CPU与GPU Android 图形系统的整体架构 RenderThread 硬件加速和软件绘制 invalidate软件绘制流程 invalidate ...
- android view交替动画,Android View原理(View树遍历,View重绘,View动画)
一.屏幕绘图基础 Android中的GUI系统是客户端和服务端配合的窗口系统,即后台运行了一个绘制服务,每个应用程序都是该服务端的一个客户端,当客户端需要绘制时,首先请求服务端创建一个窗口,然后在窗口 ...
最新文章
- linux安装google chrome
- 2021-03-28 收敛性常用一阶微分方程
- Intellij IDEA 使用学习
- 【渝粤教育】国家开放大学2018年秋季 2202T公共行政学 参考试题
- php stomp rabbitmq,docker环境下的RabbitMQ部署,Spring AMQP使用
- 一维卷积神经网络、卷积神经网络的基础知识
- python时域信号特征提取(各种因子)
- Android 程式开发:(二十)内容提供者 —— 20.6 自定义ContentProvider的使用
- 子div撑不开父div的几种解决方法
- android duiqi文字底部,Android中的文本/布局对齐(textAlignment,gravity)
- 软件工程:数据流图和结构图怎么画?
- java kdj macd_很好用的KDJ与MACD结合指标
- 对于提高团队开会效率的看法
- vue 微信登录(使用了vant)
- L1-054 福到了 (15 分)C语言
- 探索Whisper语音识别
- 程序猿健身之腹肌~基本版本
- c语言第一章,C语言修正版第一章
- [FineReport帆软]决策报表frm中实现添加监控声音报警
- 2018世界人工智能蓝皮书:看中国到底有多强!