原址

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. TeamCity 和 Nexus 的使用
  2. [网页设计]点睛价值
  3. Python+PyQt 数据库基本操作
  4. 服务器扩充后问题总结:Value too large for defined data type
  5. Servlet3.1规范翻译 - 应用生命周期事件
  6. 高并发高流量网站架构详解--转载
  7. linux haproxy 脚本,haproxy部署脚本
  8. 大数据的逆袭:传统数据库市场的变革
  9. python练习--模拟grep -B功能
  10. linux ns级定时器_预热 | 万众期待的单片机、Linux二合一的STM32MP157开发板亮相
  11. mysql 安装1607_mysql服务启动报1607error
  12. 今后几个月的IT读书计划
  13. Si9000射频线阻抗计算
  14. 8位数控分频器的设计_数控分频器的设计实验报告
  15. 新创建了用户没有计算机图标,w10我的电脑图标没了怎么办
  16. QT笔记- 如何判断窗口小部件是否自动出现(或隐藏)了滑条?
  17. html页面禁止竖屏,关于移动端页面强制竖屏的方法
  18. android模拟器比较好,安卓模拟器哪个好用,好用的安卓模拟器有哪些
  19. 小白福利-手把手教你如何重新安装你的系统
  20. linux设备驱动之pci设备的I/O和内存

热门文章

  1. linux 内核源码学习
  2. ajax传输 基础一
  3. 精心挑选的15款优秀 jQuery 文本特效插件和教程
  4. 大话IT第14期:iOS、Android、Mango 你的选择?
  5. 参数编码 完全解决方案 (转)
  6. 如何实施域控制器活动目录备份与恢复
  7. Web 前端开发框架收集
  8. 深度学习入门必看的书和论文?有哪些必备的技能需学习?
  9. java 执行查询_在单个语句中用Java执行多个查询
  10. catch里面不想做任何处理_处理异常的三种健壮方式