AVAudioPlayer not playing audio in Swift

后端 未结 10 1435
抹茶落季
抹茶落季 2020-12-16 03:10

I have this code in a very simple, single view Swift application in my ViewController:

var audioPlayer = AVAudioPlayer()

@IBAction func playMyF         


        
相关标签:
10条回答
  • 2020-12-16 03:16

    In Swift Coding using Try catch, this issues will solve and play audio for me and my code below,

    var playerVal = AVAudioPlayer()
    
             @IBAction func btnPlayAction(sender: AnyObject) {
                    let fileURL: NSURL = NSURL(string: url)!
                        let soundData = NSData(contentsOfURL: fileURL)
    
                        do {
                            playerVal = try AVAudioPlayer(data: soundData!)
                        }
                        catch {
                            print("Something bad happened. Try catching specific errors to narrow things down",error)
                        }
    
                        playerVal.delegate = self
                        playerVal.prepareToPlay()
    
                        playerVal.play()
    
                  }
    
    0 讨论(0)
  • 2020-12-16 03:17

    Here is a working snippet from my swift project. Replace "audiofile" by your file name.

        var audioPlayer = AVAudioPlayer()
        let audioPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("audiofile", ofType: "mp3"))
        audioPlayer = AVAudioPlayer(contentsOfURL: audioPath, error: nil)
        audioPlayer.delegate = self
        audioPlayer.prepareToPlay()
        audioPlayer.play()
    

    You can download fully functional Swift Audio Player application source code from here https://github.com/bpolat/Music-Player

    0 讨论(0)
  • 2020-12-16 03:17

    I had to declare a global player variable

    var player: AVAudioPlayer!
    

    and set it in viewDidLoad

       override func viewDidLoad() {
            super.viewDidLoad()
            player = AVAudioPlayer()
        }
    

    Then I could play the audio file wherever like this:

        func playAudioFile(){
        do {
            if audioFileUrl == nil{
                return 
            }
               try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)
               try AVAudioSession.sharedInstance().setActive(true)
               /* The following line is required for the player to work on iOS 11. Change the file type accordingly*/
               player = try AVAudioPlayer(contentsOf: audioFileUrl, fileTypeHint: AVFileType.m4a.rawValue)
               /* iOS 10 and earlier require the following line:
               player = try AVAudioPlayer(contentsOf: url, fileTypeHint: AVFileTypeMPEGLayer3) */
               guard let player = player else { return }
               player.play()
            print("PLAYING::::: \(audioFileUrl)")
           }
        catch let error {
               print(error.localizedDescription)
           }
    }
    

    }

    0 讨论(0)
  • 2020-12-16 03:18

    I used the below code in my app and it works. Hope that is helpful.

    var audioPlayer: AVAudioPlayer!
    if var filePath = NSBundle.mainBundle().pathForResource("audioFile", ofType:"mp3"){
    
         var filePathUrl = NSURL.fileURLWithPath(filePath)
         audioPlayer = AVAudioPlayer(contentsOfURL: filePathUrl, error: nil)
         audioPlayer.play()
    }else {
         println("Path for audio file not found")
    }
    
    0 讨论(0)
  • 2020-12-16 03:26

    swift 3.0:

     import UIKit
        import AVFoundation
    
        class ViewController: UIViewController
        {
            var audioplayer = AVAudioPlayer()
    
            @IBAction func Play(_ sender: Any)
            {
                audioplayer.play()
            }
            @IBAction func Pause(_ sender: Any)
            {
                if audioplayer.isPlaying
                {
                    audioplayer.pause()
                }
                else
                {
    
                }
            }
            @IBAction func Restart(_ sender: Any)
            {
                if audioplayer.isPlaying
                {
                    audioplayer.currentTime = 0
                    audioplayer.play()
                }
                else
                {
                    audioplayer.play()
                }
    
            }
            override func viewDidLoad()
            {
                super.viewDidLoad()
    
                do
                {
                    audioplayer = try AVAudioPlayer(contentsOf:URL.init(fileURLWithPath:Bundle.main.path(forResource:"bahubali", ofType: "mp3")!))
                    audioplayer.prepareToPlay()
    
                    var audioSession = AVAudioSession.sharedInstance()
    
                    do
                    {
                        try audioSession.setCategory(AVAudioSessionCategoryPlayback)
                    }
    
                    catch
                    {
    
                    }
                }
                catch
                {
                    print (error)
                }
    
            }
         }   
    
    0 讨论(0)
  • 2020-12-16 03:30

    Important that AvPlayer is class member and not in the given function, else it goes out of scope... :)

    0 讨论(0)
提交回复
热议问题