在我正在开发的应用程序中,我或多或少地打砖墙.在应用程序中,您可以输入在标准表视图中列出所有本地保存的音频文件的视图.从这里你可以点击他们来播放它们,或者点击下面的记录按钮进行新的录制,然后自动将其保存到应用程序沙盒中.
现在所有这一切实际上是完美的,大部分时间.我可以坐下来做录音并且播放他们.我可以坐下来测试这个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]; }
我不知道可能会导致这个问题发生.到目前为止,我已经尝试了几乎所有的事情.我已经检查以确保记录器对象被正确回收(所以您有一个新的实例为每个现在录制),并且旧引用被释放等等,以确保它与干扰对象无关,但没有什么解决.
有没有人有什么可能会导致文件损坏的问题?
解决方法
注意:由于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 userInfo] description]); return; }