iphone: запись AVAudioRecorder всегда возвращает FALSE - PullRequest
2 голосов
/ 27 октября 2011

Я использую AVAudioRecorder для записи звука, но у меня проблема.

После вызова метода [recordder record] значение Recorder.recording всегда возвращает FALSE, поэтому я не могу остановить запись.

Я использую XCode 4.2 с iOS 5, мой iPad тоже ipad 2 на iOS 5.

Это мой код:

    self.currentFileName = [GlobalRecording newRecordingFileName];
    NSURL *url = [NSURL fileURLWithPath:[[GlobalRecording recordingDirectory]    stringByAppendingPathComponent:currentFileName]];
NSError *err = nil;

AVAudioRecorder *aRecorder = [[AVAudioRecorder alloc] initWithURL:url settings:recordingSettings error:&err];
if( err ){
    NSLog(@"could not create a recorder: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}

self.startRecordingTime = [NSDate date];
recordingLength = 0.0f;

//  setup recorder and start recording
[aRecorder setDelegate:self];
aRecorder.meteringEnabled = YES;
[aRecorder record];

self.recorder = aRecorder;
BOOL test = recorder.recording;
[aRecorder release];

Ответы [ 4 ]

3 голосов
/ 10 марта 2013

попробуйте использовать AVAudioSession после [audioRecord prepareToRecord]

    NSError *err = nil;
audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];

// route to speaker
UInt32 ASRoute = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute, sizeof(ASRoute), &ASRoute);

if (err)
{
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
}

[audioSession setActive:YES error:&err];
1 голос
/ 18 января 2017

Аудио сеанс - это посредник между вашим приложением и iOS, используемый для настройки поведения вашего приложения. После запуска ваше приложение автоматически получает одноэлементный аудио сеанс.

, поэтому активируйте сеанс перед началом записи

Для Swift 3.0

let session = AVAudioSession.sharedInstance()
        do {
            try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        } catch let error as NSError {
            print("could not set session category")
            print(error.localizedDescription)
        }
        do {
            try session.setActive(true)
        } catch let error as NSError
        {
            print("could not make session active")
            print(error.localizedDescription)
        }
self.recorder.record() // recorder is my AVAudioRecorder
0 голосов
/ 08 октября 2018

У меня был похожий симптом, потому что я использовал библиотеку для воспроизведения, которая сбрасывала AVAudioSession глобальные настройки. Мне нужно было сбрасывать настройки каждый раз, когда я хотел записать.

do {
  try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
  try session.setActive(true)
} catch {
  return error
}

Библиотека, которую я использую, сбрасывает ее до AVAudioSessionCategoryPlay. Конечно, было бы хорошо, если бы была ошибка доступа, отличная от false, чтобы сообщить вам, что вызвало сбой record().

0 голосов
/ 01 ноября 2011

Вы также видите задержку при вызове метода записи? Я вижу проблему при использовании iOS5 на аппаратном обеспечении iPhone4, когда метод записи имеет задержку 3-4 секунды и иногда не удается начать запись. Я вызываю prepareToRecord в соответствии с рекомендациями с той же проблемой.

Это не проблема для iOS4 / iPhone4 или iOS5 / iPhone4S ... так что, похоже, проблема с запуском новой ОС на старом оборудовании.

...