如何获取当前音量的iPhone并在使用swift播放音乐时进行更改?

时间:2018-11-10 14:56:21

标签: swift

在我的应用中,我需要使用滑块更改音量,我已经使用了当前音量

@IBOutlet weak var volumeChange: UISlider! {
    didSet {
        let audioSession = AVAudioSession.sharedInstance()
        let volume : Float = audioSession.outputVolume
        volumeChange.setValue(volume, animated: true)
    }
}

如何更改它?现在,我有了这种方法

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

在这种情况下,此方法无效。是否可以像在“音乐”应用中使之成为现实:通过更改设备中的音量来更改应用中的音量?

2 个答案:

答案 0 :(得分:3)

要获取音量,您将需要像以前一样使用AVAudioSession.sharedInstance().outputVolume

为了允许用户控制音量,您需要看一下Media Player框架中的MPVolumeView。该组件可以更改系统音量。

使用非常简单:

let volumeView = MPVolumeView(frame: volumeViewSize)
playerView.addSubview(volumeView)

您将要使用此类而不是使用UISlider实例。提供的方法可让您覆盖滑块的外观。

此外,此类还提供一个控件,该控件允许用户选择输出路线(例如,iPhone,Airpods,Homepod或Apple TV)。您可以选择禁用滑块或输出路径控件,这样可以通过自定义用户界面为您提供相当广泛的选项。

如果使用情节提要,则需要将其添加到代码中。首先在情节提要上的视图控制器的视图中创建一个空的UIView并将其附加到您的视图控制器:

A view controller story board with a placeholder view

添加后,您将在视图控制器中获得以下内容:

@IBOutlet var volumeSliderContainer: UIView!

private lazy var volumeView: MPVolumeView = {
    let volumeView = MPVolumeView(frame: volumeSliderContainer.bounds)
    volumeView.showsVolumeSlider = true
    volumeView.showsRouteButton = true
    volumeView.translatesAutoresizingMaskIntoConstraints = false
    return volumeView
}()

override func viewDidLoad() {
    super.viewDidLoad()

    volumeSliderContainer.addSubview(volumeView)
    NSLayoutConstraint.activate([
        volumeView.widthAnchor.constraint(equalTo: volumeSliderContainer.widthAnchor),
        volumeView.heightAnchor.constraint(equalTo: volumeSliderContainer.heightAnchor),
        volumeView.centerXAnchor.constraint(equalTo: volumeSliderContainer.centerXAnchor),
        volumeView.centerYAnchor.constraint(equalTo: volumeSliderContainer.centerYAnchor),
    ])
}

现在,您将可以根据需要与MPVolumeView进行交互。

仅需在模拟器上当心,该组件将不会渲染滑块,只有在实际设备上运行应用程序时,您才能看到它。

答案 1 :(得分:0)

获取当前系统卷-

from nltk import word_tokenize
[prev for prev,this in zip(lines,lines[1:]) 
           if words & set(word_tokenize(this))]
#['I want this line1.', 'I want this line2.']