Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In AVAudioPlayer after a pause the song does not continue on Swift

In AVAudioPlayer after a pause the song does not continue, start again on Swift. Problem is when I choose Pause button and again Play button then It should start from starting.

import UIKit
import AVFoundation
class DetailViewController: UIViewController {

let musicArray:[String] = ["reamon", "sandman"]

var audioPlayer: AVAudioPlayer?

var songIndex:Int = 0

@IBAction func pauseButton(sender: AnyObject) {
    audioPlayer!.pause()

}

@IBAction func playButton(sender: AnyObject) {

    let mySound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(musicArray[songIndex], ofType: "mp3")!)

    do{
        audioPlayer = try AVAudioPlayer(contentsOfURL: mySound)
        audioPlayer!.prepareToPlay()
        audioPlayer!.play()
    } catch {
        print("Error getting the audio file")
    }

}

@IBOutlet weak var stopButtonOutlet: UIButton!

@IBAction func stopButton(sender: AnyObject) {
    audioPlayer!.stop()
    audioPlayer!.currentTime = 0
}

func playSongAtIndex(index: Int) {

    songIndex = index

}
like image 686
Zhanserik Avatar asked Mar 14 '23 00:03

Zhanserik


2 Answers

I do another way. It is one button to PLAY and PAUSE.

@IBAction func playPauseButton(sender: AnyObject) {

    if (player.playing == true) {
        player.stop()
        playPauseButtonOutlet.setImage(UIImage(named: "play.jpg"), forState: UIControlState.Normal)
    } else {
        player.play()
        playPauseButtonOutlet.setImage(UIImage(named: "pause.jpg"), forState: UIControlState.Normal)
    }
}
like image 36
Zhanserik Avatar answered May 07 '23 15:05

Zhanserik


you are initialising AVAudioPlayer every time on your play button action try to initialise your AVAudioPlayer in some other method which will called only once try this

override func viewWillAppear(animated: Bool) 
{
        self .intiAudioPlayer()
}

func intiAudioPlayer() 
{

      let mySound = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource(musicArray[songIndex], ofType: "mp3")!)

    do
   {
        audioPlayer = try AVAudioPlayer(contentsOfURL: mySound)
        audioPlayer!.prepareToPlay()
    } 
    catch {
        print("Error getting the audio file")
    }
}

your play button action will contain only this much of code

 @IBAction func playButton(sender: AnyObject) 
{
   audioPlayer!.play() 
}
like image 112
Darshit Vadodaria Avatar answered May 07 '23 16:05

Darshit Vadodaria