原址

AudioTrack是和PlaybackThread中创建的Track一一对应的,Track是Bn,AudioTrack是Bp。音乐APP通过操作AudioTrack来进行音乐数据的传输。具体过程如下:

应用initAudioTrack ,new一个AudioTrack, 注意里面的flag(比如AUDIO_OUTPUT_FLAG_FAST,那说明这个output是需要FastMixer的)。并且调用了AudioTrack的set函数,注册了audioCallback做callback函数。这个callback是AT和应用交互数据的接口。

在set函数里,调用了AudioSystem::getOutput,然后是hardware/libhardware_legacy/audio/AudioPolicyManagerBase.cpp调用了getOutput,这里会找一个完全满足输入参数如bit-depth的output,否则返回0。然后调用client的openOutput。client这里是AudioFLinger,所以findSuitableHwDev_l,open_output_stream,然后new Mixer。所以,一个Output对应一个playback线程。手机里面的output是由audio_policy.conf定义的。由各个厂家自己实现。

在set函数里,创建了AudioTrackThread线程,这个线程不停的执行threadLoop,除非有人pause或stop它。threadLoop中有一个重要的函数processAudioBuffer。其中通过proxy的obtainBuffer,再通过mCblk的rear和front算出来自己的mRaw指针的地址,然后传给AudioTrack的processAudioBuffer的参数audioBuffer。audioBuffer是一个输入输出参数,它既负责输入又负责输出,最终执行完processAudioBuffer后输出填好的buffer的数据指针和大小。

如果new出AudioTrack的模块没有给AudioTrack提供callback,就无法使用上面的方式来填充数据,而是要自己调用AudioTrack::write函数来写。可以清晰的看出:采用callback的方式属于下层驱动,上层被动;采用write函数调用的方式属于上层主动,下层被动。

Android多媒体:AudioTrack相关推荐

  1. 《android多媒体api》之AudioTrack原始音频pcm播放api

    <android多媒体api>系列是整合梳理android开发中经常用到的媒体相关api:多媒体开发主要内容有音频.视频录制播放.摄像头操作.录制操作.流媒体.直播.推流.拉流等方面:最近 ...

  2. Android 多媒体综述

    Android 多媒体综述 多媒体系统是Android中最为庞大的系统,涉及了硬件抽象层.编解码.OpenCore多媒体框架.Android多媒体框架.Java层接口多方面的内容. 一.引言 本系列内 ...

  3. Android 多媒体【转】

    第11章  Android多媒体 通过调用Android的API,可以实现相册,播放器,录音和摄像等功能.这一章需要掌握如下功能: q      多媒体的ContentProvider的调用 q    ...

  4. Android多媒体开发(3)————使用Android NKD编译havlenapetr-FFMpeg-7c27aa2

    1. 使用NDK去编译官方的FFmpeg原版的话,还得自己实现JNI层与Java层,工程量比较大.所以移植FFmpeg到Android平台时,可以移植一些已经实现JNI与JAVA层的开源项目,毕竟软件 ...

  5. android多媒体框架学习 详解

    原址 一:多媒体框架概述 jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了! ...

  6. android多媒体框架学习 详解 最新版本

    一:多媒体框架概述 jellybean 的多媒体跟以前的版本,通过对比没啥变化,最大的变化是google终于舍得给multimedia建个独立的git了(framework/av),等你好久了!也体现 ...

  7. Android多媒体之SoundPool+pcm流的音频操作

    零.前言 今天比较简单,先理一下录制和播放的四位大将 再说一下SoundPool的使用和pcm转wav 讲一下C++文件如何在Android中使用,也就是传说中的JNI 最后讲一下变速播放和变调播放 ...

  8. android开发高级开发,Android多媒体开发高级编程 (Shawn Van Every) pdf扫描版

    <android多媒体开发高级编程--为智能手机和平板电脑开发图形.音乐.视频和富媒体应用>使用清晰.直观的示例介绍了android sdk中丰富的多媒体功能,有助于您开发能够创建.播放和 ...

  9. android编程高级教程 pdf,Android多媒体开发高级编程

    在多媒体功能方面,今天的手机同时是照相机.相册.摄像机.电影播放器.音乐播放器.听写机,且可能具备更多功能. 特别是,Android在SDK中具有非常丰富的功能,本书将试图通过讨论和实例对该SDK进行 ...

  10. Android 多媒体之音频----(日积月累)

    在开发上,习惯的将音频.视频功能的使用称之为多媒体,实际上如果讲的宽泛一些的话,相机的使用,比如拍照,录制视频等,也可以划分到多媒体的范畴里面. 从本节课开始,我们就来看看Android中多媒体的AP ...

最新文章

  1. html元素和属性,HTML常用元素和属性(一)
  2. element 增加自由验证
  3. 人工蜂群算法python_教程 | 用人工蜂群算法求解k-分区聚类问题
  4. Pandas列百分数转化为小数
  5. Oracle常用小记
  6. 拿4k的前端开发都会做些什么?
  7. struts中action名称反复导致的神秘事件
  8. 一些控件中的属性。(未完)
  9. YUV444,YUV420P,YUV420SP,YUV422P,YUV422SP,NV12,NV21,NV16,NV61等格式区分与存储简介
  10. 随机过程(4)——马尔可夫链
  11. 《善用佳软:高效能人士的软件应用之道》一2.5 PDF:跨平台文档解决方案
  12. Android控件全解手册 - 玩转TextView属性
  13. 10大白帽黑客专用的 Linux 操作系统
  14. mysql: [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1!
  15. Nodelist转化问题。
  16. Ajax与Json的使用
  17. python爬斗鱼直播房间名和主播名_斗鱼爬虫,爬取颜值频道的主播图片和名字
  18. SpringBoot + uniApp实现的掌上生鲜超市购物微信小程序系统 附带详细运行指导视频
  19. Spark中组件Mllib的学习16之分布式行矩阵的四种形式
  20. Warpspeed 2021 DFINITY×IAF黑客松Demo Day落幕,10支队伍获奖

热门文章

  1. [book] iOS 8 Swift Programming Cookbook
  2. 集群tomcat+session共享
  3. Tomcat优化实践——网站运维
  4. 分区 Service Bus 队列和主题
  5. xcode 4,2 for Mac 10.6.8
  6. 使用crontab定时备份mysql
  7. VS2008 安装部署工程的小问题
  8. 【自然框架】 权限 的视频演示(二): 权限到字段、权限到记录
  9. 史上最详细MySQL5.5复制配置步骤,与以前版本的有所不同
  10. [论文阅读] Person Re-identification: Past, Present and Future