#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
Я не знаю, какова совместимость со старыми версиями.