Звучит в UILocalNotification громче, чем в AVAudioPlayer на максимальной громкости

Для целей этого вопроса представьте, что мое приложение воспроизводит аудиоклип каждые 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;
}

person James Boutcher    schedule 27.01.2013    source источник
comment
Создал образец приложения и обнаружил ошибку с Apple в этом.   -  person James Boutcher    schedule 31.01.2013


Ответы (2)


Ошибка, которую я обнаружил в Apple, была закрыта как «работает как задумано». Их краткое объяснение:

Звуки уведомлений следуют за громкостью звонка; AVAudioPlayer следует за громкостью мультимедиа.

... Я предполагаю, что тогда вы можете сделать предположение, что громкость звонка может быть выше, чем самая громкая громкость мультимедиа, чтобы убедиться, что вы слышите звонок. Наверное.

person James Boutcher    schedule 18.02.2013

Я столкнулся с аналогичной проблемой с громкостью AVAudioPlayer. Итак, я разделил ценность, которую хочу присвоить, на коэффициент того, что я хочу получить. Однако стоит найти причину.

person sridevi    schedule 27.01.2013
comment
Немного запутались - вы делите настройку громкости на какое-то число, чтобы уменьшить громкость? 1.0 это макс, да? Я не мог понять, как уменьшение количества аудиовходов решит мою проблему. (Моя проблема в том, что громкость приложения ниже, чем громкость UINotification, которую я не могу контролировать) - person James Boutcher; 28.01.2013
comment
Присвойте объему 0,5 вместо 1,0. Точно так же, если вы хотите присвоить 0,5, разделите на 2 и присвойте 0,25. Это обходной путь, который я использовал. - person sridevi; 29.01.2013
comment
Я понимаю, как работает деление, не логично, почему установка громкости на 0,5 будет громче, чем установка на 1,0. Логика мышления, возможно, не сыграла здесь роли, я принял ваше предложение - и звук был примерно вдвое меньше, чем обычно (теперь это 1/4 громкости воспроизводимых уведомлений), что я и ожидал. - person James Boutcher; 29.01.2013