현재 개발중인 앱에서 벽돌 벽에 다소 충돌했습니다. 응용 프로그램에서 로컬로 저장된 모든 오디오 파일을 표준 표보기로 나열하는보기를 입력 할 수 있습니다. 여기에서 파일을 클릭하여 재생하거나 아래의 녹음 버튼을 눌러 새 녹음을 만들면 나중에 자동으로 앱 샌드 박스에 저장됩니다.AVAudioRecorder를 사용하여 파일이 임의로 손상되었습니다 (때때로 파일을 재생할 수없는 경우도 있습니다) - iOS
이제는이 모든 것이 실제로 대부분 제대로 작동합니다. 나는 앉아서 녹음하고 다시 재생할 수 있습니다. 나는 앉아서 이것을 아무런 문제없이 45 번 정도 계속해서 시험 할 수있다. 갑자기 무작위로 나는 아주 이상한 문제에 부딪 칠 것이다. 문제는 레코더가 갑자기 레코딩을 시작한 지 상관없이 재생할 수없고 크기가 정확히 4096 바이트 인 손상된 파일 만 저장하기 시작한다는 것입니다. 이과를 중지 한 후
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];
}
을 그리고 :
// 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;
내가 이런 식으로 녹음을 시작합니다
나는이처럼 설정, 완전히 표준 방식으로 AVAudioRecorder를 사용
if (isRecording) {
[audioRecorder stop];
// Stop the timer
[timeCheck invalidate];
}
이 문제가 발생할 수있는 원인을 알 수 없습니다. 지금까지 거의 모든 것을 시도했습니다. 난 레코더 개체가 제대로 재활용되었는지 확인했다. 그래서 당신은 각각의 레코딩에 대한 새로운 인스턴스를 가지고있다. 그리고 이전의 참조가 할당 해제되는 등등, 간섭하는 객체와 아무런 관계가없는 것을 확인한다. 그러나 아무것도 그것을 해결하지 않습니다.
손상된 파일에 어떤 문제가 발생할 수 있는지에 대해 약간의 아이디어가있는 사람이 있습니까?
그래서 당신이 바로, 오류 변수가 audioRecorder가 초기화 된 후 전무 항상 말을? –
네, 맞습니다 :) 실제로 NSLog가 올바르게 초기화되었는지, 그리고 NSError가 nil인지 아닌지 확인하기 위해 아래에 몇 가지 빠른 오류 검사가 있습니다. – CodingBeagle
알았 으면 코드를 개선하고 문제가 분명 해지거나 사라져야합니다. isRecording var을 사용하는 대신 audioRecorder 속성 녹음을 사용할 수 있습니다. 오디오 세션 초기화를 볼 수 없지만 아마 생략했을 것입니다. 그러나 나는 또한 오류 처리를 개선하기 위해 제안하고 싶습니다, 아래의 답변을 참조로 사용할 수 있습니다 : http://stackoverflow.com/questions/1010343/how-do-i-record-audio-on-iphone-with -avaudiorecorder –