Использование задач AVAudioRecorder

Я сталкиваюсь со странной проблемой с AVAudioRecorder. В моем приложении я должен записать аудио и играть его. Я создаю свой плеер как:

if(recorder)
{
if(recorder.recording)
[recorder stop];
[recorder release];
recorder = nil;
}

NSString * filePath = [NSHomeDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"Documents/%@.caf",songTitle]];
        NSDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
                                        [NSNumber numberWithFloat: 44100.0],AVSampleRateKey,
                                        [NSNumber numberWithInt: kAudioFormatAppleIMA4],AVFormatIDKey,
                                        [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                        [NSNumber numberWithInt: AVAudioQualityMax],AVEncoderAudioQualityKey,nil];
        recorder = [[AVAudioRecorder alloc] initWithURL: [NSURL fileURLWithPath:filePath] settings: recordSettings error: nil];
        recorder.delegate = self;
if ([recorder prepareToRecord] == YES){
                [recorder record];

Я выпускаю и создаю плеер каждый раз, когда я нажимаю кнопку записи. Но проблема состоит в том, что, AVAudiorecorder занимает время прежде, чем начать записывать, и поэтому если я нажимаю кнопку записи многократно непрерывно, мое приложение замораживается в течение некоторого времени. Тот же код хорошо работает без любой проблемы, когда наушники подключены к устройству... нет никакой задержки записи, и приложение не замораживается, даже если я нажимаю кнопку записи многократно.

Будет greatful, если кто-либо будет вести меня в исправлении этой проблемы. Любая справка в этом отношении будет высоко цениться.

Заранее спасибо.

1
задан tek3 10 May 2010 в 07:31
поделиться

1 ответ

Нашел решение. Я просто добавил код

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        NSError *err = nil;
        [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
        if(err){
            NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
            return;
        }
        err = nil;
        [audioSession setActive:YES error:&err];
        if(err){
            NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
            return;
        }

и теперь он работает нормально. Однако я хотел бы знать, что изменил этот кусок кода? И почему мое приложение работает нормально с подключенными наушниками, а без них замирает?

.
2
ответ дан 3 September 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: