openssl音频,openssl音响输入格式
今天小编为大家分享Windows系统下载、Windows系统教程、windows相关应用程序的文章,希望能够帮助到大家!
8.OpenSL ES全称为Open Sound Library for EmbeddedSystems,即嵌入式音频加速标准。OpenSL ES是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速API。它为嵌入式移动多媒体设备上的本地应用程序开发者提供了标准化、高性能、低响应时间的音频功能实现方法,同时还实现了软/硬件音频性能的直接跨平台部署,不仅降低了执行难度,而且促进了高级音频市场的发展。简单来说OpenSL ES是-一个嵌入式跨平台免费的音频处理库。所以它不是Android特有的。
使用opensl es的前提条件是在源代码中:
#include<SLES/OpenSLES.h>,包含 opensl es的头文件
-lOpenSLES链接 opensl es的库文件
opensl es主要操作的是介面(interface),大体来说有如下几个介面:
SLMuteSoloItf:声道关闭/单声道介面
除了 slCreateEngine这一条函数是用来创建声音引擎对象介面以外,其它的所有操作都是通过介面的成员函数完成的,现在我们来研究如何初始化声音引擎
初始化声音引擎需要3个介面,我们要将它们声明为全局变量:
SLObjectItf _aud;/*声音引擎的对象介面*/
SLEngineItf _aud_eng;/*声音引擎*/
SLObjectItf _aud_mix;/*混音器对象介面*/
首先我们创建声音引擎的对象介面:
slCreateEngine(&_aud, 0, NULL, 0, NULL, NULL);
创建之后的介面并不能立即使用,我们首先要通过介面的子函数实现(Realize)它:
(*_aud)->Realize(_aud, SL_BOOLEAN_FALSE);/*通过_aud的Realize子函数实现声音引擎的对象介面*/
实现之后,我们从声音引擎的对象中抓取声音引擎,在这里我们通过介面的子函数抓取介面(GetInterface),抓取对像是 _aud,抓取类型是引擎,抓取后存放的内存位置是我们先前声明的引擎介面_aud_eng的指针位置。指令如下:
(*_aud)->GetInterface(_aud, SL_IID_ENGINE,&_aud_eng);
第三步我们要做的是从声音引擎中创建"输出混音器"对象,这样我们才可以将声音播放出来。
注意,同声音引擎的对象一样,由于"输出混音器"是对象,我们必须创建后在实现(Realize)它。
由于"输出混音器"创建的同时需要两个音效参数,所以我们先准备好这两个参数:第一个参数类型是声音介面编号(SLInterfaceID),是一个数组,我们可以将其看成一个音效配置列表,在其中放置不同的音效编号。第二个参数是一个逻辑数组:是否强制实现声音介面编号中对应音效,如果某个音效的逻辑为真(SL_BOOLEAN_TRUE),则在无法实现该音效时视为"输出混音器"创建失败,否则将忽略该音效。因为安卓的声硬件对音效的支持不同,所以最好不要强制实现,所以我们在第二个数组中全部填写SL_BOOLEAN_FALSE。
现在我们开始创建"输出混音器",环境回响(SL_IID_ENVIRONMENTALREVERB)是比较常见的音效,我们将非强制性的使用该音效。
SLInterfaceID effect[1]={SL_IID_ENVIRONMENTALREVERB};/*环境回响音效*/
SLboolean effect_bool[1]={SL_BOOLEAN_FALSE};/*回响音效强制实现逻辑*/
(*_aud_eng)->CreateOutputMix(_aud_eng,&_aud_mix, 1, effect, effect_bool);/*从声音引擎中创建“输出混音器”*/
(*_aud_mix)->Realize(_aud_mix, SL_BOOLEAN_FALSE);/*实现刚创建的“输出混音器”*/
样一来,所有的初始化工作就全部完成了。我们获得如下完整代码:
SLObjectItf _aud;/*声音引擎对象*/
SLEngineItf _aud_eng;/*声音引擎*/
SLObjectItf _aud_mix;/*输出混音器对象*/
/* audio_init:初始化opensl es*/
SLInterfaceID effect[1]={SL_IID_ENVIRONMENTALREVERB};/*音效*/
SLboolean effect_bool[1]={SL_BOOLEAN_FALSE};/*音效强制实现逻辑*/
slCreateEngine(&_aud, 0, NULL, 0, NULL, NULL);/*创建声音引擎对象*/
(*_aud)->Realize(_aud, SL_BOOLEAN_FALSE);/*实现声音引擎对象*/
(*_aud)->GetInterface(_aud, SL_IID_ENGINE,&_aud_eng);/*从声音引擎对象中抓取声音引擎*/
(*_aud_eng)->CreateOutputMix(_aud_eng,&_aud_mix, 1, effect, effect_bool);/*通过声音引擎创建输出混音器对象,并且非强制性的开启环境混响效果*/
(*_aud_mix)->Realize(_aud_mix, SL_BOOLEAN_FALSE);/*实现混音器对象*/
初始化引擎之后,我们还要创建一个播放器对象,就可以在播放器中输出声音了
播放器对象和输出混音器一样,是对象,创建后需要进行实现:
SLObjectItf _aud_plyobj;/*播放器对象*/
(*_aud_eng)->CreateAudioPlayer(_aud_eng,&_aud_plyobj,&sndsrc,&sndsnk, 3, ids, req);
/*这是创建声音播放器对象aud_plyobj的函数*/
前两个参数分别把声音引擎和播放器引擎的指针位置填上就可以了
我们真正需要填写的是后面4个参数:
sndsnk:声音输出池(data sink),也就是声音输出设备
3:功能清单数目,我们要让播放器支持3种功能
ids:功能清单,我们要让播放器支持的功能
wwW.Xtw.Com.cN系统网专业的PC、手机系统开发下载平台,HarmonyOS系统、安卓、OS、windows电脑重装系统在线下载安装,操作系统平台技术学习,攻略教程,技术交流。
免责声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。内容仅供参考使用,不准确地方联系删除处理!
联系邮箱:773537036@qq.com