Iphone 在IOS中录制和播放所需的不同音频

Iphone 在IOS中录制和播放所需的不同音频,iphone,ios,objective-c,avaudioplayer,avaudiorecorder,Iphone,Ios,Objective C,Avaudioplayer,Avaudiorecorder,我将继续这个问题。我阅读了大量使用音频队列和音频缓冲区进行音频录制和播放的内容,不幸的是,由于我节省的时间较少,并且计划使用AVFondation框架来录制和播放录音机音频 我的想法:创建一个AVRecorder实例,并通过微型手机录制,使用AVAudioPlayer通过Iphone扬声器播放相同的音频计划(我将使用多个实例) 请把我那一大堆台词拿出来录音和播放 -(id)startAudioRecorder:(NSUInteger)viewTag { NSError *setCateg

我将继续这个问题。我阅读了大量使用音频队列和音频缓冲区进行音频录制和播放的内容,不幸的是,由于我节省的时间较少,并且计划使用AVFondation框架来录制和播放录音机音频

我的想法:创建一个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;
        }
上面的代码完全按照我的预期工作。但当我在寻找录音->播放时,再次录音(在当前播放完音频之前),这次是通过麦克风(耳机)播放音频,而不是通过扬声器播放

现在的问题是,我无法同时录制和播放。我希望录音(甚至音频播放)总是通过耳机和多个音频播放通过电话扬声器


请建议我改变我的上述代码来摆脱这种情况。你所有的评论都很有用

Set
AVAudioSessionCategoryPlayAndRecord
播放那些录音

Set
AVAudioSessionCategoryPlayAndRecord
播放那些录音

请检查这里的链接我给出了完整的录音代码[录制、保存、播放并发布到服务器][1]:谢谢您的快速回复。我期待通过iphone扬声器录制和播放的耳机同时播放和录制。请检查此处的链接我提供了完整的录制代码[录制、保存、播放并发布到服务器][1][1]:谢谢您的快速回复。我期待同时播放和录制有关耳机的录音和播放通过iphone扬声器。