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;
}
上述代碼完美地按照我的預期工作。但是當我正在尋找錄音 - >播放時,再次錄音(在完成當前正在播放的音頻之前),這次正在播放麥克風(耳機)的音頻,而不是通過揚聲器播放。
現在的問題是,我無法同時錄製和播放。我期望通過耳機和多個音頻通過電話揚聲器播放唱片(甚至音頻播放)。
請建議我更改我的上述代碼來擺脫這種情況。您的評論有用。
請在這裏檢查此鏈接我給記錄 的完整代碼[記錄,保存,播放及後到服務器] [1] [1]: http://stackoverflow.com/questions/16754932/sending-avaudiorecorder-to-server-ios/16806407#16806407 –
感謝您的快速回復。我期待同時播放和錄製的耳機錄音和通過iPhone揚聲器播放。 – ajay