Проблема с использованием AVAudioRecorder - PullRequest
1 голос
/ 10 мая 2010

У меня странная проблема с 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 требуется некоторое время, прежде чем начать запись, и поэтому, если я нажимаю кнопку записи несколько раз непрерывно, мое приложение на некоторое время зависает. Тот же код работает без проблем, когда к устройству подключены наушники ... запись не задерживается, и приложение не останавливается, даже если я нажимаю кнопку записи несколько раз.

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

Спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 10 мая 2010

Получил решение. Я только что добавил код

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;
        }

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

0 голосов
/ 02 февраля 2012

Да,

[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];

это решение. Позволяет записывать и воспроизводить аудио.

Об ошибке наушников, которая, вероятно, связана со свойством

[[AVAudioSession sharedInstance] inputIsAvailable]
...