Audio系统
文章平均质量分 78
我把葡萄酿成酒
吾日三省吾身
展开
-
DSD音频基本原理
DSD采用脉冲密度调制(Pulse-densitymodulation),对应于PCM的pulse-codemodulation。信号表现为delta-sigma编码。采样率为2.8224M,但是采样精度是1bit(2.8224M=44.1K*64)。脉冲密度调制中,bit1代表+A(某一个正数),bit0代表-A(某一个负数),于是数学上,就可以表示为:其中x[n]是振幅,而原创 2015-04-03 21:50:47 · 7739 阅读 · 0 评论 -
Android多媒体:音效链
Android有一个默认的音效实现机制,是用音效链来实现的,一个音效可以认为是一个数字滤波器,对PCM音频数据进行处理。每个音效处理逻辑被编译成一个so库,放在system/lib/soundfx下面。DownMixer这个音效比较常用,就是把多声道音频给降级成双声道的。DownMixer分为两种策略,一种是直接把左右声道之外的声道去掉,叫DOWNMIX_TYPE_ST原创 2015-07-18 13:15:20 · 1640 阅读 · 0 评论 -
Android HAL层hardware module的设计
Android为了屏蔽硬件的复杂性,设计了一个HAL层,HardwareAbstarct Layer,即硬件抽象层。HAL层位于驱动和framework之间,为各个硬件厂家提供的形形色色的驱动模块规定了统一的接口。在Android里面,这些接口是用c语言描述的,而在c语言中,接口都是用函数指针来描述的。所以我们在这些接口模块中看到大量函数指针,下面的驱动去实现这些接口,并挂载到这些接口模块上。原创 2015-07-18 09:34:50 · 1611 阅读 · 0 评论 -
MP3压缩算法
mp3也是有同步字的http://blog.csdn.net/sunnylgz/article/details/7615410MP3编码主要由3大功能模块组成,包括混合滤波器组(子带滤波器和MDCT),心理声学模型,量化编码(比特和比特因子分配和哈夫曼编码)。1. 混合滤波器组。这部分包括子带滤波器组和MDCT两部分。子带滤波器组编码完成样本信号从时域到频域的映射,并原创 2015-07-18 16:21:59 · 6471 阅读 · 0 评论 -
NuPlayer介绍
NuPlayer转载 2015-10-11 12:48:00 · 9316 阅读 · 0 评论 -
Android音量设置流程干货版
1. 音量级数定义在AudioService.java中定义了最大音量MAX_STREAM_VOLUME,手机的设置property可以覆盖它。2. 音量初始化initStreamVolume传入AudioPolicyManagerBase里的StreamDescriptor mStreams[AudioSystem::NUM_STREAM_TYPES];3.原创 2015-04-03 22:04:20 · 3554 阅读 · 0 评论 -
Android Audio System 架构初探:概述
1 Audio系统1.1 一些基本概念采样率:用一堆离散的数字表示真实世界里连续的声音信号,需要对其进行采样,理论基础是奈奎斯特采样定理。采样率的单位是赫兹,就是说一秒有多少个采样,一般数字音频的采样率通常为8k~48k,一些hifi系统的采样率可以达到192k。奈奎斯特采样定理:当对被采样的模拟信号进行还原时,其最高频率只有采样频率的一半。位深:一个系统用原创 2016-01-23 09:47:54 · 5085 阅读 · 0 评论 -
Android Audio System 架构初探:Java层
1 Java层1.1 AudioManagerAudioManager是Framework向App提供的接口,可以认为是audioService的一个Wrapper类。它内部的功能实现函数的一般描述如下: public void setStreamMute(int streamType,boolean state){ IAudioServ原创 2016-01-23 09:52:09 · 4329 阅读 · 0 评论 -
Android Audio System 架构初探:库层(一)
1 库层(Native层)1.1 MediaPlayer和MediaPlayerService 图表18MediaPlayer和MediaPlayerService所以,MediaPlayerService和MediaPlayer之间是互为Bp,Bn的关系。MediaPlayer调用一个函数如getDuration实际上调的是MediaPlayerService原创 2016-01-23 10:14:56 · 3191 阅读 · 0 评论 -
Android流媒体的实现
在mps的setDataSource中,根据url判断应该生成那种dataSource,然后获取默认的player,即nuplayer。进入NuPlayerDriver的setDataSource,再进入void NuPlayer::setDataSourceAsync(const sp &source) {#ifdef MTK_AOSP_ENHANCEMENT mIsStrea原创 2016-08-12 13:54:35 · 3944 阅读 · 1 评论 -
Android多媒体:AudioTrack
AudioTrack是和PlaybackThread中创建的Track一一对应的,Track是Bn,AudioTrack是Bp。音乐APP通过操作AudioTrack来进行音乐数据的传输。具体过程如下:应用initAudioTrack ,new一个AudioTrack, 注意里面的flag(比如AUDIO_OUTPUT_FLAG_FAST,那说明这个output是需要FastMixer原创 2015-07-18 09:10:44 · 1426 阅读 · 0 评论 -
Android多媒体:AudioMixer
AudioMixer每一个MixerThread在创建的时候都会创建一个AudioMixer赋值给mAudioMixer,也会创建一个mOutputSink。一个AudioMixer有一个mState,一个mState有最多32个track_t。而track_t是由track赋值的,在这里:在MixerThread的prepareTracks_l,对每一个mActiveTracks里的原创 2015-07-18 09:04:41 · 3888 阅读 · 1 评论 -
Android多媒体:OMX
OMXCodec是一个codec框架,实现者可以在这个框架中实现各种解码方式,包括硬件解码。OMXMaster 负责OMX中编解码器插件管理,软件解码和硬件解码都是使用OMX标准,挂载plugins的方式来进行管理。软解通过 addPlugin(new SoftOMXPlugin);会把这些编解码器的名字都放在mPluginByComponentName中。硬件编解码是通过 addVendorPl原创 2015-07-18 11:23:03 · 2724 阅读 · 1 评论 -
RTP/RTCP流媒体同步机制
含义RTP的同步包含两个含义,一个是RTP流自己的同步,一个是多个RTP流的同步。举例来说,一个音乐的正常播放需要流自己的同步,而音视频的同步播放需要多个RTP流的同步(注意,音视频一般是分开RTP流传的)。RTP的同步靠这几个东西来完成:1. RTP帧头的以下三个域 sequence number, timestamp,SSRC2. RTCP SR报文的以下三个域:RTP tim原创 2015-05-17 10:50:43 · 2643 阅读 · 0 评论 -
耳机插拔流程
1.1 耳机在Android系统中,有线耳机分两种,一种带mic,一种不带mic,带mic的耳机被称为Headset,不带mic的耳机被称为HeadPhone。在audio.h中,有以下几个设备来表示耳机: AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4,AUDIO_DEVICE_OUT_WIRED_HEADPHO原创 2015-05-09 18:21:51 · 3267 阅读 · 0 评论 -
数字音频Mixer算法
1.1 问题提出Mix的意思是混音,无论在自然界,还是在音频处理领域这都是非常普遍的现象。自然界里你能同时听到鸟鸣和水声,这是因为鸟鸣和水声的波形在空气中形成了叠加,耳朵听到后能区分鸟鸣和水声这两种波形。在数字音频领域也是一样,比如你也可以一边打CS一边听歌,这是因为计算机把两个声音波形做了叠加。但是不同的是,计算机中的叠加,很容易造成越界。比如int plus1(int原创 2015-05-09 10:41:45 · 4397 阅读 · 1 评论 -
手机回声消除原理
手机回声有两种,一种是声学回声(Acoustic Echo),一种是线路回声(Line Echo)。一般我们需要消除的是声学回声。关于回声消除的两个基本认识:1. 回声是开免提或外接音箱时才会产生的,带耳机不会。2. A给B打电话,若B的电话没有做回声消除,A会听到自己的回声。也就是说,B的电话的回声消除只能影响到A。那具体应该怎么做回声消除呢?基本原理比较简单,如图所原创 2015-01-02 12:00:15 · 6710 阅读 · 0 评论 -
[Bug Fix]Messy Audio语音电话不清晰问题
早在第一家公司的时候,有一个印象深刻的Bug,很值得思考。这个Bug充分说明了有缺点的系统架构是怎么在不经意间影响了产品的。DSP有一个简单的操作系统,可以运行一些task,这些task有一定的优先级,优先级低的task可以被优先级高的中断。对MCU来说,DSP就是一个外设,它周期性的给MCU发中断,MCU的中断处理程序会在DSP和MCU之间的DPRAM上读取数据。为了同步DSP和MC原创 2015-01-02 12:00:06 · 616 阅读 · 0 评论 -
关于蓝牙
蓝牙大概能支持20m距离,我试过带着蓝牙耳机在办公室走动,大概距离接近20m时,音乐出现断续,超过20m左右时,完全断掉。蓝牙使用2.4—2.485GHz的ISM波段的UHF无线电波。同样,Wi-Fi(802.11b/g/n) 也使用2.4 GHz 的波段,因此BT和WiFi可以使用一根天线来发送和接收。蓝牙有很多profile,比如电话对应HFP profile,音乐对应A2DP Pro原创 2015-08-09 09:55:00 · 600 阅读 · 0 评论 -
APM,AF和AS的设计思想
AudioPolicy,AudioFlinger和AudioSystem是如何互相作用的?AudioPolicy里面又有AudioPolicyService,AudioPolicyClient,AudioPolicyManager,分别取首字母简写,可看到他们的关系如下:静态:动态APS,AF分别活在两个线程中某些时候APS也可以调用AF,跨原创 2015-08-23 20:26:31 · 757 阅读 · 0 评论 -
关于数字音频的采样精度
音频的一个采样用几个bit来表示,叫采样精度,又叫位深(bit-depth)。我们常用的位深是16bit,也就是16bit表达一个采样,这样,最高信噪比可以表示为20log(2^16)=96db,而用24bit位深的话,最高信噪比可以到达20log(2^24)=144db。专业的数字音频处理软件内部其实都是用float型来表示一个采样,也就是32bit,那么最高信噪比可以达到193db,这个信原创 2015-08-09 09:31:04 · 8426 阅读 · 0 评论 -
Android多媒体:AudioTrack和AudioFlinger的交互
AudioTrack和AudioFlinger之间通过共享内存进行数据交互。共享内存可以从上层传下来,也能在TrackBase用共享内存创建。传下来的是static的。创建代码如下:if (sharedBuffer == 0) {mAudioTrackServerProxy = newAudioTrackServerProxy(mCblk, mBuffer, frameCount, m原创 2015-05-09 15:36:40 · 2901 阅读 · 0 评论 -
Android多媒体:AudioSystem,AudioService和AudioManager
AudioSystem和AudioFlinger以及AudioPolicyService的双向通信机制AudioSystem是Audio子系统面向framework的接口,这里面有很多一竿子戳到底的函数。同样,Audio子系统内部也往往使用AudioSystem进行通信,比如AF和APM。SystemServer添加AudioService到SM中,在AudioService的构造原创 2015-07-18 13:07:01 · 6552 阅读 · 0 评论 -
AudioFocus
Audio Focus原创 2016-08-24 20:36:14 · 670 阅读 · 0 评论