android audio 音频流的理解记录

主要是AudioRecord是如何采集到声卡声音的
   简单描述一下流程,audioRecord java层新建实例,同时传递参数,
   采集源与声音的参数,此时会调用jni的native_setup函数建立audioRecord Cpp层的实例,同时传递回调函数指针参数。
   进入audioRecord的cpp层的set函数,set函数根据传递的参数,得到一个 input的句柄,会调用AudioFlinger的openInput函数,
从传递过来的句柄中获取一个输入流,也就是录音的数据流,这里是硬件上的音频流,采集的是PCM。也就是音频的前端处理。
如果这个前面描述的流程,在处理时,满足audiosystem\audioPolicy一些设备管理及音频策略,则可以进入下一个阶段,
建立一个录音的线程reccordThread,同时根据binder机制,分配内存共享块,定义audio_track_cblk_t.这里比较感兴趣的是,
CPP回调了java中的listener函数,通过javaAudioRecordFields.postNativeEventInJava回调,如此audio的录音条件环境准备完毕,
待java中发起或者中断录音工作,主要理解Binder的通讯.cPP回调java,java调用cpp,比如
录音时source的传递,audioRecord指定source后,在system/audio.h中有一个枚举,看是否在这相枚举的定义范围内。
这是从应用的场景来看这个问题,从逻辑上看,cpp及HAL都没有此定义。所以,应用场景要正确,才能继续设计场景及硬件场景

继续:soure指定后,audioRecord.java层,调用audioattribute进行场景判断,条件符合,进入audioFlinger的openInput函数。
也可能是openInput_L函数,没有打log。具体log还需要跟踪确定。openInput_L这里会将  findSuitableHwDev_l -》open_input_stream 进

入HAL层。 in->usecase = USECASE_AUDIO_RECORD_AFE_PROXY; in_read->pcm_read  start_input_stream->pcm_open  取得数据流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值