2013-06-05 1 views
1

Я продолжаю этот вопрос от my old post. Я читал много контента для записи звука и воспроизведения с использованием очередей аудио, звуковых буферов, к сожалению, из-за меньшего времени, которое я скомпрометировал, и планировал использовать работу фреймворка AVFondation для записи и воспроизведения звука рекордера.Различные AVAudioSession, необходимые для записи и воспроизведения в IOS

Моя идея: создания одного экземпляра AVRecorder и запись через микро-телефон, так же аудио планирования, чтобы играть через Iphone громкоговорителя с помощью AVAudioPlayer (я буду использовать несколько экземпляров)

Пожалуйста обнажить мои тонн линии для записи и воспроизведения

-(id)startAudioRecorder:(NSUInteger)viewTag { 
    NSError *setCategoryErr = nil; 
    NSError *activationErr = nil; 
    //Set the general audio session category 
    [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error: &setCategoryErr]; 
    //Make the default sound route for the session be to use the speaker 
    UInt32 doChangeDefaultRoute = 1; 
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute); 
    //Activate the customized audio session 
    [[AVAudioSession sharedInstance] setActive: YES error: &activationErr]; 
    self.audioRecorder=nil; 
    //AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
    NSError *err = nil; 
    //[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 

    NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc] init] ; 
    [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey];//kAudioFormatAppleIMA4,kAudioFormatAAC 
    [recordSetting setValue:[NSNumber numberWithFloat:44100.0] forKey:AVSampleRateKey]; 
    [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
    NSString *absolutePath=[self getAbsoluteAudioFilePath:viewTag]; 
    NSError *audioRecorderError=nil; 
    NSURL *absoluteUrl=[NSURL fileURLWithPath:absolutePath]; 
    self.audioRecorder=[[[AVAudioRecorder alloc] initWithURL:absoluteUrl settings:recordSetting error:&audioRecorderError] autorelease]; 
    NSLog(@"%s audioRecorder created=%@",__func__,self.audioRecorder); 
    BOOL isDurationAccepted=[self.audioRecorder recordForDuration:1800.0]; 
    BOOL record=[self.audioRecorder record]; 
    [recordSetting release]; 
    recordSetting=nil; 
    //if(error !=NULL) *error=audioRecorderError; 
    return nil; 
} 






    -(id)playRecordedAudio:(NSUInteger)viewTag 
{ 

      NSURL *absoluteUrl=[NSURL fileURLWithPath:[[self getAbsoluteAudioFilePath:viewTag] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding ]]; 
      NSError *audioPlayerError=nil; 

      recordingView.audioPlayer=[[[AVAudioPlayer alloc] initWithContentsOfURL: absoluteUrl error:&audioPlayerError] autorelease] ; 
      recordingView.audioPlayer.delegate=self; 
      [recordingView.audioPlayer prepareToPlay]; 
      recordingView.audioPlayer.numberOfLoops=-1; 
      UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
      AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride); 
      [recordingView.audioPlayer play]; 
      return nil; 
     } 

Приведенный выше код отлично работает, как я и ожидал. Но когда я ищу запись-> воспроизведение, снова записывая (до окончания воспроизведения в настоящее время аудио), в этот раз в настоящее время воспроизводится звук, поступающий на микрофон (наушники) вместо воспроизведения через динамики.

Теперь проблема заключается в том, что я не могу одновременно записывать и воспроизводить. Я ожидаю, что запись (даже звуковая игра) всегда через наушники и несколько аудиопроигрывателей через динамик телефона.

Пожалуйста, предложите мне изменить мой код выше, чтобы выйти из этой ситуации. Все ваши комментарии полезны.

+0

пожалуйста, проверьте эту ссылку здесь я дал полный код записи [Запись, сохранение, играть и запись на сервере] [1] [1]: http://stackoverflow.com/questions/16754932/sending-avaudiorecorder-to-server-ios/16806407#16806407 –

+0

Спасибо за быстрый ответ. Я ожидаю одновременную игру и запись в наушниках для записи и воспроизведения через динамик iphone. – ajay

ответ

1

Набор AVAudioSessionCategoryPlayAndRecord для воспроизведения тех записи