Запись звука во время воспроизведения звука

Можно ли записывать звук с помощью AVAudioRecorder и одновременно воспроизводить другой аудиофайл с помощью AVAudioPlayer?


person New Jango Tester    schedule 10.04.2013    source источник
comment
Вы хотите использовать воспроизведение с AVAudioPlayer в качестве источника входного сигнала для записи?   -  person Robert    schedule 15.05.2013


Ответы (1)


Это возможно с iOS 6. У меня проблемы с этим в iOS 5.x. Нет информации о версии до 5.x.

Для этого для категории AudioSession необходимо установить значение AVAudioSessionCategoryPlayAndRecord.

NSError *error = nil;
NSLog(@"Setting category for AudioSession to AVAudioSessionCategoryPlayAndRecord");
BOOL success = [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&error];
if (!success) {
    NSLog(@"Error setting category for AudioSession:\n\terror: %@", error.localizedDescription);
}

AVAudioRecorder настроен следующим образом:

NSString *fileToRecordPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"record.m4a"];
NSURL *fileToRecordURL = [NSURL fileURLWithPath:fileToRecordPath];
NSDictionary *settings = @{AVFormatIDKey: [NSNumber numberWithInt:kAudioFormatMPEG4AAC],
                           AVSampleRateKey: [NSNumber numberWithFloat:44100.0],
                           AVNumberOfChannelsKey: [NSNumber numberWithInt:1]};
NSError *error = nil;

AVAudioRecorder *audioRecorder = [[AVAudioRecorder alloc] initWithURL:self.fileURL settings:settings error:&error];
 if (!audioRecorder) {
    NSLog(@"Error initializing AVAudioRecorder:\n\terror: %@", error.localizedDescription);
}
audioRecorder.delegate = self;
[audioRecorder prepareToRecord];

При воспроизведении другого аудиофайла (того же формата, m4a) в AVAudioPlayer в iOS 6 все работает нормально. В iOS 5 поведение странное. Когда воспроизведение аудио или аудиовоспроизведение приостановлено, запись не может быть начата. Однако при начале записи возможно одновременное воспроизведение (другого файла).

После некоторого поиска я не мог найти способ настроить это правильно. Хотя я не могу поверить, это ошибка в iOS, а отсутствующая настройка.

Так что это работает с iOS 6, но помощь в решении проблемы с iOS 5 очень приветствуется ;o)

person Felix Lieb    schedule 27.06.2013
comment
Я не. Это настройка AVAudioSessionCategory и AVAudioRecorder. Просто используйте AVAudioPlayer, как описано в документации. Ниже описано необычное для меня поведение iOS 5. - person Felix Lieb; 20.01.2014