关于audio相关的名称解释如下:
-
mic( 麦克风):声音输入源;
-
speaker(听筒)loadspeaker(喇叭) handset(耳机):声音输出源;
-
音频解码器(eg:ALC5651):音频解码器分为纯音频解码器和AV影音解码器两类,主要作用分别是把读取的数字音频信息转换成模拟音频信号输出,是把录音时经过编码的多声道音频信息作解码还原
-
音频功放IC(eg :AW8733): 功放俗称“扩音机”他的作用就是把来自音源或前级放大器的弱信号放大,推动音箱防声。一套良好的音响系统功放的作用功不可没。
从上面第4条可知:用功放是为了驱动喇叭;
在mtk平台手机开发时,软件上常会配置AB类或D类或者K类功放选项,这说明手机外设配置的是对应的AB类或者D类或者K类功放的喇叭;
一般AB 类功放是1W;D类功放k类功放是2W;当对声音有比较高的需求时会选用输出功率大的功放;
a)喇叭由于电路有大电阻原因(8欧或者16欧),需要搭载功放才能启动;
b)听筒或耳机需要的功率很小(一般都0点几w),无需搭载功放,从音频解码器里面出来的音频信号,直接接到对应的听筒或耳机就有声音了。
mtk平台 声音从mic到speaker loadspeaker handset间的关系就可以用下面的话解释:
mtk平台的音频解码器是集成在cpu里面的,音频功放集成在pmu里面的(eg:pmic mt6392),所以cpu里面出来的耳机信号或者听筒信号可以直接接到耳机或者听筒上;喇叭信号则要先接到pmu里面放大后才能接到喇叭上!
喇叭接收声音顺序:
天线接收声音–>rf PA–>中频—>cpu—>pmic—>spk;
mic发出声音顺序:
mic—>pmic—>cpu---->中频---->rf PA---->天线发送声音;
录音的顺序:
mic---->cpu---->X地方保存录音---->pmic---->spk;
常用数据结构
/system/media/audio/include/system/audio.h
定义了常用的stream类型,例如3就是音乐的stream。
stream 举例: 在设置里面调节铃声是 stream3;微信来电的声音是stream 2;接通微信电话是stream 0;播放微信语音是 stream 3;
定义了输出设备id,例如0x1 对应的是听筒 0x4对应设备就是有线耳机,0x2是speaker
实践:
手机播放FM,调节音量+
volumeDevice=2 : speaker
volumeIndex=9 : 音量
volumeStreamType=3 : Music; 拨号的话是8;播放铃声的话是2;
https://www.jianshu.com/p/6983c5442c69
loopback 测试时的log,从主MIC输入,到有线耳机输出
AudioALSALoopbackController: +open(), output_devices = 0x8, input_device = 0x80000004