问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何编写一个用于Android的音效驱动和控制程序

发布网友 发布时间:2022-04-19 18:21

我来回答

1个回答

热心网友 时间:2023-08-05 04:59

  本教程将逐步讲解从入门开始如何编写一个可用于Android 4.0的音效驱动和控制程序(Android 2.3上只是部分接口不同而已)。对于Android操作系统的架构等将不再叙述。
  软件需求(Windows环境):
  Windows操作系统、最新版Cygwin、Android NDK r8或更高、Eclipse、最新版Android SDK
  专业技术需求:
  掌握基本C/C++语法、掌握基本Java语法、基本Android UI设计、定点数学原理和算法、基本音频处理技术
  可选高级技术需求:
  IIR/FIR滤波器、FFT、Thumb/ARM汇编、NEON指令集
  
  1、什么是Android里的音效驱动,它是什么架构。
  从Android 2.3版开始,在系统多媒体框架里增加了一个SoundFX层,这个层就是“音效处理过程”。当多媒体系统运作时,框架允许将一个“标准”的SoundFX库载入对应媒体流的Mixer处。SoundFX库需要遵循OpenSLES架构,即所谓的标准就是实现一个基于OpenSLES架构的.so库。
  SoundFX可以被加载到任何一个音频流上,每个音频流使用会话ID作为标识符。注意:0表示系统总输出的音频流会话ID。一般情况下音效驱动就要加载到这个流上,才可以对系统内所有的声音做处理(包括音视频播放器、游戏、铃声等)。
  同样的,每一个SoundFX在加载时/后都有很多配置参数和控制权的优先级。而完成对SoundFX的加载就需要一个控制程序。控制程序一般由Java语言在Eclipse中实现,通俗的说控制程序就是一个Android的apk程序。SoundFX可以理解为Windows系统里的底层混合器,控制程序可以理解为Windows的控制面板,在控制面板上控制SoundFX的加载和启动,各个参数的设置等。当一个控制程序启动后,它首先要做的事情就是按照OpenSLES框架来通知系统加载一个SoundFX到一个媒体流,然后通过UI交互来启用/禁用该SoundFX,同时根据UI来控制SoundFX的参数,当退出时也需要通知系统卸载该SoundFX。
  
  2、从哪开始?
  因为Android规定SoundFX必须基于OpenSLES,所以最先要做的事情就是选择一个效果器的类型。这是为什么呢?到底是什么意思呢?OpenSLES规定一个效果器要有两个必须的条件,一个是该效果器的类型,一个是该效果器的唯一识别码。这两个东西在C/C++语言中是按照GUID结构体来存储的(GUID是什么?找度娘)。
  其中类型的GUID是OpenSLES定死的,音量(SL_IID_VOLUME)、采样率控制(SL_IID_PLAYBACKRATE)、均衡器(SL_IID_EQUALIZER)、预设混响(SL_IID_PRESETREVERB)、环境混响(SL_IID_ENVIRONMENTALREVERB)、3D定位(SL_IID_3DLOCATION)、多普勒效应(SL_IID_3DDOPPLER)、低音增强(SL_IID_BASSBOOST)、升降调(SL_IID_PITCH)、虚拟化(SL_IID_VIRTUALIZER)。这里没有你想要的?你想自定义?什么,你要做一个高音增强?无论做什么,都得在这里面选一个。为了简单一点,那就选虚拟化吧,虚拟化只有一个固定参数。(这里没看明白?那就把整个教程都看完,相信看到最后你会明白的)
  下一步是生成一个自己独一无二的GUID来给自己的SoundFX命名。生成的办法有很多,有现成软件也有网页。这里我生成的是{42C6510E-1811-4857-8CA5-C204A8A3B0D4}。
  以上提及的详细内容和编程指导请阅读Android NDK\platforms\android-14\arch-arm\usr\include\SLES\OpenSLES.h。(Android 4.0对应android
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
计算机网络是学啥的啊,就业前景如何啊? 美的电饭锅煮粥要多久 美的电饭锅煮粥需要多长时间 美的电饭锅精煮要多久 美的电饭锅精煮需要多长时间 美的电饭锅超快煮多久 美的电饭锅短时间内煮好一餐需要多长时间_百度... 美的电饭锅快煮要多久 快煮美的电饭锅要几分钟 美的电饭锅超快煮多久 马蜂为什么总在家里出现? 家里持续出现马蜂没有马蜂窝是怎么回事? 为什么我们对家人的态度不如对外人好? 为什么男人对外人好对老婆就差了呢? android中可以提取视频文件中的音频吗 android下视频文件从解码到播放需要哪几步,请简述 android如何通过隐式意图寻找手机中能打开图片、音... android程序播放音乐和改成放视频怎么弄,需要在代... android实现直播接入哪个音视频sdk好? 安卓开发怎么点击按钮就播放视频videoview Android项目数据库中用何种方式存储音频和视频更合... android 实现实时语音功能选择接入哪个音视频sdk好? 实时音视频android端和iOS端如何截取当前画面? Android开发音视频本地播放器,谁知道有好的 如何在Android中整合立体声音效处理库 安卓开发中如何实现视频音频的切换 android集成WebRTC,怎么实现音视频通话功能? Android 音视频该如何学习 android音视频开发怎么做? 苹果手机可以安装谷歌商店吗 苹果手机可以安装谷歌商店吗? 馄饨包好可以放在冷冻柜里吗? 包好的抄手放冰箱保鲜过夜要得不 不用冰箱保存抄手的方法 Android listview图文混排,有文字,图片,音频,... android videoview 播放视频如何控制音量 安卓怎么删除视频音轨 这是脱皮吗(巴西红耳龟)谢谢大家 进击的巨人的所有歌,包括片尾曲和插曲主题曲等等... 血红蛋白电泳hba偏高2.3,正常吗 红色胎记能彻底清除吗 《异界之红警纵横》最新txt全集下载 《龙涛》txt全集下载 跪求红警2原版(不会玩到一半就出现错误) 血红蛋白浓度hcb118是缺铁性贫血还是哪种贫血 佳能相机售后电话多少 桓台有没有佳能售后啊 附近佳能打印机维修点 请问佳能客服电话号码是多少? 广州佳能打印机售后维修点查询 佳能客服电话 如何? 佳能相机售后服务电话 沈阳佳能售后服务电话 佳能打印机售后服务电话是多少?