StasPutilov
@StasPutilov
Предприниматель.

Как получить доступ к текущей громкости iPhone и отобразить ее в своем приложении на swift?

Здравствуйте.
Возможно ли, разрабатывая приложения на swift под iOS, получить доступ к текущему уровню громкости телефона и отобразить его в плеере?
Пока я использую вариант в AVPlayer:

@IBAction func handleVolumeChange(_ sender: UISlider) {
        player.volume = sender.value
    }


с предустановленным уровнем параметра maximum UISlider, в моем случае 1, двигая бегунок слайдера все работает и громкость изменяется, но начальная громкость стоит 1, а не текущая громкость воспроизведения аудио самого iPhone. Если включить системное приложения Музыка или Подкасты, там всегда уровень слайдера громкости соответсвует текущему уровню громкости воспроизведения аудио самого iPhone.
Заранее спасибо.
  • Вопрос задан
  • 293 просмотра
Пригласить эксперта
Ответы на вопрос 2
YeahGarage
@YeahGarage
Developer
Лучший способ так
Это Вам под редакцию, из игры реализация

let audioFiles: [String: String] = [
        "": "",
        "": "",
        "": "",
        "":"",
        ]
    
    var players : [AVAudioPlayer] = []
    var volume = 0.0
    
//    init () {
//        for (name, ext) in audioFiles {
//            let a1 = setupAudioPlayerWithFile(file: name as NSString, type:ext as NSString)
//            players.append(a1!)
//        }
//    }
//
//    required init?(coder aDecoder: NSCoder) {
//        fatalError("init(coder:) has not been implemented")
//    }
    
    func setVolume(v:Double) {
        volume = v
        for audioPlayer in players {
            audioPlayer.volume = Float(volume)
        }
    }
    
    func playSound(i:Int)
    {
        let audioPlayer = players[i]
        audioPlayer.play()
    }
    
    func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer?  {
        let path = Bundle.main.path(forResource: file as String, ofType: type as String)
        let url = NSURL.fileURL(withPath: path!)
        var audioPlayer:AVAudioPlayer?
        do {
            try audioPlayer = AVAudioPlayer(contentsOf: url)
            audioPlayer!.prepareToPlay()
            
        } catch {
            print("Player not available")
        }
        return audioPlayer
    }
Ответ написан
mixei-ml
@mixei-ml
iOS developer
Уведомления описанные тут у меня не заработали, поэтому использовал таймер просто, чтоб показать работу. Поищите уведомления системные, чтоб работа была адекватной.
Если не активировать сессию, тогда значение outputVolume всегда равно 0.5, поэтому не забудьте это сделать:
do {
    try AVAudioSession.sharedInstance().setActive(true, options: [])
} catch {
    print(error)
}

Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true) {(timer) in
    print(AVAudioSession.sharedInstance().outputVolume)
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы