Настройка iPhone IOS - PullRequest
       2

Настройка iPhone IOS

0 голосов
/ 25 января 2012

Вот некоторый код, который устанавливает размер буфера аудиозахвата (в секундах)

union 
{
    OSStatus propertyResult;
    char a[4];
} u;

union
{
    UInt32 UI32sessionCat;
    char a[4];
} usc;

UInt32 UI32sessionCatSize = 4;
Float32 F32realIOBufferDuration = 0.0;
Float32 F32requestedIOBufferDuration = 0.5;
UInt32 F32datasize = 4;

u.propertyResult = AudioSessionGetProperty (  kAudioSessionProperty_PreferredHardwareIOBufferDuration , &F32datasize, &F32realIOBufferDuration );
NSLog(@"Error Get IO Duration Time %ld %lx %c%c%c%c",u.propertyResult,u.propertyResult,u.a[3],u.a[2],u.a[1],u.a[0]);
NSLog(@"IO Buffer Duration is %f",F32realIOBufferDuration);

u.propertyResult = AudioSessionSetProperty (  kAudioSessionProperty_PreferredHardwareIOBufferDuration ,sizeof(F32requestedIOBufferDuration) , &F32requestedIOBufferDuration );
NSLog(@"Error Set IO Duration Time %ld %lx %c%c%c%c",u.propertyResult,u.propertyResult,u.a[3],u.a[2],u.a[1],u.a[0]);

u.propertyResult = AudioSessionGetProperty (  kAudioSessionProperty_PreferredHardwareIOBufferDuration , &F32datasize, &F32realIOBufferDuration );
NSLog(@"Error Get IO Duration Time %ld %lx %c%c%c%c",u.propertyResult,u.propertyResult,u.a[3],u.a[2],u.a[1],u.a[0]);
NSLog(@"IO Buffer Duration is %f",F32realIOBufferDuration);

u.propertyResult = AudioSessionGetProperty (  kAudioSessionProperty_AudioCategory, &UI32sessionCatSize, &usc.UI32sessionCat );
NSLog(@"Error Get Property %ld %lx %c%c%c%c",u.propertyResult,u.propertyResult,u.a[3],u.a[2],u.a[1],u.a[0]);
NSLog(@"Category %ld %lx %c%c%c%c",usc.UI32sessionCat,usc.UI32sessionCat,usc.a[3],usc.a[2],usc.a[1],usc.a[0]);

Который, кажется, работает / устанавливает продолжительность ...

2012-01-25 12:28:01.275 recordonlytest[1623:707] Error Get IO Duration Time 0 0 
2012-01-25 12:28:01.276 recordonlytest[1623:707] IO Buffer Duration is 0.023000
2012-01-25 12:28:01.278 recordonlytest[1623:707] Error Set IO Duration Time 0 0 
2012-01-25 12:28:01.280 recordonlytest[1623:707] Error Get IO Duration Time 0 0 
2012-01-25 12:28:01.281 recordonlytest[1623:707] IO Buffer Duration is 0.500000
2012-01-25 12:28:01.283 recordonlytest[1623:707] Error Get Property 0 0 
2012-01-25 12:28:01.284 recordonlytest[1623:707] Category 1919247201 72656361 reca

Вы видите, что свойства get действительно возвращают 0,50000

Но обратные вызовы все еще происходят на скорости .023000

2012-01-25 12:28:04.035 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.058 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.081 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.104 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.128 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.151 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.174 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.197 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.220 recordonlytest[1623:707] In Capture Output
2012-01-25 12:28:04.244 recordonlytest[1623:707] In Capture Output

Это готовится

 [self getRequestedSampleRate];  // routine to set the duration

 NSError* activationError = nil;

 [[AVAudioSession sharedInstance] setActive: YES error: &activationError];

 audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; 
 captureSession = [[AVCaptureSession alloc] init];

Так есть ли другая последовательность действий и т. Д., Которые необходимо выполнить, или IOS просто игнорирует этот запрос?

1 Ответ

1 голос
/ 21 декабря 2012

С здесь :

Хотя безопасно установить свойства аудиосеанса, такие как категория звука (kAudioSessionProperty_AudioCategory) или прослушиватель свойства, независимо от состояния активации сеансов, обычно лучшеделать запросы предпочтений, такие как предпочтительная длительность аппаратного буфера (kAudioSessionProperty_PreferredHardwareIOBufferDuration) или предпочтительная частота дискретизации аппаратного обеспечения (kAudioSessionProperty_PreferredHardwareSampleRate), когда аудиосеанс НЕ активен.

Возможно, вам не хватает:

** Активируйте аудиосеанс, прежде чем запрашивать «текущие» свойства. * AudioSessionSetActive (true);

...