2011-02-18 3 views
2

내 iPhone 앱 중 하나에 라우드 스피커 기능을 추가하려고합니다. 녹음 기능을 이미 만들었지 만 녹음 된 오디오를 재생할 때 전화 헤드셋으로 만 재생됩니다.헤드셋이 연결되어있을 때 iPhone 스피커에서 오디오가 나오게하려면 어떻게해야합니까?

내가 필요로하는 것은 헤드셋이 연결되어 있어도 스피커에서 재생할 녹음 파일입니다. 어떻게하면 오디오를 다시 라우팅 할 수 있습니까?

+0

사용자가 시끄러운 스피커 또는 헤드셋을 사용하려는 경우 두 가지를 모두 얻는 설정을 만드는 방법 ... 죄송합니다.이 부분을 놓칩니다. : P – shy

답변

7

AudioSessionSetProperty을 사용하여 기본 오디오 속성을 무시해야합니다. 이와 같은 것을보고 모든 오디오를 스피커로 보내십시오 (헤드폰이 연결되어있는 경우에도이 문제가 발생합니다).

OSStatus err = 0; 
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; 
err = AudioSessionSetProperty(kAudioSessionProperty_OverrideAudioRoute,sizeof(audioRouteOverride),&audioRouteOverride); 

시도, 헤드폰을 감지하려면이 (이것은 문자 그대로, SO 게시 다른 사람의 온/오프 있으므로주의의 위험 부담을 붙여 넣기 코드를 복사되어 있지만 나를 위해 작동) :

/** 
* Tells us if the headset is plugged in 
*/ 
- (BOOL) headsetIsPluggedIn 
{ 
    BOOL returnVal = NO; 

    UInt32 routeSize = sizeof(CFStringRef); 
    CFStringRef route = NULL; 
    OSStatus error = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &routeSize, &route); 
    if (!error && (route != NULL) && ([(NSString*)route rangeOfString:@"Head"].location != NSNotFound)) 
    { 
    CFRelease(route); 
    returnVal = YES; 
    } 
    return returnVal; 
} 

편집 : CFRelease가 적절한 지에 대한 의견에는 약간의 토론이 있습니다. 어떤 하드 코어 코어 파운데이션 전문가가 체중 관리를 원하십니까?

+0

사용자가 원하는 경우 두 가지 설정을 모두 만드는 방법은 무엇입니까? 시끄러운 스피커 또는 헤드셋을 사용하십시오 ... 고마워 .. 미안 해요 ..이 부분을 그리워합니다. : P – shy

+0

거짓말 쟁이 .. 위 코드 osstatus를 어디에 두어야합니까? 죄송합니다.이 모든 것들로 새로운 abit입니다. – shy

+0

@ 수줍음을 넣으십시오. 재정의 시작을 원하면 어디에서라도? – makdad

관련 문제