2017-04-26 20 views
1

AVAudioPlayer를 사용하여 AudioServicesPlaySystemSoundWithCompletion 및 사용자 지정 사운드를 사용하여 시스템 사운드를 재생하고 있습니다.음소거/무음 모드가 켜져있을 때 사운드가 계속 재생됩니다.

무음 스위치가 켜져있는 이유는 무엇입니까? "AVAudioSession"에 대한 모든 범주를 시도했습니다. 또한이 시도

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategorySoloAmbient) 
try AVAudioSession.sharedInstance().setActive(true) 

:

나는 다음과 같은 코드를 시도 나는이 링크에 정의 된 모든 카테고리를 시도

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers) 
try AVAudioSession.sharedInstance().setActive(true) 

를하지만, 전화가 음소거되면 소리는 항상 재생 (자동 스위치 ON). https://developer.apple.com/reference/avfoundation/avaudiosession/audio_session_categories

나는이 같은 소리를 연주 해요 :

시스템 소리 :

AudioServicesPlaySystemSoundWithCompletion(1304, nil) 

사용자 정의 소리 :

 let url = Bundle.main.url(forResource: "sound01", withExtension: ".wav") 
     do { 
      if audioPlayer != nil { 
       audioPlayer!.stop() 
       audioPlayer = nil 
      } 
      if let soundURL = soundURL { 
       try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers) 
       try AVAudioSession.sharedInstance().setActive(true) 
       audioPlayer = try AVAudioPlayer(contentsOf: soundURL) 
      } 
      guard let audioPlayer = audioPlayer else { 
       return 
      } 
      audioPlayer.prepareToPlay() 
      audioPlayer.play() 
     } catch let error { 
      print(error.localizedDescription) 
     } 

내가 뭔가 잘못하고 있습니까?

+0

소리를 어떻게 연주하는지 포함하십시오. –

+0

@DanielStorm 방금 업데이트했습니다. 감사. – user3427013

답변

0

해결 방법은 AudioServicesPlaySystemSoundWithCompletion 함수 대신 AudioServicesPlayAlertSound 함수를 사용하는 것이 었습니다.

AVAudioPlayer도 사용할 수 없습니다. AudioServicesPlayAlertSound 함수를 사용하여 각 사용자 지정 사운드의 사운드 ID를 만들어야합니다.

let soundURL = Bundle.main.url(forResource: "test01", withExtension: ".wav") 

if let soundURL = soundURL { 
     var soundID : SystemSoundID = 0 
     AudioServicesCreateSystemSoundID(soundURL as CFURL, &soundID) 
     AudioServicesPlayAlertSound(soundID) 
}