2012-02-08 7 views
0

私のデバイス上で次のコードを成功させようとしています。コードはSimulatorで完全に機能しますが。私はこのチュートリアルに従っています。それは単にデバイス上でクラッシュします。iPhoneデバイスでマイクコードが実行されない

http://mobileorchard.com/tutorial-detecting-when-a-user-blows-into-the-mic/

コードは次のとおりです。

@interface MicBlowViewController : UIViewController { 
    AVAudioRecorder *recorder; 
    NSTimer *levelTimer; 
    double lowPassResults; 
} 
- (void)levelTimerCallback:(NSTimer *)timer; 
@end 

.mファイル:

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

- (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.95) 
     NSLog(@"Mic blow detected"); 
} 
+1

後、コードのこれらの2行を追加します。クラッシュログはあなたに教えますか? –

+0

このコードではメモリ管理以外のエラーは表示されません.NSTimerがターゲットを保持しているので、deallocメソッドの外でタイマーをリセットする必要があることを忘れないでください。より多くのコードやクラッシュログを投稿しようとする – Johnmph

+0

NSTimerに問題はないと思います。上記のログ出力で確認できるように、 –

答えて

1

何[レコーダーprepareToRecord]

[recorder prepareToRecord]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 
    [[AVAudioSession sharedInstance] setActive:YES error:nil];