AVAudioRecorder と AVAudioPlayer を使用するアプリがあります。録音と再生は問題ありませんが、1 分前後で録音が途切れることがあります。これは常に発生するわけではなく、発生した場合でも、録音しているように動作します (audioRecorderEncodeErrorDidOccur は呼び出されず、ユーザーが録音を停止すると audioRecorderDidFinishRecording が呼び出されます)。ただし、サウンド ファイル自体は 1 分未満で切り捨てられます。
これが私が使用しているエンコーディングです(soundFileURLはappsdocdir/somethingrandom.m4aです。ファイルとファイル名は適切に作成されます):
NSDictionary *recordSetting = [[NSMutableDictionary alloc] init];
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatAppleLossless] forKey:AVFormatIDKey];
[recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey];
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey];
[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[recordSetting setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];
NSError *error = nil;
self->audioRecorder = nil;
audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSetting
error:&error];
if (error)
{
NSLog(@"error: %@", [error localizedDescription]);
} else {
audioRecorder.delegate = self;
[audioRecorder prepareToRecord];
audioRecorder.meteringEnabled = YES;
}
デバイスログを見ると、次のように表示されるため、エンコードの問題だと思います。
5 月 10 日 10:17:23 t-iPhone mediaserverd[39]: 10:17:23.451 <0x282f000> AudioConverterNew が -50 を返しました
5 月 10 日 10:17:23 t-iPhone mediaserverd[39]: 10:17:23.453 <0x282f000> IO_ChangeIOFormat: エラー -50
5 月 10 日 10:17:23 t-iPhone mediaserverd[39]: 10:17:23.463 <0x282f000> Queue_ChangeIOFormat: 失敗しました (-50)
編集:soundFileURLとは何かと尋ねられました。上記で簡単に説明しましたが、実際のコードは次のとおりです。記録後、ファイルとファイル名はすべて正しく表示されます。
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"MMMMdyyyyA"];
NSString *recordDate = [formatter stringFromDate:[NSDate date]];
filename = [[NSString alloc] initWithFormat:@"%d-%@.m4a", idNumber, recordDate];
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSString *soundFilePath = [docsDir
stringByAppendingPathComponent:filename];
soundFileURL = [NSURL fileURLWithPath:soundFilePath];