我正在使用AVAudioRecorder录制音频但我在按下按钮和开始录制之间遇到4秒的延迟。
这是我的设置代码:
NSDictionary * recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 16000.0],AVSampleRateKey, [NSNumber numberWithInt: kAudioFormatAppleIMA4],AVFormatIDKey, [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, [NSNumber numberWithInt: AVAudioQualityMax],AVEncoderAudioQualityKey,nil]; NSError *error = nil; audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; if (error) { NSLog(@"error: %@", [error localizedDescription]); } else { NSLog(@"prepare to record"); [audioRecorder prepareToRecord]; }
- (void)记录{
NSLog(@"Record"); //[audioRecorder prepareToRecord]; if (!audioRecorder.recording) { NSLog(@"Record 2"); [audioRecorder record]; NSLog(@"Record 3"); }
}
记录是按下按钮时调用的功能。我知道prepareToRecord是通过'record'隐式调用的,但我想知道它是否会影响延迟。它没有。
这是控制台日志:
2011-10-18 21:48:06.508 [2949:707] Record
2011-10-18 21:48:06.509 [2949:707] Record 2
2011-10-18 21:48:10.047 [2949:707] Record 3
开始录制前大约需要3.5秒。
这些设置对iPhone来说太过分了吗? (iPhone 4)。我初始化错了吗?
答案 0 :(得分:1)
我在iOS5 / iPhone4组合上看到了同样的问题。 iOS4和iPhone4S都很好。在旧硬件上使用新操作系统时似乎存在问题。我也尝试了很多设置组合。
初始化音频录制器时尝试设置AVAudioSession
类别:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
答案 1 :(得分:0)
我在iPod touch第4代(iOS4,iOS5和JailBreak - 我使用了更多设备)上遇到了同样的问题,并且在不同的设备上它运行不同,但我认为@Charles Chase是对的,它确实取决于设备的iOS你是测试。你的recordSettings字典没问题,代码看起来也正常,除了一件事,你需要添加:
audioRecorder.delegate = self;
在分配并初始化录音机之后
: audioRecorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
audioRecorder.delegate = self;
答案 2 :(得分:0)
我遇到了同样的问题。此外,由于我在播放和录制模式之间切换,这导致了长时间的延迟。但当我切换到播放和录制时,它拒绝在iPhone上使用扬声器,它只会使用耳机扬声器。
解决方案:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,
sizeof(audioRouteOverride), &audioRouteOverride);