【发布时间】:2014-05-29 21:04:35
【问题描述】:
我有一个根据麦克风输入而变化的浮点数。
如果浮点值超过 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
【问题讨论】:
-
我不知道如何使用麦克风,但它似乎应该有一些持续的监控功能来为你提供值,而不是你必须不断地轮询这些值。检查其 API 以查看您是否可以实时注册连续的值流。如果是这样,那么您想做的事情将很容易
标签: ios objective-c ios7 nstimer