Запись аудио устройства iPhone в фоновом режиме, как - PullRequest
4 голосов
/ 06 декабря 2011

Я смотрю функции аудиоустройства для записи. Все хорошо, за исключением того, что обратные вызовы записи останавливаются, когда приложение находится в фоновом режиме, в отличие от AVCapture, который продолжает запись в фоновом режиме с RED BAR. Есть ли способ заставить это продолжать запись в фоновом режиме, как с AVCapture?

#import "AudioUnit/AudioComponent.h"
#import "AudioUnit/AudioUnit.h"

desc.componentType          = kAudioUnitType_Output;
desc.componentSubType       = kAudioUnitSubType_RemoteIO;
desc.componentFlags         = 0;
desc.componentFlagsMask     = 0;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;

AudioComponent inputComponent = AudioComponentFindNext(NULL, &desc);
status = AudioComponentInstanceNew(inputComponent, &audioUnit);
checkStatus(status);

UInt32 flag = 1;

status = AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Input, kInputBus, &flag, sizeof(flag));
checkStatus(status);

//status = AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output, kOutputBus, &flag, sizeof(flag));
checkStatus(status);

AudioStreamBasicDescription     audioFormat;
audioFormat.mSampleRate         = 8000.00; //44100.00;
audioFormat.mFormatID           = kAudioFormatLinearPCM;
audioFormat.mFormatFlags        = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket    = 1;
audioFormat.mChannelsPerFrame   = 1;
audioFormat.mBitsPerChannel     = 16;
audioFormat.mBytesPerPacket     = 2;
audioFormat.mBytesPerFrame      = 2;

status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, kInputBus, &audioFormat, sizeof(audioFormat));
checkStatus(status);

status = AudioUnitSetProperty(audioUnit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, kOutputBus, &audioFormat, sizeof(audioFormat));
checkStatus(status);

AURenderCallbackStruct callbackStruct;

callbackStruct.inputProc = recordingCallback;
callbackStruct.inputProcRefCon = self;

status = AudioUnitSetProperty(audioUnit, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Global, kInputBus, &callbackStruct, sizeof(callbackStruct));
checkStatus(status);

1 Ответ

3 голосов
/ 08 декабря 2011

Дох, забыл установить

Цели / Информация / Необходимые фоновые режимы / Приложение воспроизводит звук

к тестовому приложению.

...