TinyALSA is a small library to interface with ALSA in the Linux kernel. The aims are: Provide a basic pcm and mixer API. If it's not absolutely needed, don't add it to the API. Avoid supporting complex and unnecessary operations, that could be dealt with at a higher level. Provide comprehensive documentation.
从这里看上去TinyAlsa就是为了方便用户而简化了很多复杂的音频驱动操作，为用户实现了很基础的API。据说tinyalsa是Google在Android 4.0之后推的基于alsa内核的用户层音频接口。在Android 4.0之前还一直是使用这alsa-lib接口。Google之所以推出tinyalsa，有网友认为有alsa使用了GPL许可证的缘故，也有可能是因为alsa-lib的库过于复杂繁琐大部分功能在Android平台没有实际实用意义却依然占用屈指可数的内存空间。不过目前看上去你也可以直接将tinyalsa安装在你的linux系统里，因为同时tinyalsa还为用户提供了几个简单的音频小工具，/tinyplay// tinycap/ tinymix/ tinypcminfo/ libtinyalsa-pcm/libtinyalsa-mixer，有兴趣可以看看源码他们是怎么工作的。用户可以利用Android里面tinyalsa提供的这些个小工具，控制管理手机的音频通路，利用工具进行查看、调试。
ASoC（ALSA System on Chip）是android为了更好的支持嵌入式CPU，在标准linux的ALSA驱动上建立了嵌入式音频架构，如果想搞懂这个，就得从linux的声卡和声卡驱动说起。不过第一手的资料可以从https://www.alsa-project.org/main/index.php/ASoC获得。
The overall project goal of the ALSA System on Chip (ASoC) layer is to provide better ALSA support for embedded system on chip procesors (e.g. pxa2xx, au1x00, iMX, etc) and portable audio codecs. Currently there is some support in the kernel for SoC audio
however it has some limitations: Currently, codec drivers are often tightly coupled to the underlying SoC cpu. This is not really ideal and leads to code duplication i.e. Linux now has 4 different wm8731 drivers for 4 different SoC platforms. There is no standard method to signal user initiated audio events. e.g. Headphone/Mic insertion, Headphone/Mic detection after an insertion event. These are quite common events on portable devices and often require machine specific code to re route audio, enable amps etc after such an event. Current drivers tend to power up the entire codec when playing (or recording) audio. This is fine for a PC, but tends to waste a lot of power on portable devices. There is also no support for saving power via changing codec oversampling rates, bias currents, etc. ASoC is currently still work in progress with most features implemented and support for the PXA2xx, AT91xx and S3C24xx SoCs now in the mainline kernel.
The ASoC layer is designed to address these issues and provide the following features: Codec independence. Allows reuse of codec drivers on other platforms and machines. Easy I2S/PCM audio interface setup between codec and SoC. Each SoC interface and codec registers it's audio interface capabilities with the core and are subsequently matched and configured when the application hw params are known. Dynamic Audio Power Management (DAPM). DAPM automatically sets the codec to it's minimum power state at all times. This includes powering up/down internal power blocks depending on the internal codec audio routing and any active streams. Pop and click reduction. Pops and clicks can be reduced by powering the codec up/down in the correct sequence (including using digital mute). ASoC signals the codec when to change power states. Machine specific controls: Allow machines to add controls to the sound card. e.g. volume control for speaker amp.
ASoC basically splits an embedded audio system into 3 components: Codec driver: The codec driver is platform independent and contains audio controls, audio interface capabilities, codec dapm definition and codec IO functions. Platform driver: The platform driver contains the audio dma engine and audio interface drivers (e.g. I2S, AC97, PCM) for that platform. Machine driver: The machine driver handles any machine specific controls and audio events. i.e. turning on an amp at start of playback.
从这三个部件的定义，codec驱动的目的要做到平台无关，实现audio控制、audio接口能力、codec 动态audio功率控制和codec IO四大功能。platform驱动包含audio dma控制和audio接口的驱动。machine驱动处理设备相关的控制和audio事件，如:在播放的时候打开放大器。