没有合适的资源?快使用搜索试试~ 我知道了~
首页android音频开发
android音频开发
需积分: 48 9 下载量 142 浏览量
更新于2023-05-27
评论
收藏 2.28MB DOCX 举报
ALSA具有更加友好的编程接口,并且完全兼容与OSS,对应用程序员来讲无疑是一个更好的选择。ALSA系统包括驱动包alsa-drvier、开发包alsa-libs、开发包插件alsa-libplugins、设置管理工具包alsa-utils、其他声音相关处理小程序包alsa-tools、特殊音频固件支持包alsa-firmware、OSS接口模拟层工具alsa-oss共7个子项目,其中只有驱动包是必须的。
资源详情
资源评论
资源推荐
1 Alsa、Framework 及 Android
1.1 Alsa 整体框架介绍
目前, 系统常用的音频驱动有两种形式 和 。:现在是 下音频驱
动的主要形式,与简单的 兼容。:过去的形式音频设备接口包括 、 和
等,分别使用于不同的应用场合。针对音频设备, 内核中包含了 类音频设备驱动框
架,OSS、ALSA 和 ASoC, 包含 和 字符设备接口,在用户空间的编程中,完
全使用文件的操作; 以 和组件、 等为主线,在用户空间的编程中不
使用文件接口而使用 ; 则是 在 方面的演变,他建立在 之上,将
驱动中的 相关的代码和 相关的代码进行了分离。
在音频设备驱动中,几乎必须使用 ,而 的缓冲区会被分割成一个一个的段,
每次 操作其中的一段, 驱动的阻塞读写具有流程控制能力,在用户空间不需要进
行流量方面的定时工作,但是他需要及时的写 播放和读录音,以免出现缓冲区的
!" 或 #!" 。 和 的 流 控 由 的 核 心 层 处 理 , 底 层 驱 动 仅 以
$%%、$等方法进行配合。
在声 卡 的 驱 动中一 种 是 &$ ( 开 放声 音 系 统 ) ,一 种 是
#'$$(先进 声音架构)。 是一个商业声卡驱动程序,
需要花钱购买。一般我们现在使用的是 的声音架构, 包括对声卡的支持和驱动。
嵌入式微控制器( 中集成了 脉冲编码调制接口、 或者 音频接口。通过这
些接口外部的音频解码器可以实现声音的 和 转换。
ALSA 具有更加友好的编程接口,并且完全兼容与 ,对应用程序员来讲无疑是一个
更 好 的 选 择 。 系 统 包 括 驱 动 包 alsa-drvier 、 开 发 包 alsa-libs 、 开 发 包 插 件 alsa-
libplugins、设置管理工具包 alsa-uls、其他声音相关处理小程序包 alsa-tools、特殊音频固
件支持包 alsa-rmware、OSS 接口模拟层工具 alsa-oss 共 个子项目,其中只有驱动包是必
须的。 的基本特征如下:
)、对所有音频接口的高效支持,从普通用户的声卡到专业级别多路音频设备;
*、支持多种盛开设备、声卡驱动完全模块化设计;
、支持 和多线程。
+、支持应用开发库(,)以简化应用程序开发。为程序设计提供了简单、方便,
并且拥有有高级的效果和功能;
-、支持旧版本的 结口,能为大多数的 应用程序提供兼容; 是一个商
业性的驱动, 有一个简装本的代码已经移入内核和 ,其中 , 就是; 公司
据说目前已经并不存在了;我们没有必要用 公司提供的商业版本;用 和 简装
版足够;
目前 内核提供的用户空间接口有:
信息接口./$.0((
控制接口$$.0(#(($1提供管理声卡注册和请求可用设备的通
用功能。
混音器接口$.0(#((1 1
接 口 $.0(#((1 1 : 管 理 数 字 音 频 回 放 &2 和 录 音
$的接口。它是开发数字音频程序最常用到的接口。
3" 接 口 3" $.0(#((1 1 : 支 持 $$
%$$.0标准的电子乐器。这些 提供对声卡上 总线的访问。这个原始接口
基于 事件工作,由程序员负责管理协议以及时间处理。
音序器接口4$.0(#((4
定时器接口5$.0(#((/:为同步音频事件提供对声卡上时间处理硬
件的访问。
ASoC 驱动的组成:
Codec 驱动(编解码器驱动):这一部分只关心 本身,与 平台相关的特性不由
此部分操作;
平台驱动(CPU 驱动):只关心 本身,不关系 ,主要处理两个问题: 引擎、
集成的 、、 数字接口控制
板驱动(machine 机器驱动):将平台驱动和 驱动绑定在一起,描述了板一级的硬
件特性。
由许多声卡的声卡驱动程序组成,同时它也提供一个称为 的 库。应
用程序开发者应该使用 而不是内核中的 接口。因为 提供最高级并
且编程方便的编程接口。并且提供一个设备逻辑命名功能,这样开发者甚至不需要知道类
似设备文件这样的低层接口。相反,(6 驱动是在内核系统调用级上编程,它要求开
发者提供设备文件名并且利用 $ 来实现相应的功能。为了向后兼容, 提供内核模
块来模拟 ,这样之前的许多在 基础上开发的应用程序不需要任何改动就可以在
上运行。另外, 库也可以模拟 ,而它不需要内核模块。 包含插件功能,
使用插件可以扩展新的声卡驱动,包括完全用软件实现的虚拟声卡。 提供一系列基于
命令行的工具集,比如混音器,音频文件播放器&,以及控制特定声卡特定属
性的工具。
库使用逻辑设备名而不是设备文件。设备名字可以是真实的硬件名字也可以是插件
名字。硬件名字使用 '"07 这样的格式。其中 是卡号,7 是这块声卡上的设备号。第一个
声音设备是 '"8089这个别名默认引用第一块声音设备并且在本文示例中一真会被用到。插
件使用另外的唯一名字。比如 %'"0表示一个插件,这个插件不提供对硬件设备的访问
而是提供像采样率转换这样的软件特性,硬件本身并不支持这样的特性。
每个声卡都有一个硬件缓存区来保存记录下来的样本。当缓存区足够满时,声卡将产
生一个中断。内核声卡驱动然后使用直接内存 访问通道将样本传送到内存中的应用
程序缓存区。类似地,对于回放,任何应用程序使用 将自己的缓存区数据传送到声卡
的硬件缓存区中。这样硬件缓存区是环缓存。也就是说当数据到达缓存区末尾时将重新回
到缓存区的起始位置。 维护一个指针来指向硬件缓存以及应用程序缓存区中数据操作
的当前位置。应用程序缓存区的大小可以通过 库函数调用来控制。缓存区可以很大,
一次传输操作可能会导致不可接受的延迟,我们把它称为延时$&。为了解决这个问题,
将缓存区拆分成一系列周期(6 中叫片断 .%$9 以 为单
元来传送数据。一个周期存储一些帧.。每一帧包含时间上一个点所抓取的
样本。对于立体声设备,一个帧会包含两个信道上的样本。一个缓存区分解成周期,然后
是帧,然后是样本。包含一些假定的数值。左右信道信息被交替地存储在一个帧内。这称
为交错$#模式。在非交错模式中,一个信道的所有样本数据存储在另外一个信道
的数据之后。当一个声卡活动时,数据总是连续地在硬件缓存区和应用程序缓存区间传输
但是也有例外。在录音例子中,如果应用程序读取数据不够快,循环缓存区将会被新的数
据覆盖。这种数据的丢失被称为 #9在回放例子中,如果应用程序写入数据到缓存区
中的速度不够快,缓存区将会:饿死:。这样的错误被称为::。在 文档中,有
时将这两种情形统称为:13;:。适当地设计应用程序可以最小化 13; 并且可以从中恢复
过来。
一个典型的声音程序使用 的程序通常类似下面的伪代码:
打开回放或录音接口
设置硬件参数访问模式,数据格式,信道数,采样率,等等
"'有数据要被处理:
读 数据录音
或 写 数据回放
关闭接口
1.1.1 ALSA 架构简介图 1
是 #'$$,高级 声音架构的简称,它在 操
作系统上提供了音频和 ($$ %$$.,音乐设备数字化接口)
的支持。它包含 库和工具、内核驱动集合,对 声音进行支持。 包含一系列
内核驱动对不同的声卡进行支持,还提供了 的 库。用这些进行写程序不需要
打开设备等操作,所以编程人员在写程序的时候不会被底层的东西困扰。
自带的应用程序是 ,/ 工具包,包括 &、 等。& 用于在
上播放音频。 用于改变音频信号的音量。
, 是用户空间的函数库,提供了 9 给应用程序使用,应用程序应包含头
文件 9'。这个库通过提供封装函数,,使 应用程序不需要涉及具体
硬件,编写起来更容易。, 中有 $,/,, 等,都是以插件%的
形式存在的。, 通过硬件访问层的系统调用与内核层进行交互。
,# 是音频设备的 内核部分的驱动。集成在内核里面,大多是以模块的方式
存在。可分为三层。
)最底层是硬件操控层,负责实现硬件操纵访问的功能,这也是声卡驱动程序中用户需
实现的主要部分;
*中间层是 驱动的核心部分,它由各种功能的音频设备组件构成,为用户提供了
一些预定义组件(如 、、音序器和控制器等),另外用户也可以自行定义设备组
件;
驱动的最上层是声卡对象描述层,它是声卡硬件的抽象描述,内核通过这些描述可以
得知该声卡硬件的功能、设备组件和操作方法等。
1.1.2 ALSA 架构简介图 2
下图是从代码的角度体现了 , 和 ,# 及 '" 的交互关系。用户层的
, 通过操作 ,# 创建的设备文件(#((8 8 等对内核层进行访问。内核
层的 ,# 驱动再经由 对硬件声卡芯片进行访问。从而实现了 、,
、,#、'" 的操作。图中右上角 相关部分是为了兼容 。
1.1.3 ALSA 架构简介图 3
声卡芯片的硬件驱动程序实际上是 ,# 的一部分,但是在本文档中,为了明示层
次关系,将这两个分开对待。将硬件驱动程序叫做 #,#设备驱动, ,# 的
其它部分叫做 ,# 驱动。
硬件驱动被 后,应用程序就可以调用 , 的 函数播放声音。下图是从
应用程序开始,到我们的编写设备驱动程序的调用过程。从应用程序角度看, 的操作
分为两部分,打开及关闭是一部分,写入数据是另一部分。
当声卡 使用”.$<时, 作为 的从设备存在,应用程序直接和 的
相关函数打交道。 混合数据后,直接写到 映射的地址中。
从设备驱动程序角度看,声卡核心驱动可以分为三个主要部分:
)模块初始化和退出部分。
*播放以及停止部分。
中断处理部分。
而从应用程序的角度向下看0这三部分分别在 、打开声卡和写入数据时被关联。
剩余63页未读,继续阅读
weixin_41691666
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0