在我正在开发的应用程序中,我或多或少地碰到了一堵砖墙。在应用程序中,您可以输入一个视图,该视图在标准表视图中列出所有本地保存的音频文件。从这里你可以点击它们来播放它们,或点击下面的录音按钮进行新的录音,然后自动保存到应用程序沙箱。
现在所有这些在大多数情况下都能很好地完成。我可以坐下来录制并播放它们。我可以坐下来测试一下这个45左右,没有任何问题。然后突然在随机的时候我会遇到一个非常奇怪的问题。问题在于,无论录制多长时间,录像机都会突然开始保存,但无法播放的文件无法播放,大小正好是4096字节。
我以完全标准的方式使用AVAudioRecorder,设置如下:
// Specific settings for the audio recording
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:8],
AVEncoderBitRateKey,
[NSNumber numberWithInt: 2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:22000.0],
AVSampleRateKey,
nil];
NSError *error = nil;
audioRecorder = [[AVAudioRecorder alloc]
initWithURL:contentURL
settings:recordSettings
error:&error];
audioRecorder.delegate = self;
我开始这样的录音:
if (!isRecording) {
isRecording = YES;
[audioRecorder record];
// Start the timer
recordTiming = [NSDate date];
timeCheck = [NSTimer
scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(timeCheck)
userInfo:nil
repeats:YES];
}
然后用这个来阻止它:
if (isRecording) {
[audioRecorder stop];
// Stop the timer
[timeCheck invalidate];
}
我不知道是什么原因导致这个问题发生。到目前为止,我几乎尝试过所有事情。我检查确保记录器对象被正确回收(所以你现在每个记录都有一个新的实例),并且旧的引用被释放等等,以确保它与干扰对象无关,但没有解决它。
有没有人对可能导致文件损坏的问题有一点了解?
答案 0 :(得分:6)
注意:由于OP暂时无效,我想这个问题应该回答公众未来的参考,因此我发布了这个答案。
在开始录制之前必须获得AVAudioSession
。
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}
err = nil;
[audioSession setActive:YES error:&err];
if(err){
NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
return;
}