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

Posted

技术标签:

【中文标题】IOS录制和播放需要不同的AVAudioSession【英文标题】:Different AVAudioSession needed for Recording and Playing in IOS 【发布时间】:2013-06-05 07:00:14 【问题描述】:

我从my old post 继续这个问题。我阅读了很多使用音频队列、音频缓冲区进行音频录制和播放的内容,不幸的是,由于时间较短,我妥协并计划使用 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;
        

上面的代码完全符合我的预期。但是当我正在寻找录制 - >播放时,再次录制(在完成当前播放音频之前)这次当前正在播放来自麦克风(耳机)的音频,而不是通过扬声器播放。

现在的问题是,我无法同时录制和播放。我希望始终通过耳机进行录音(甚至播放音频),并通过手机扬声器播放多个音频。

请建议我更改上述代码以摆脱这种情况。你所有的cmets都有帮助。

【问题讨论】:

请在此处查看此链接,我给出了完整的录制代码 [录制、保存、播放和发布到服务器][1] [1]:***.com/questions/16754932/… 感谢您的快速回复。我期望通过 iphone 扬声器录制和播放耳机的同时播放和录制。 【参考方案1】:

设置AVAudioSessionCategoryPlayAndRecord播放那些录音

【讨论】:

以上是关于IOS录制和播放需要不同的AVAudioSession的主要内容,如果未能解决你的问题,请参考以下文章

iOS - 在录制视频时播放音频/声音

iOS音频播放录音视频播放拍照视频录制

在 iOS 中使用耳机插孔引脚同时播放和录制音频?

在播放 iOS 时从 HLS 流(视频)中提取/录制音频

在 iOS 中同时录制和播放音频

音频播放和录制不适用于 iOS 10