Изменение громкости приложения iPhone без появления поля изменения громкости (приложение для Японии)

#iphone #audio #openal

#iPhone #Аудио #openal

Вопрос:

Я создаю приложение дополненной реальности с функцией фотосъемки. Он использует мою пользовательскую функцию для создания пользовательского интерфейса для сохранения экрана. По закону в Японии камеры должны иметь шум затвора, поэтому камера iPhone всегда воспроизводит его. До сих пор я нашел способ воспроизводить звуки, даже когда iPhone отключен, но он по-прежнему зависит от громкости, установленной пользователем. Итак, я нашел способ использовать MPMusicPlayerController для управления громкостью приложения. Это работает, но при изменении громкости появляется окно, сигнализирующее о том, что громкость была изменена.

Вот мой код для воспроизведения звуков даже при отключении звука:

     AudioSessionInitialize (NULL, NULL, NULL, NULL);
AudioSessionSetActive(true);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                         sizeof(sessionCategory),amp;sessionCategory);
  

Я использую библиотеку Finch для воспроизведения звука (легкая оболочка для OpenAL), а затем MPMusicPlayerController для регулировки громкости перед воспроизведением.

 appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[appMusicPlayer setVolume:0.5f];
  

У кого-нибудь есть опыт работы с этим или создавали подобные приложения для Японии? Я действительно в недоумении. Спасибо.

Ответ №1:

MPVolumeView Пока он виден, плавающий блок блокируется, даже если пользователь его не видит.

Некоторый пример кода…

 // create/synthesize ivars for "MPVolumeView" and "UIView" (both are necessary)
// I called them "mpVolumeView" and "mpVolumeViewParentView" respectively

// the UIView containing the MPVolumeView can have a frame of (0,0,1,1)
// this way, the user never sees the slider, but it still works normally

- (void)viewDidLoad {
    ...
    // with this, only the slider is visible
    mpVolumeViewParentView.backgroundColor = [UIColor clearColor];

    // initialize the volume slider (link the parent view in IB, or init here)
    mpVolumeView = [[MPVolumeView alloc] initWithFrame:
                                                mpVolumeViewParentView.bounds];

    // since it's a programmatic init, the subview must be added like so
    [mpVolumeViewParentView addSubview:mpVolumeView];

    // allows the floating box to appear without destroying mpVolumeView
    mpVolumeView.hidden = YES; // or [mpVolume setHidden:YES]; if you prefer
    ...
}
  

Перед изменением громкости, чтобы заставить камеру издавать звук…

 mpVolumeView.hidden = NO; // view visible, box doesn't appear
  

И после звуков, чтобы не было похоже, что вы что-то перепутали…

 mpVolumeView.hidden = YES; // view hidden, box appears
  

Для получения желаемого может потребоваться некоторая настройка, но это должно быть хорошей отправной точкой.

Этот код предназначен для iOS 5.1
Я не знаю, какова совместимость со старыми версиями.