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");
}
後、コードのこれらの2行を追加します。クラッシュログはあなたに教えますか? –
このコードではメモリ管理以外のエラーは表示されません.NSTimerがターゲットを保持しているので、deallocメソッドの外でタイマーをリセットする必要があることを忘れないでください。より多くのコードやクラッシュログを投稿しようとする – Johnmph
NSTimerに問題はないと思います。上記のログ出力で確認できるように、 –