2011-04-16 78 views
4

简单地说,我想基于从iPhone的麦克风输入流中读取分贝唇同步的东西,而我得到的值是不太我后。我正在使用AVAudioRecorder的peakPowerForChannel和averagePowerForChannel。 (我知道这是一个相当简单的口型同步技术,但质量不是主要问题)。混乱与AVAudioRecorder米

当分贝的数量增加时,仪表按我希望的那样反应(当声音更大时,声音更高,因此我可以将其映射到嘴巴的开放性),但当声音快速停止时,值慢慢地减少,就好像声音被拖下去一样(即一秒钟或两秒钟内消失) - 不是我想要的。

是否有配置AVAudioRecorder,使其不具备这种“淡出”效果的一种方式,或者我可以做,它给我以获得所需的输出值的东西吗?或者,我可以使用另一种工具吗?

谢谢!

回答

2

上AVAudioPlayer仪表弹道是你所期望的用于显示传统音频米什么:瞬时的幅度增加,但对于lowpassed下降。

对于您动画基于录制的音频人物,你必须得在原始音频和调整自己的计量响应中的会说话的卡尔式的东西。如果您正在为角色生动活动(即,当用户在设备的麦克风中讲话时),您可能需要使用AudioQueue或RemoteIO来获取音频数据。否则,如果您只是在录制完成后处理音频文件,则可以使用ExtAudioFile获取所需的数据。

+0

ahh ok!是的,我希望现场动画角色 - 我认为计量响应按预期行事..猜我希望我能让他们采取不同的行动=) 我假设调用AudioAueQueueProperty_CurrentLevelMeterDB AudioQueueGetProperty会产生相同的结果那么,所以我仍然必须写我自己的计量响应? – whut 2011-04-16 22:38:35

3

您可以将meteringEnabled属性重置为YES,像这样的:这就是你想要的水平恢复到环境的等级每次

yourRecorderName.meteringEnabled = YES 

呼叫。这需要大约0.02秒,在此期间,电平将短暂下降到0或-120 dB,然后重置为环境。

或者,你可以使用:

[yourRecorderName stop] 
[yourRecorderName record] 

这需要约0.05秒,但水平不会在等待时间下降到0。事实上,没有什么会发生,因为在这种情况下,它实际上需要记录器对象停留0.05秒,然后再次开始记录。