http://forum.unity3d.com/threads/118215-Blow-detection-(Using-iOS-Microphone

ю, что есть несколько потоков с одной и той же проблемой, но я не смог заставить их решение работать. Я закончил тем, что создал этот класс:

MicroController.h

#import Foundation/Foundation.h>

#import <AVFoundation/AVFoundation.h>
#import <CoreAudio/CoreAudioTypes.h>

#import <UIKit/UIKit.h>

@interface MicroController : UIView < UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, AVAudioSessionDelegate > {
    AVAudioRecorder *recorder;
    NSTimer *levelTimer;
    double lowPassResults;
}

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

MicroController.mm

#import "MicroController.h"


@implementation MicroController

- (id)init
{
    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;

        if ([recorder prepareToRecord] == YES){
            [recorder record];
        }else {
            int errorCode = CFSwapInt32HostToBig ([error code]); 
            NSLog(@"Error: %@ [%4.4s])" , [error localizedDescription], (char*)&errorCode); 

        }

        levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES];
    } else
        NSLog([error description]); 

    // input 'level' is in meter.mAveragePower

    return self;
}

- (void)levelTimerCallback:(NSTimer *)timer {
    [recorder updateMeters];

    const double ALPHA = 1.0; // 0.05f
    double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
    lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;  

    if (lowPassResults > 0.55)
        NSLog(@"Mic blow detected");


    [recorder updateMeters];
    NSLog(@"Average input: %f Peak input: %f", [recorder averagePowerForChannel:0], [recorder peakPowerForChannel:0]);

}
    - (void)viewDidLoad {
        [super viewDidLoad];

        NSLog(@"initiated");

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

    }


    - (void)dealloc {
        [levelTimer release];
        [recorder release];
        [super dealloc];
    }
    @end

Но я не могу заставить работать микрофон. Я получаю только этот вывод, и микрофон никогда не отвечает:

Средний ввод: -120.000000 Пиковый ввод: -120.000000

Есть идеи о том, что может быть не так?

Спасибо за вашу помощь !

Ответы на вопрос(1)

Ваш ответ на вопрос