Я работаю над приложением с фортепианной клавиатурой. Я хочу, чтобы звук после нажатия клавиш воспроизводился только тогда, когда на ринге включен переключатель «Звонок / Без звука» Тогда он должен остановить фоновую музыку из других приложений. Если переключатель «Звонок / Без звука» находится в режиме «без звука», он ничего не должен делать и позволяет воспроизводить фоновую музыку из других приложений (например, Spotify).
Что я пробовал (с Spotify в качестве фоновой музыки):
Вариант 1 [AVAudioSessionCategoryAmbient]:
Переключатель «Звонок / Без звука» включен: фоновая музыка не останавливается и воспроизводит звук в приложении вместе с фоновой музыкой (-> Что я не хочу)
Переключатель «Звонок / Без звука» отключен: фоновая музыка не останавливается и не воспроизводятся звуки в приложении (-> Что я хочу)
Вариант 2 [AVAudioSessionCategorySoloAmbient]:
Переключатель «Звонок / Без звука» включен: фоновая музыка останавливается и воспроизводится звук в приложении (-> Что я хочу)
Переключатель «Звонок / Без звука» отключен: фоновая музыка останавливается, но звуки в приложении не воспроизводятся (-> Что я хочу, это не должно останавливать фоновую музыку)
Я думаю, что вариант 2 - самый близкий вариант, который я могу получить. IPhone не должен останавливать фоновую музыку, когда переключатель «Звонок / Без звука» включен, и я был бы счастлив.
Вариант 3 [AVAudioSessionCategoryPlayback]:
Включен переключатель «Звонок / Без звука»: фоновая музыка останавливается и воспроизводится звук в приложении (-> Что я хочу)
Переключатель «Звонок / Без звука» отключен: фоновая музыка останавливается и воспроизводится звук в приложении (-> Что я не хочу)
Мой код:
let NoteSound = NSURL(fileURLWithPath: Bundle.main.path(forResource: currentNote.sound, ofType: "m4a")!)
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
try AVAudioSession.sharedInstance().setActive(true)
audioPlayer = try AVAudioPlayer(contentsOf: NoteSound as URL)
audioPlayer.prepareToPlay()
audioPlayer.play()
} catch {
print("Problem in getting File")
}
В примере кода я только изменил .setCategory()
.