2012-11-08 48 views
5

Tôi đang sử dụng mã này để phát hiện lỗi.làm thế nào để phát hiện thổi từ mic không bằng giọng nói trong iphone?

nhưng tôi không thể nhận được đòn. tôi có giọng.

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]); 

Nhưng giọng nói không bị thổi.

+0

Vâng, nó thổi, phải không. (Có thể đi tốt hơn một chút nếu bạn giải thích ý bạn là gì.) –

+0

(Và tất cả những gì bạn đang làm ở đó là bắt đầu một máy ghi âm. Điều đó sẽ không, tự mua, phát hiện bất cứ điều gì.) –

+0

cuối cùng tôi đã nhận nó nhờ vào mọi người – jpd

Trả lời

3

Bạn phải chơi với kết quả vượt qua thấp. Hãy thử điều này:

- (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"); 
} 
Các vấn đề liên quan