2011-01-16 3 views
4

AudioServicesPlaySystemSound를 사용하는 데 문제가 있습니다. 출력물이 스피커를 통과 할 때 큰 효과가 있습니다. 그러나 사용자가 헤드폰을 연결할 때 출력이 없습니다. 어떤 종류의 청취자를 설치하는 쉬운 방법이있어 오디오를 꽂았을 때 헤드폰을 통해 자동으로 라우트되거나 스피커를 통해 자동으로 라우트됩니다.iPhone AudioServicesPlaySystemSound : 헤드폰을 통해 경로를 지정 하시겠습니까?

나는 짧고 간단한 AIF 사운드 샘플을 재생하려면 다음과 같은 방법을 사용하고 있습니다 :

-(void)playAif:(NSString *)filename { 
    SystemSoundID soundID; 
    NSString *path = [[NSBundle mainBundle] 
     pathForResource:filename ofType:@"aif"];  

    if (path) { // test for path, to guard against crashes 

    AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID); 
    AudioServicesPlaySystemSound (soundID); 

     } 
    } 

는 내가 모르는 뭔가가 있어야합니다 알고,이 작업을 수행 할 설정의 일부 비트. 어떤 아이디어?

+1

AudioSessions -http : //developer.apple.com/library/ios/#documentation/Audio/Conceptual/AudioSessionProgrammingGuide/Configuration/Configuration.html#//apple_ref/doc/uid/TP40007875-CH3- SW1 – Till

+1

물고기를 가르쳐 준 덕분에 @ 감사합니다! 이전에 문서를 확인했지만 관련 정보를 놓쳤습니다. 후손을위한 해결책으로 아래의 질문을 업데이트하십시오. 감사! –

답변

4

감사합니다. relevant portion of the docs으로 나를 가리켜 주시면 감사하겠습니다. 이 문제가있는 다른 사람들을 위해, 솔루션은 명시 적으로 세션 카테고리를 내 경우에는 앰비언트 사운드로 설정하는 것입니다. apple's docs에서 냈다이 코드는 :

UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; // 1 

    AudioSessionSetProperty (
          kAudioSessionProperty_AudioCategory,      // 2 
          sizeof (sessionCategory),         // 3 
          &sessionCategory           // 4 
          ); 

그래서, 지금 오디오 재생을위한 나의 방법은 다음과 같습니다

-(void)playAif:(NSString *)filename { 
    // NSLog(@"play: %@", filename); 

     SystemSoundID soundID; 
     NSString *path = [[NSBundle mainBundle] 
          pathForResource:filename ofType:@"aif"];  


     if (path) { // test for path, to guard against crashes 

      UInt32 sessionCategory = kAudioSessionCategory_AmbientSound; // 1 

      AudioSessionSetProperty (
            kAudioSessionProperty_AudioCategory,      // 2 
            sizeof (sessionCategory),         // 3 
            &sessionCategory           // 4 
            ); 

      AudioServicesCreateSystemSoundID((CFURLRef)[NSURL fileURLWithPath:path],&soundID); 
      AudioServicesPlaySystemSound (soundID); 

     } 
    } 

이 내 문제를 솜씨있게 해결! 내가 가지고있는 유일한 걱정은 사운드를 재생할 때마다이를 과도하게 명시 적으로 설정한다는 것입니다. 누구든지 그것을 설정하고 잊어 버리는 더 안전하고 안전한 방법을 알고 있습니까? 그렇지 않으면, 이것은 즐겁게 작동합니다.

+0

고마워요. 소리가 나지 않아요. 열쇠는 카테고리를 설정하는 것이 었습니다. –

+0

iOS 7에서 더 이상 사용되지 않는 AudioSessionSetProperty – barfoon