アプリがバックグラウンドで動作している間 (バックグラウンド モードにオーディオを追加)、録音を行っています。無期限に録音され、バックグラウンドでもアプリはアクティブなままです。
アプリをバックグラウンドでアクティブなままにし、30 分ごとに 30 秒間のサウンド クリップを録音できるようにしたいと考えています。
のメソッドNSTimer
と組み合わせて使用しようとしましたが、起動する前にアプリが強制終了されます。何か案は?AVAudioRecorder
recordForDuration:
NSTimer
次のコードはバックグラウンドで動作し、5 秒ごとに 5 秒間記録しますが、scheduledTimerWithTimeInterval を 1 分に増やすと動作しません。
- (void)viewDidLoad
{
[super viewDidLoad];
// retrieve avaudiosession instance
_session = [ AVAudioSession sharedInstance];
// set category
NSError *errRet;
[_session setCategory:AVAudioSessionCategoryPlayAndRecord error:&errRet];
[_session setActive:YES error:&errRet];
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
NSString *soundFilePath = [docsDir
stringByAppendingPathComponent:@"sound.caf"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSDictionary *recordSettings = [NSDictionary
dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],
AVEncoderBitRateKey,
[NSNumber numberWithInt: 2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],
AVSampleRateKey,
nil];
NSError *error = nil;
_audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
if (error)
{
NSLog(@"error: %@", [error localizedDescription]);
} else {
[self recordAudio];
NSTimer* timer;
timer=[NSTimer scheduledTimerWithTimeInterval: 10.0 target:self selector:@selector(recordAudio) userInfo:nil repeats: YES];
NSLog(@"timer fired");
}
}
- (IBAction)recordAudio{
if (!_audioRecorder.recording)
{
NSError *errRet;
[_session setCategory:AVAudioSessionCategoryRecord error:&errRet];
[_session setActive:YES error:&errRet];
//_play.enabled = NO;
[_audioRecorder recordForDuration:5.0];
NSLog(@"Finished Recording");
}
}