주기적인 짧은 클립 소리를 재생하는 단계별 내비게이션 앱을 구축 중입니다. 화면이 잠겨 있는지 여부와 상관없이 사운드는 재생되어야하며 다른 음악 재생과 섞여야하며이 오디오가 재생되면 다른 음악을 재생해야합니다.AudioSessionActive가 NO 일 때 하드웨어 버튼을 통해 AVAudioPlayer의 볼륨을 제어 할 수 없음
Apple은 29 분 20 초에 "WWDC 2010 세션 412 오디오 개발 for iPhone OS part 1"비디오에서 세부 정보 턴 바이 바이 사례를 논의합니다. 구현은 훌륭하게 작동하지만 한 가지 문제가 있습니다. 앱이 실행 중일 때 하드웨어 볼륨 컨트롤을 누르면 앱 볼륨이 아니라 벨소리 볼륨이 조정됩니다. 앱 볼륨을 변경하려면 프롬프트가 재생되는 동안 볼륨 버튼을 눌러야합니다.
Apple은 AVAudioSession을 활성 상태로 두어서는 안되며, AVAudioSession이 비활성 상태이면 볼륨 버튼이 내 앱 볼륨을 제어하지 않습니다. 여기
내가 일을 설정하는 데 사용하고 코드입니다 :UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);
UInt32 shouldDuck = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OtherMixableAudioShouldDuck, sizeof(shouldDuck), &shouldDuck);
OSStatus activationResult = AudioSessionSetActive(true);
NSError* err = nil;
_player = [[AVAudioPlayer alloc] initWithData:audioData error:&err];
_player.delegate = self;
[_player play];
을 애플이 권장 나는이 말에 NO로 활성 세션을 설정합니다
OSStatus activationResult = AudioSessionSetActive(false);
NSAssert(activationResult == kAudioSessionNoError, @"Error deactivating audio session");
인가 뭔가를 내가 누락되었거나 비디오에서 추천 한 것에 반대해야합니까?
사용자가 활성 오디오를 보거나들을 때 사용자가 신호기를 제어한다고 가정해야 할 가능성이 있습니까? 앱이 아닌가요? – hotpaw2
@ hotpaw2 좋은 질문입니다. Core Audio 개발자는이 동작을 설계 할 때이 점을 염두에 두었을 수도 있지만, Apple Maps가 탐색 모드에서 작동하는 방식을 연구하면 프롬프트가 재생되지 않을 때 하드웨어 버튼이 앱 볼륨을 제어합니다. 분명히 할 수있는 방법이 있습니다. Apple은 turn-by-turn 앱이 작동하는 방식대로 올바른 행동이라고 생각합니다. –
WWDC에서 작성한 코드를 사용하는 github 프로젝트를 만들었습니다. 실제 하드웨어에서 실행하고 싶습니다. https://github.com/marcregan/core-audio-volume-problems/tree/master/AudioVolumeProblems –