2012-11-08 9 views
5

私はこのコードを使って爆発を検出しています。マイクから吹き抜けを検出するにはどうすればいいですか?

しかし、私は打撃を得ることができません。私は声を出した。

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.3 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES]; 
} else 
    NSLog(@"error %@",[error description]); 

しかし、声が吹きません。

+0

ええ、それは吹いていません。 –

+0

(あなたがしているのは、レコーダーを始めるところです。購入しないで、何かを見つけてください。) –

+0

最後に私は1人1人に感謝しています。 – jpd

答えて

3

ローパスの結果で遊ぶ必要があります。これを試してみてください:

- (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; 
    //NSLog(@"%f", lowPassResults); 
    if (lowPassResults > 0.55) 
     NSLog(@"Mic blow detected"); 
} 
関連する問題