Я продолжаю этот вопрос от my old post. Я читал много контента для записи звука и воспроизведения с использованием очередей аудио, звуковых буферов, к сожалению, из-за меньшего времени, которое я скомпрометировал, и планировал использовать работу фреймворка AVFondation для записи и воспроизведения звука рекордера.Различные AVAudioSession, необходимые для записи и воспроизведения в IOS
Моя идея: создания одного экземпляра 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]: http://stackoverflow.com/questions/16754932/sending-avaudiorecorder-to-server-ios/16806407#16806407 –
Спасибо за быстрый ответ. Я ожидаю одновременную игру и запись в наушниках для записи и воспроизведения через динамик iphone. – ajay