Настройка громкости звука на iPhone только для приложения - PullRequest
0 голосов
/ 14 апреля 2011

Мне интересно, как

a) Play a sound next to iPod/Other music sources
b) beeing able to control the volume of that played sound (only)
c) **important** both combined!!
d) all of it also on background/mt

Я могу сделать оба отдельно, используя AudioSession для a) и MPVolumeView для b).

Теперь я прочитал, что не могу установить громкость для AudioSessions, так как их громкость основана на системной громкости, что плохо в моей базе. Остановка музыки с iPod при воспроизведении с управлением громкостью еще хуже.

я заметил, что в runmeter (не хочу показывать рекламу, например, в качестве примера), например, есть ползунок, который управляет громкостью приложений независимо от того, какой объем системы и / или громкости ipods.

так что я могу почти отключить звук телефона, установить ставку на ipod и максимизировать громкость приложений, все в порядке.

есть ли способ / подсказка, как это сделать, если не упасть на яблоко?

есть предложения?

Спасибо.


РЕДАКТИРОВАТЬ: спасибо Badgrr за решение этой проблемы, моим окончательным решением было использование CocosDenshin:

appDelegate, applicationDidEnterBackground:

[[CDAudioManager sharedManager] setMode:kAMM_MediaPlayback];
[[CDAudioManager sharedManager] setResignBehavior:kAMRBDoNothing autoHandle:NO];

appDelegate, applicationWillEnterForeground: - просто чтобы убедиться!

[[CDAudioManager sharedManager] setResignBehavior:kAMRBDoNothing autoHandle:NO];

воспроизведения, мне также нужно было знать, когда был сделан звуковой файл, чтобы воспроизвести следующий, так как я не хочу создавать предложения в смеси simult. слова. как сказать «Привет», а затем «мир»:

при инициализации моего Soundplayer:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:&err];
[[CDAudioManager sharedManager] setMode:kAMM_MediaPlayback];
soundEngine = [[CDAudioManager sharedManager] audioSourceForChannel:kASC_Right];
soundEngine.delegate = self; // ensure to implement <CDLongAudioSourceDelegate>  

воспроизводимых звуков:

- (void)playSound:(NSString *)soundFile
{   
 [soundEngine load:[NSString stringWithFormat:@"%@.caf",soundFile]];
 [soundEngine play];
 ....
}

и воспроизведение следующего, после текущих остановок (мое audioQueue - NSMutableDictionay)

- (void) cdAudioSourceDidFinishPlaying:(CDLongAudioSource *) audioSource
{
    if ([self.audioQueue count] > 0) 
    {
        [self.audioQueue removeObjectAtIndex:0];
    }

    if ( [self.audioQueue count] > 0 ) 
    {
        NSString *file = [self.audioQueue objectAtIndex:0];
        [self playSound:file];
    } 
    else 
    {
        //NSLog(@"SoundsManager::cdAudio.. Done, queue empty");
            [self resumeIPod];
    }
}

надеюсь, это поможет всем, у кого возникли такие же проблемы!

1 Ответ

1 голос
/ 15 апреля 2011

Переход от комментариев к ответу, чтобы другим было легче читать.

Взгляните на CocosDenshion . Он использует OpenAL для звуков и может воспроизводить их поверх фоновых звуков, управляемых с помощью другого интерфейса. При необходимости его можно использовать без необходимости использовать Cocos2d.

Чтобы предотвратить остановку воспроизведения звуковых эффектов при воспроизведении библиотеки iPod, необходимо указать пользовательский аудиосеанс в следующей строке:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:NULL];
...