2013-06-05 24 views
1

我正在從my old post繼續此問題。我使用音頻隊列和音頻緩衝區讀取了大量的音頻錄製和播放內容。不幸的是,由於時間較短,我計劃使用AVFondation幀工作來錄製和播放錄音機音頻。在IOS中錄製和播放所需的不同AVAudioSession

我的想法:創建AVRecorder的一個實例,並通過微電話記錄,相同的音頻規劃通過使用AVAudioPlayer iPhone揚聲器播放(我將使用多個實例)

請把我的噸用於錄製和播放的線條

-(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播放這些錄音