Я нахожусь в процессе разработки приложения, которое позволяет детям выполнять дыхательные упражнения как часть их физиотерапевтического процесса, в настоящее время я все еще пытаюсь убедиться, что микрофон улавливает дующий звук. Я получаю следующее сообщение в NSLog
2017-04-22 17:01:52.292319+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.322377+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.352402+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.382331+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.412318+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.442277+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.472358+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.502275+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.532323+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.562265+0100 microphone[2251:596932] Mic blow detected
2017-04-22 17:01:52.592255+0100 microphone[2251:596932] Mic blow detected
Вот код, который у меня есть на данный момент:
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
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)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.000005)
NSLog(@"Mic blow detected");
}
@end
У меня изначально было «если (lowPassResults < 0.95) «но никакого удара по микрофону не было обнаружено. Проблема, с которой я столкнулся сейчас, заключается в том, что он обнаруживает удар по микрофону, когда никто не дует в микрофон. Я думаю, что значение (0,00005) все еще слишком высоко, но не могу найти подходящее значение Кто-нибудь может посоветовать, что именно мне нужно здесь настроить?
заранее спасибо
Задача ещё не решена.
Других решений пока нет …