4

简而言之,我试图根据从 iPhone 的麦克风输入流中读取的分贝来对某些东西进行口型同步,而我得到的值并不是我想要的。我正在使用 AVAudioRecorder 的 peakPowerForChannel 和 averagePowerForChannel。(我知道这是一种相当简单的口型同步技术,但质量不是主要问题)。

当分贝数增加时,仪表会按照我的意愿做出反应(声音越大时值越高,所以我可以将其映射到嘴巴的张开度)但是当声音快速停止时,值会缓慢下降,因为尽管声音逐渐减弱(即在一两秒钟内逐渐消失)——这不是我想要的。

有没有办法配置 AVAudioRecorder 使其不具有这种“淡入淡出”效果,或者我可以用它给我的值做一些事情以获得所需的输出?或者,我可以使用其他工具吗?

谢谢!

4

2 回答 2

3

You can reset the meteringEnabled property to YES, like this:

yourRecorderName.meteringEnabled = YES

Call this every time you want the levels to reset to ambient levels. This takes about 0.02 seconds, and in that time the levels will briefly drop down to 0, or -120 dB before resetting to ambient.

Alternatively, you can use:

[yourRecorderName stop]
[yourRecorderName record]

This takes about 0.05 seconds, but the levels won't drop down to 0 in the wait time. In fact, nothing will happen because in this case, it actually takes the recorder object 0.05 seconds to stop and start recording again.

于 2013-06-27T20:19:05.460 回答
2

AVAudioPlayer 上的仪表弹道是您对显示传统音频仪表所期望的:瞬时增加幅度,但低通以减少幅度。

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

于 2011-04-16T22:04:54.987 回答