使用NSTimer计算两个浮点数之间的时差

时间:2014-05-29 21:04:35

标签: ios objective-c ios7 nstimer

我的浮点数根据麦克风输入而变化。

如果浮点值超过0.2并且它在0.3秒或更短时间内停留,我想做出决定。

那么如何使用NSTimer或任何其他方式来获取它?

这是我的代码:

- (void)viewDidLoad
{
[super viewDidLoad];
NSURL *url = [NSURL fileURLWithPath:@"dev/null"];
NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
                          [NSNumber numberWithFloat:44100.0],             AVSampleRateKey,
                          [NSNumber numberWithInt: kAudioFormatAppleLossless],  AVFormatIDKey,
                          [NSNumber numberWithInt:1],                     AVNumberOfChannelsKey,
                          [NSNumber numberWithInt: AVAudioQualityMax],AVEncoderAudioQualityKey,
                          nil];
NSError *error;
recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];
if (recorder) {
    [recorder prepareToRecord];
    recorder.meteringEnabled = YES;
    [recorder record];
    levelTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(levelTimerCallBack:) userInfo:nil repeats:YES];
}
else {
    NSLog(@"fail");
}
}


 - (void)levelTimerCallBack:(NSTimer *)timer {
[recorder updateMeters];

const double ALPHA = 0.05;
double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
if (lowPassResults > 0.2 && lowPassResults < 0.5) {
           // here to get the length of time that lowPassResults stays between 0.2 and 0.5
}
}

@end

1 个答案:

答案 0 :(得分:1)

你的问题不是很清楚。所有计时器都会为你做的是触发你的代码定期做一些事情。

您可以使用计时器以固定间隔触发音频电平采样。

这句话令人困惑:

  

如果浮点值超过0.2,我想做出决定   停留0.3秒或更短时间。

你的意思是你想知道水平是否超过.2并保持在&gt; .2适用于.3秒或更长时间?

计时器不是连续监听音量的好方法。您只会在采样间隔内看到等级。

为此,我认为您可能需要使用较低级别的音频处理,如AVRecorder或音频设备,您可以在很短的时间间隔内获得回调。