摘要:
在录音的过程中发现在最前面的1s中总是会有“噗”的一声的噪音。一直在跟踪查找,发现是Android源码中有一处溢出造成的。stagefright中的AudioSource的void rampVolume(int32_t startFrame, int32_t rampDurationFrames,uint8_t *data, size_t bytes);函数(raise the volume from mute to theactual level linearly)。在AudioSource的read()函数将从AudioRecord读入的数据经过计算 int32_t autoRampD.. 阅读全文
摘要:
DataSource是将媒体源数据读取然后输送到分离器分析的环节。DataSource是一个基类,根据各种数据源的不同,它有着很多的派生类。直接由DataSource派生的有:FileSource,DataUriSource,LiveDataSource,MPEG4DataSource,HTTPBase,NuCachedSource2,ThrottledSource。其中NuHTTPDataSource,ChromiumHTTPDataSource继承于HTTPBase。我们根据数据源的来源分为本地媒体和流媒体两种。 本地媒体数据源: 本地媒体有两种读入的方式,一种是直接的路径读入, ... 阅读全文
摘要:
多媒体框架stagefright是android2.3后替代opencore的。整个框架非常庞大,这里将它分为编码器、解码器、合成器、分离器、PCM数据和YUV数据输入、数据源(DataSource)、渲染器、AudioPlayer等八个部分。接下来一系列博文会把stagefright分解为这八个部分来一一介绍,最后通过详细介绍Audio和Video的播放和录制过程来分析它们之间是如何关联的。 图1-1 stagefright数据流过程图 上图简单示意了播放和录制时,媒体数据流在stagefright框架的各部分的流转。 DataSource:从本地媒体文件或者流媒体读取数据,给分离... 阅读全文
摘要:
摘要:在Android4.1中,MediaPlayer实现两个完全独立的MediaPlayer类上执行无缝播放,这里介绍一下Android是如何实现无缝播放的。 一、使用方法 在第一个MediaPlayer类执行结束前的任何时间调用setNextMediaPlayer(MediaPlayer next)这个方法,该方法的参数是第二个文件创建的MediaPlayer实例。然后Android系统将会在您第一个停止的时候紧接着播放第二个文件。 二、实现 MediaPlayer类中的setNextMediaPlayer方法一路追踪JNI层的Android_Media_MediaPlayer... 阅读全文
摘要:
摘要:Android提供了一套音效处理的库,包括有BassBoost重低音,Equalizer均衡器,Virtualizer虚拟器,PresetReverb预置混响,EnvirenmentReverb环境音混响,Visaulizer可视化,downmix,preprocess(AGC(增益) AEC(回声消除) NS(噪声抑制))等。本文介绍音效库是如何从底层获取数据和为上层提供处理好的数据。 一、如何加载库和创建音效 以上这些音效分别封装在libbundlewrapper.so,libreverbwrapper.so,libvisualizer.so,libdownmix.so,li... 阅读全文
摘要:
摘要:本文介绍了android音量的控制曲线的计算方法。 由于人耳对声音的听感具指数曲线型,也就是对小音量时比较敏感,随着声音的加大其听感随之变的不敏感,其变化近似指数函数曲线的形式。为了使听感变的近似直线的变化,人们在实践中就采用了音量变化近似对数式曲线型的电位器来实现这个目的。对比法产生音量控制曲线与最终扬声器输出的声压有关,当然您也可以根据扬声器的输出功率来进行比对,但功率终究不如电压来的方便。音量调节框的UI滑动条的刻度是线性的,这样就给我们生成音量控制曲线打下了很好的对比基础。下面我们就来通过一个音量调节的场景来分析Android是如何控制音量的。 首先,我们按音量调节键使得... 阅读全文
摘要:
摘要:Audio系统负责Android中的PCM数据的录制输入流和播放输出流的传输和控制,以及音频设备的管理和设置。这里主要介绍播放和录制环节在各个层次的内容,整个结构层次分明,包括了java接口层,JNI层,本地框架层,audio服务层,硬件抽象层等5层。它的结构图如下 图1-1 Audio系统结构 一、java接口层 AudioManager:音频管理对外的接口,提供了音量和ringtone模式的管理,由getSystemService(Context.AUDIO_SER... 阅读全文