每天一点点音视频_AudioRecord

AudioRecord 可以说简单的不能再简单了, 作用是从音频输入硬件读取音频数据, 而这个数据就是之前说的 PCM 编码的音频数据。

这个类的使用:

  1. 创建
  2. 开始录制
  3. 读取数据
  4. 停止录制

这里面唯一比较复杂的就是创建的时候, 因为之前我们说道,在编码成PCM信号的时候,有三个参数,采样率,采样位宽,声道。这三个参数决定了1s内数据的大小。

在创建的时候, AudioRecord 还需要一个 Buffer, 而这 buffer 的大小就是由上面的的参数决定的。

为什么需要一个 Buffer?(忘记启动问题模式了)

因为声音数据是不断采集的,而我们的读取数据的操作可能会间隔一定的时间,假如我们10s读取一次,缓存就应该缓存10s的数据,但是这就导致我们播放时声音延迟了10s,这样说来如果要实现低延迟,甚至是实时的耳反效果,就需要Buffer尽量小,甚至没有, 但是,因为采样率是很高的,一帧的时间很短的,如果我们1帧1帧的传递,花在传递上的时间也会很多,导致达不到希望的采样率。

所以, AuidoRecord 提供了一个获取最小Buffer的大小的方法,由底层决定它。(之前想实现一个耳反,做不到,总会有延迟,据说安卓上用ndk实现会好一些,改天试试)

还有什么高级点的吗

我发现一个规律, 很多时候,一个类的初始化比较复杂,而操作比较简单,这其实也好厉害,做大量的准备,采取小的行动,产生大的效果。

依赖注入的方式就很能体现这这种方式, 一个类的时候,将需要的某些功能的实现类在构造的时候传入, 之后执行某个行为,就会对各种类做各种操作。(.. 跑题了)

明天: 每天一点点音视频_AudioRecord_补充