Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.

saqibjaan

macrumors member
Original poster
Feb 1, 2012
48
1
Lahore
I am trying to run the following code on my device with no success. Although the code works perfectly on Simulator. I have been following this tutorial. It simply crash on device.

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

Code is:

Code:
@interface MicBlowViewController : UIViewController
{
    AVAudioRecorder *recorder;
    NSTimer *levelTimer;
    double lowPassResults;
}

- (void)levelTimerCallback:(NSTimer *)timer;

@end



- (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");
}
 
Last edited by a moderator:

saqibjaan

macrumors member
Original poster
Feb 1, 2012
48
1
Lahore
Microphone code doesn't run on iPhone device

I am using iPhone configuration utility to see NSLog statements. From there, I see the following lines. I am sharing the first 2 lines.


First few lines of log are:

unknown com.apple.launchd[1] <Warning>: (UIKitApplication:com.yourcompany.MicBlow[0xe0ef]) Job appears to have crashed: Bus error

unknown SpringBoard[27] <Warning>: Application 'MicBlow' exited abnormally with signal 10: Bus error
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.