ファイルに録音せずにバックグラウンド オーディオ レベルを監視するアプリがあります。これを実現するために、/dev/null に書き込むというトリックを使用します。
このコードは、iOS 6 を搭載した iPhone 3GS、iOS 6 および iOS 7 を搭載した iPhone 4、iOS 7 および iPhone Retina (4 インチ 64 ビット) を搭載したシミュレーターで機能しました。
しかし、実際の iPhone 5s で試してみると、レコーダーは一瞬オーディオをキャプチャしたように見え、その後静かに停止します。
これはコードです:
// Inititalize the audio
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];
// peakLevelTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector: @selector(peakLevelTimerCallback:) userInfo: nil repeats: YES];
} else {
NSLog(@"There was an error setting up the recorder.");
NSLog([error description]);
}
何が起こっているのでしょうか?
誰かが回避策を提案できますか? 実際のファイルへの書き込みは機能しますが、オーディオを監視するためだけにデバイスのスペースをいっぱいにしたくありません。薄い空気に蒸発する小さなファイル バッファに書き込む方法はありますか? 独自の /dev/null を効果的に実装しますか?