2010-05-10 4 views
1

У меня возникла странная проблема с AVAudioRecorder. В моем приложении мне нужно записать аудио и воспроизвести его. Я создаю свой плеер как:Проблема с использованием AVAudioRecorder

if(recorder) 
{ 
if(recorder.recording) 
[recorder stop]; 
[recorder release]; 
recorder = nil; 
} 

NSString * filePath = [NSHomeDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"Documents/%@.caf",songTitle]]; 
     NSDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys: 
             [NSNumber numberWithFloat: 44100.0],AVSampleRateKey, 
             [NSNumber numberWithInt: kAudioFormatAppleIMA4],AVFormatIDKey, 
             [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, 
             [NSNumber numberWithInt: AVAudioQualityMax],AVEncoderAudioQualityKey,nil]; 
     recorder = [[AVAudioRecorder alloc] initWithURL: [NSURL fileURLWithPath:filePath] settings: recordSettings error: nil]; 
     recorder.delegate = self; 
if ([recorder prepareToRecord] == YES){ 
       [recorder record]; 

Я выпускаю и создаю плеер каждый раз, когда нажимаю кнопку записи. Но проблема в том, что AVAudiorecorder занимает некоторое время, прежде чем начинать запись, и поэтому, если я нажимаю кнопку записи несколько раз непрерывно, мое приложение замерзает в течение некоторого времени. Тот же код работает нормально, без каких-либо проблем, когда наушники подключены к устройству ... нет задержки при записи, и приложение не замерзает, даже если я нажимаю кнопку записи несколько раз.

Будет полезно, если кто-нибудь поможет мне исправить эту проблему. Любая помощь в этом отношении будет высоко оценена.

Thanx заранее.

ответ

2

Получил решение. Я только что добавил код

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; 
     } 

и сейчас он работает нормально. Однако я хочу знать, какая разница делает этот кусок кода? И почему это было так, что мое приложение отлично работало с подключенными наушниками, но замораживалось без них.?

0

Да,

[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 

является решением. Он позволяет записывать и воспроизводить аудио.

Об ошибке в наушниках, что это, вероятно, связано со свойством

[[AVAudioSession sharedInstance] inputIsAvailable] 
Смежные вопросы