需求 : APP 将麦克风采集到的声音(Audio Queue / Audio Unit) 通过公式转换成DB然后在界面中显示出来可实时检测DB变化。
流程:
配置Audio 初始化参数,必须使用Audio Queue 或 Audio Unit
采集声音。
在Audio Queue 或 Audio Unit 采集声音的回调中将声音数据转为DB。
将拿到每一帧声音的DB值传给主控制器的UI以反映声音的变化
最终的效果如下,黄色柱形会反映声音DB的变化:
音量柱的实现
GitHub地址(附代码) : 音量柱的实现
简书地址 : 音量柱的实现
博客地址 : 音量柱的实现
掘金地址 : 音量柱的实现
注意点
经过测试如果使用Audio Unit的方式采集声音, 由于设置的声音级别是audioUnit.componentSubType = kAudioUnitSubType_VoiceProcessingIO; 而采集到的声音数据从512开始变得不正常,数据格外大,非正常范围数据,所以我们从512开始不处理后面的数据。下文有具体说明
如果是采用Audio Queue计算的数据则不需要额外处理
具体实现
1.初始化Audio Queue / Audio Unit 采集声音,这里不做说明,如有问题可参考Audio Queue/ Audio Unit 采集声音
2.在采集声音回调中将声音数据转为声音的DB值。
以Audio Unit 为例,在回调中处理如下
#pragma mark - AudioUnit
st