AudioQueueBuffer中的哪个位置发生AudioQueueLevelMeterState?

问题描述:


我想做类似于节拍切片的事情。AudioQueueBuffer中的哪个位置发生AudioQueueLevelMeterState?

我可以设置一个定时器来定期获取AudioQueueLevelMeterState。

但是,似乎没有办法将AudioQueueLevelMeterState查询的时间与AudioQueueBuffer的内容关联起来?

例如,假设我的缓冲区长度为1秒。我运行一个计时器,每秒查询仪表状态60次。在0.5秒时,我获得了我想要的水平。因此,我想从获得水平的那一刻起取一大块音频缓冲区,即剩余的0.5秒。

任何想法?可以这么说的任何方式在缓冲区中这么做?

任何意见非常赞赏。

非常感谢,xj

最终得到这个排序。我放弃了AudioQueue作为录制音频的方式,而是选择了AudioUnit。 AudioQueue非常困难,最终我不得不认真地质疑,如果这是我想要做的正确API。在一些论坛上,人们曾经说过AudioUnits很难合作,但说实话,在AudioQueue完成之后,AudioUnit非常简单。

无论如何,回答我自己的问题。最后,我不得不解决测量和记录的同步问题,所以我放弃了定时器机制来对这些关卡进行采样。我仍然使用AudioQueue,但只是为了测量。在录音回调中,我从AudioQueue中获取kAudioQueueProperty_CurrentLevelMeter。记录回调接收帧数,这样我就可以完美地将帧位置与电表采样同步。

检查出苹果在这里说出示例项目。他们有类似的设置,你可能会破解。