首页 文章

在IOS中录制和播放需要不同的AVAudioSession

提问于
浏览
1

我将从my old post继续这个问题 . 我读了很多内容用于录音和使用音频队列,音频bufferes播放,不幸的是由于我受到损害的时间较少,并计划使用AVFondation帧工作来录制和播放录音机音频 .

My idea: 创建 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;
        }

上面的代码完全像我预期的那样工作 . 但是当我正在寻找录音 - >播放,再次录制(在完成当前正在播放的音频之前)这次正在播放音频来到麦克风(耳机),而不是通过扬声器播放 .

现在的问题是,我无法同时录制和播放 . 我期待通过耳机和多个音频通过电话扬声器播放(即使是音频播放) .

请建议我修改上面的代码以解决这种情况 . 所有评论都有帮助 .

1 回答

  • 1

    设置 AVAudioSessionCategoryPlayAndRecord 以播放这些录音

相关问题