Reputation: 3470
I am trying to get the averagePowerForChannel
of my AVAudioPlayer
in order to draw some graphics.
the player is working and playing the songs however, the averagePowerForChannel
is never updated and returns -160
.
I have also enabled metering and I update the meters but still not working.
What am I doing wrong?
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()
}
}
})
}
Upvotes: 0
Views: 761
Reputation: 31
self.audioPlayer?.meteringEnabled = true
you need to activate the meteringEnabled
Upvotes: 3