2011-04-06 2 views
1

특정 장소에서 오디오 피드백을 제공하는 iOS 앱이 있지만 사용자가 백그라운드에서 재생하고있는 다른 음악을 원할 경우이 앱을 통해 재생할 수 있습니다. 또한 내 앱의 오디오가 음소거 스위치를 존중하도록하고 싶습니다. 개발자 문서에 따르면이 기능은 AVAudioSession 앰비언트 카테고리에 의해 모두 활성화되어야합니다. 이것은 내가 사용하고있는 코드입니다 :AVAudioSession 카테고리가 설명서대로 작동하지 않습니다.

if (!hasInitialisedAudioSession) { 
    AVAudioSession *session = [AVAudioSession sharedInstance]; 
    [session setCategory:AVAudioSessionCategoryAmbient error:NULL]; 

    [session setActive:YES error:NULL]; 

    hasInitialisedAudioSession = YES; 
} 

코드가 실행 중입니다. 실제로 코드가 실행되어 iPod 음악을 통해 앱 소리가 재생됩니다. 그러나 그것이하지 않는 것은 뮤트 스위치를 존중합니다. 비슷한 C 오디오 호출 (AudioSessionSetProperty 같은) 대신 Objective-C 호출 대신이 코드를 바꿔 시도했지만 비슷한 결과를 얻었습니다. 앰비언트 세션 범주는 음소거 스위치를 존중하고 싶지 않습니다. 그 문서는해야한다고 말한다.

아이디어가 있으십니까? 도움을 주셔서 감사합니다 :)

+0

동시에 재생하고 기록합니까 ??? 그것을 시뮬레이터와 함께 작동합니까 ?? – Aadil

답변

0

나는 그것을 해결할 수있을 것 같아요 - 그것은 내 애플 리케이션과 전혀 상관이 없다는 것이 밝혀졌지만, 오히려 아이팟 애플 리케이션. 내 앱은 iPod이 재생 중이 아닐 때와 마찬가지로 음소거 스위치를 따라 가며 iPod을 재생할 수 있습니다. 그러나 iPod이 재생 중일 때 앱이 음소거 스위치에 응답하지 않으므로 iPod이 장치 오디오 설정에 적용되는 것입니다. 정말로 시간을 보내고 싶다면 아마 주위를 돌아볼 수는 있지만, iPod이 재생되지 않을 때 뮤트 스위치를 사용하면 충분합니다.

EDIT :이 문제를 해결하려면이 기능을 사용하여 수동으로 음소거 스위치가 켜져 있는지 확인하고 결과가 YES이면 소리를 재생하지 마십시오. 중앙 오디오 관리자 클래스가 없어도 약간의 고통이 될 수 있습니다. Apple이이 문서를 자신의 문서에 게시 할 수 있다면 좋을 것입니다.

- (BOOL)deviceIsSilenced 
{ 
    #if TARGET_IPHONE_SIMULATOR 
    // return NO in simulator. Code causes crashes for some reason. 
    return NO; 
    #endif 

    CFStringRef state; 
    UInt32 propertySize = sizeof(CFStringRef); 
    AudioSessionInitialize(NULL, NULL, NULL, NULL); 
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state); 

    return (CFStringGetLength(state) <= 0); 
}