AVAudioSession.sharedInstance().outputVolume未返回正确的卷一致性

b5lpy0ml  于 2023-10-21  发布在  iOS
关注(0)|答案(2)|浏览(123)

使用下面的代码,我得到了输出音量,但它确实不一致-有时它给出了相同的值,有时它是一个音量变化背后,尽管系统音量实际上正确地改变。
有没有办法让它每次都输出正确的值?

func viewDidLoad() {
...

        NotificationCenter.default.addObserver(self, selector: #selector(volumeDidChange), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
...

}

func volumeDidChange() {
   print("VOLUME CHANGING", AVAudioSession.sharedInstance().outputVolume)

// output while changing the volume with hardware buttons
VOLUME CHANGING 0.0625
VOLUME CHANGING 0.0625
VOLUME CHANGING 0.125
VOLUME CHANGING 0.1875
VOLUME CHANGING 0.25
VOLUME CHANGING 0.375
VOLUME CHANGING 0.375
VOLUME CHANGING 0.4375
VOLUME CHANGING 0.5
VOLUME CHANGING 0.5625
VOLUME CHANGING 0.625
VOLUME CHANGING 0.6875
VOLUME CHANGING 0.75
VOLUME CHANGING 0.8125
VOLUME CHANGING 0.875
VOLUME CHANGING 0.75
VOLUME CHANGING 0.6875
VOLUME CHANGING 0.625
VOLUME CHANGING 0.625
VOLUME CHANGING 0.5625
VOLUME CHANGING 0.5
VOLUME CHANGING 0.4375
VOLUME CHANGING 0.375
VOLUME CHANGING 0.3125
VOLUME CHANGING 0.375
VOLUME CHANGING 0.4375
VOLUME CHANGING 0.4375
uyto3xhc

uyto3xhc1#

尝试

import AVFoundation
import MediaPlayer

//MARK: Did Load
override func viewDidLoad() {
    super.viewDidLoad()

    /// Volume View
    let volumeView = MPVolumeView(frame: CGRect(x: 100, y: 100, width: 100, height: 100))
    volumeView.isHidden = false
    volumeView.alpha = 0.01
    view.addSubview(volumeView)

    /// Notification Observer
     NotificationCenter.default.addObserver(self, selector: #selector(self.volumeDidChange(notification:)), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
}

@objc func volumeDidChange(notification: NSNotification) {
    //print("VOLUME CHANGING", AVAudioSession.sharedInstance().outputVolume)

    let volume = notification.userInfo!["AVSystemController_AudioVolumeNotificationParameter"] as! Float
    print("Device Volume:\(volume)")
}

您当前的输出-重复相同的值

所需输出

quhf5bfb

quhf5bfb2#

Swift 4.2更新

override func viewDidLoad() {
    super.viewDidLoad()
    let session = AVAudioSession.sharedInstance()
    
    do {
        try session.setActive(true)
    } catch {
        print("error in getting volume")
    }
    
    if session.outputVolume < 1.0 {
        volumeButton = 0
    } else {
        volumeButton = 1
    }
    
    NotificationCenter.default.addObserver(self, selector: #selector(self.volumeDidChange(notification:)), name: NSNotification.Name(rawValue: "AVSystemController_SystemVolumeDidChangeNotification"), object: nil)
}

@objc func volumeDidChange(notification: NSNotification) {
    if let volume = notification.userInfo?["AVSystemController_AudioVolumeNotificationParameter"] as? Float{
        print("Device Volume:\(volume)")
    } else{
        print("Error while reading value...")
    }
}

相关问题