您当前的位置:首页 > 互联网教程

如何在Android中整合立体声音效处理库

发布时间:2025-05-12 12:22:32    发布人:远客网络

如何在Android中整合立体声音效处理库

一、如何在Android中整合立体声音效处理库

openCORE是Android的媒体功能实现的关键,使开发人员能在此之上构建新的应用,它支持音视频播放、音视频录制、可视电话、博客、实时流媒体服务等。

openCORE使用了引擎驱动,节点框架(Node architecture),它由C++语言编写。引擎接收应用层的命令来负责管理和控制整个节点链路(Node graph)。节点和节点链路的选取和搭建取决于播放参数(音视频剪辑的类型、操作等)。

通常的节点链路的搭建为以下模式:

输入节点(Source Node)---多个处理节点(Decoder Node)或 Codecs...---输出节点(Sink Node)

openCORE还包括一个开放源码的多媒体编解码器,视频(如MPEG- 4,H.264),音频(如MP3,AAC,MIDI),以及语音(如AMRNB,AMR WB)等。OpenCORE使用的OpenMAX IL框架将编解码器整合到openCORE框架中。 OpenMAX IL API在嵌入式移动领域非常有名,它为组件的移植提供了一个的抽象层。

将音效处理整合到Android多媒体播放器

1.在openCORE的后端添加对音效库的支持

2.在媒体播放器(应用层)中添加对openCORE中音效处理节点(Node)的支持

第一步、在openCORE的后端添加对音效库的支持

OpenCORE为编解码器的整合提供了多种可选方法,分别可以作为:OpenMAX编解码节点、OpenMAX IL组件、多媒体I/O。多媒体I/O常常用在输出显示。在音效处理整合中可行的方法是将音效库“包装为”OpenMAX编解码节点或 OpenMAX IL组件。以下分别说明这两种方式的用法。

这种方法要求播放器引擎支持多种音频效果。每个效果组件被实现为一个节点Node,当数据路链路创建后由引擎创建这些节点。数据流在路链的节点Node间“流动”,并有引擎进行管理和控制。同时,随着多个效果节点Node产生的线程增加,系统负荷也会增重。

音频效果组件所处理的数据为解码组件的输出,所以最好将[音频解码]和[音效处理]组件放在同一层。OpenCORE采用Open MAX IL为所有的Codec提供API操作,OpenCORE这种特性使得整合音效处理变得非常直接了当。

音效处理库被编译成为静态库,并用ARM的RVCT优化后,用OpenMAX IL包装起来构成了OpenCORE组成部分。

[音频解码]和[音效处理]组件是通过API的IL层进行通信的,OMX音频解码节点Node在OpenCORE充当客户端的角色,这个Node节点负责创建、删除、数据流动,并将控制命令、数据Buffer传入到音频解码器中,音频解码器处理了数据Buffer后又将它们返回给Node节点。Node节点又将数据Buffer传递给[音效处理]组件。

这种方法与第一种方法相比带来系统负荷较小,但不是说它没有系统负荷。流数据要在两个组件和Node中传输两次(缺陷),并且需要协调组件之间的通信问题。

二、android软件开发的架构

Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity类(class)负责创建视窗(window),一个活动中的Activity就是在 foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由和AIDL连结,达到复数程序同时运行的效果。如果运行中的 Activity全部画面被其他 Activity取代时,该 Activity便被停止(stopped),甚至被系统清除(kill)。

View等同于J2ME的Displayable,程序人员可以通过 View类与“XML layout”档将UI放置在视窗上,Android 1.5的版本可以利用 View打造出所谓的 Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的Android Hero手机即含有大量的widget。至于ViewGroup是各种layout的基础抽象类(abstract class),ViewGroup之内还可以有ViewGroup。View的构造函数不需要在Activity中调用,但是Displayable的是必须的,在Activity中,要通过()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View与事件(event)息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个event listener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.。另外还有Image等同于J2ME的BitMap。在模拟器上运行仿真是虚拟设备(AVD),我们需要配置来运行我们的Android应用程序。步骤1、开放的AVD管理步骤2、新的按钮,点击添加新设备,并配置您的设备设置。步骤3、会有一个结果窗口显示所有已配置你上一屏幕选择。步骤4、按“确定”,你将会看到你的设备列在有你可以关闭此窗口。步骤5、运行你的Android应用程序项目从Eclipse,如果只有一个AVD配置,它会自动部署的应用程序也会出现一个窗口,选择你的图片。仿真器将开始。在设备上运行

Android应用程序可以直接部署在Android设备上,这几个配置所需要的。步骤1、在调试模式的设置可以设置应用程序:Android的<应用程序>元真可调试属性。ADT 8这是默认的。步骤2、您的设备上启用USB调试:Android 3.2或以上转至设置>应用程序>开发和启用USB调试。在Android 4更新,这是开发商选择设置>。注:在Android 4.2更新,开发者选项是默认隐藏。可以,去设定>android的版本号。返回先前屏幕找到开发商选择。步骤3、安装USB驱动程序为您的设备,计算机识别你的设备。步骤4、一旦设置和您的设备通过USB连接,从Eclipse菜单栏安装您的应用程序在设备上选择运行>运行(或运行>调试)。操作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)和虚拟机(Virtual Machine)。 Bionic是 Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是Apple Safari浏览器背后的引擎。Surface flinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。

Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating SystemLibrary(OSCL)、Common、OpenMAX。

Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia功能还只是阳春型的。2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,Skia也是Google Chrome的图形引擎。

Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过类(Column)取得共用数据库。

Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

Dalvik虚拟机可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。 Android的 HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把 Android framework与 Linux kernel隔开,让 Android不至过度依赖 Linux kernel,以达成 kernel independent的概念,也让 Android framework的开发能在不考虑驱动程序实现的前提下进行发展。

HAL stub是一种代理人(proxy)的概念,stub是以*.so档的形式存在。Stub向 HAL“提供”操作函数(operations),并由 Android runtime向 HAL取得 stub的 operations,再 callback这些操作函数。HAL里包含了许多的 stub(代理人)。Runtime只要说明“类型”,即 mole ID,就可以取得操作函数。 Android是运行于 Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 userspace,使得Linux driver与 Linux kernel彻底分开。bionic/libc/kernel/并非标准的kernel header files。Android的 kernel header是利用工具由 Linux kernel header所产生的,这样做是为了保留常数、数据结构与宏。

Android的 Linux kernel控制包括安全(Security),存储器管理(Memory Managemeat),程序管理(Process Management),网络堆栈(Network Stack),驱动程序模型(Driver Model)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是 Android用来辅助Git工作的一个工具。

三、python 能开发 Android 应用吗

Python是一种解释型脚本语言,可以应用于以下领域:

操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(Virtual Machine)。 Bionic是 Android改良libc的版本。

Android同时包含了Webkit,所谓的Webkit就是Apple Safari浏览器背后的引擎。Surface flinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的Bionic Libc。

Android采用OpenCORE作为基础多媒体框架。

Open CORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与Linux Cairo功能相当,但相较于Linux Cairo, skia功能还只是雏形的。

2005年Skia公司被Google收购,2007年初,Skia GL源码被公开,Skia也是Google Chrome的图形引擎。

Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过ContentResolver类(Column)取得共用数据库。

Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(Dalvik Virtual Machine)。Dalvik虚拟机是一种“暂存器型态”(Register Based)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

Dalvik虚拟机可以有多个实例(Instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。