Для целей этого вопроса представьте, что мое приложение воспроизводит аудиоклип каждые 10 секунд. Этот звук воспроизводится / микшируется с музыкальным проигрывателем iPod на устройстве (с использованием приглушения) с помощью AVAudioPlayer. Когда приложение отправляется в фоновый режим, я планирую объекты UILocalNotification с указанием аудиофайла (без текста), чтобы звуки продолжали воспроизводиться с 10-секундными интервалами.
Что беспокоит меня, так это то, что громкость аудиоклипов, воспроизводимых как часть уведомления на iOS 6, кажется вдвое громче, чем звук, когда я играю в своем приложении (и я устанавливаю громкость на 1.0f, что документы говорят, что это макс). Таким образом, каждые 10 секунд приложение воспроизводит звук, и когда вы отправляете его в фоновый режим, он становится очень громким по сравнению с тем, что было в приложении.
Соответствующие фрагменты ... Запуск приложения, вот как я настраиваю AVAudioSession для включения приглушения:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
UInt32 doChangeDefaultRoute = 1;
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);
OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,sizeof (allowMixing),&allowMixing);
... Как я создаю своего плеера:
- (AVAudioPlayer *)playerWithCAFFileNamed:(NSString *)fname {
NSURL *u = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:fname ofType:@"caf"]];
NSData *d = [NSData dataWithContentsOfURL:u];
AVAudioPlayer *p = [[AVAudioPlayer alloc] initWithData:d error:nil];
p.delegate = self;
p.volume = 1.0;
[p prepareToPlay];
return p;
}
... а затем воспроизведение:
- (void)playAudio:(AVAudioPlayer *)player {
[self setSessionActiveWithMixing:YES];
[player setVolume:1.0]; // should already be set, but just to be sure
[player play];
}
... и вот как я создаю сверхгромкие уведомления:
- (UILocalNotification *)notificationWithSoundNamed:(NSString *)sound atTimeInterval:(NSTimeInterval)ti {
UILocalNotification *n = [[UILocalNotification alloc] init];
n.soundName = sound;
n.fireDate = [NSDate dateWithTimeIntervalSinceReferenceDate:ti];
return n;
}