【问题标题】:Swift 2 - AVAudioPlayer averagePowerForChannel returns always -160Swift 2 - AVAudioPlayer averagePowerForChannel 总是返回 -160
【发布时间】:2015-12-01 01:52:12
【问题描述】:

我正在尝试获取我的AVAudioPlayeraveragePowerForChannel 以绘制一些图形。

播放器正在播放歌曲,但averagePowerForChannel 从未更新并返回-160

我还启用了计量并更新了计量但仍然无法正常工作。

我做错了什么?

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

       timerAudio = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "checkTime", userInfo: nil, repeats: true)

self.audioPlayer?.meteringEnabled
       playAudio( false, SongNumber: 2)
}

     func checkTime() {

                self.audioPlayer?.updateMeters()
                self.audioPlayer?.numberOfChannels
                let normalizedValue = self.audioPlayer?.averagePowerForChannel(0)

                print(normalizedValue)
                self.waveformView.updateWithLevel(CGFloat(normalizedValue!))
        }

    func playAudio( stopAudio:Bool, SongNumber: Int) {

            let songNumber = SongsArray
            let songNumberMediaPlayer = SongsArray

            nameSong(songNumber[SongNumber])

        do {
                    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
                    //print("AVAudioSession Category Playback OK")
                    do {
                        try AVAudioSession.sharedInstance().setActive(true)
                        //print("AVAudioSession is Active")
                    } catch let error as NSError {
                        print(error.localizedDescription)
                    }
                } catch let error as NSError {
                    print(error.localizedDescription)
                }

                let dispatchQueue =
                dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)

                dispatch_async(dispatchQueue, {
                    let mainBundle = NSBundle.mainBundle()


                    /* Find the location of our file to feed to the audio player */
                    let filePath = mainBundle.pathForResource(songNumber[SongNumber], ofType:"mp3")

                    if let path = filePath{
                        let fileData = NSData(contentsOfFile: path)

                        do {
                            /* Start the audio player */
                            self.audioPlayer = try AVAudioPlayer(data: fileData!)

                            guard let player = self.audioPlayer else{
                                return
                            }

                            /* Set the delegate and start playing */
                            player.delegate = self
                            if player.prepareToPlay() && player.play(){
                                /* Successfully started playing */




                            } else {
                                /* Failed to play */
                            }

                        } catch{
                            self.audioPlayer = nil
                            return
                        }



                        if stopAudio == true {
                            self.audioPlayer?.pause()
                            self.timerAudio.invalidate()

                        }else {

                            self.audioPlayer?.play()

                        }


                    }

                })

            }

【问题讨论】:

    标签: audio swift2 avaudioplayer avaudiosession


    【解决方案1】:
    self.audioPlayer?.meteringEnabled = true
    

    你需要激活meteringEnabled

    【讨论】:

    • 这就是我所缺少的。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2015-12-28
    • 2021-03-13
    相关资源
    最近更新 更多