android audio数据传输

来源:互联网 发布:ukulele调音器软件 编辑:程序博客网 时间:2024/06/14 01:45

http://www.fengfly.com/plus/view-192718-1.html

http://www.cnblogs.com/andriod-html5/archive/2012/04/11/2539537.html


playback track:

1. audio_track_cblk_t->mainbuffer(effect in buffer) via audio mixer: audio_track_cblk_t(track get next buffer)->downmix(downmixerbufferprovider getnextbuffer)->resampler(resample)->audiomixer(也是类似resample的处理)->dither&clamp->mainbuffer

2. mainbuffer(effect chain in buffer)->mixbuffer(effect chain out buffer) via effect: effect chain中有许多effect. aux effect的inbuffer是另外生成的, 它的outbuffer是effect chain in buffer, 其他effect的inbuffer是也是effect chain in buffer. 其它effect 的outbuffer除了最后一个之外也都是effect chain in buffer, 最后一个effect的outbuffer是effect chain out buffer.effect是在循环中被一个个的process的, 所以没有问题, 看playbackThread的threadLoop的effectChain[i]->process_l()。

3. mixbuffer(effect chain out buffer) to HAL stream in AudioFlinger::MixerThread::threadLoop.


linaro pandaboard用的是usb audio, driver在driver/sound下。hal层的audio在tinyhal下。 这个audio hal依赖与external下的tinyalsa, 这个tinyalsa调用linux audio driver(alsa).


客户端的AudioTrack的audioBuffer共享audio_track_cblk_t buffer。 通过AudioTrack的write函数(客户端主动写)和processAudioBuffer (AudioTrack拉)写数据到audio_track_cblk_t buffer.


 

 

record:

stream input->mRsmpInBuffer->mRsmpOutBuffer (if need resample)->audio_track_cblk_t.

 

linaro tinthal的audio中input read没有实现。

 

 

 

这里有一篇Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析:

http://www.blogjava.net/mixer-a/archive/2012/04/17/374989.html

有时间看一下。



http://www.xue5.com/Mobile/Mobile/664250.html


http://blog.csdn.net/azloong/article/details/7307506: omap4460/twl6040 audio ic.


原创粉丝点击