AVAudioPlayer not playing audio in Swift

后端 未结 10 1436
抹茶落季
抹茶落季 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:32

    for some reason (probably a bug) Xcode can't play certain music files in the .m4a and the .mp3 format I would recommend changing them all to .wav files to get it to play

    //top of your class
    var audioPlayer = AVAudioPlayer
    
    //where you want to play your sound
    let Sound = NSURL(fileURLWithPath: Bundle.main.path(forResource: "sound", ofType: "wav")!)
        do {
            audioPlayer = try AVAudioPlayer(contentsOf: Sound as URL)
            audioPlayer.prepareToPlay()
        } catch {
            print("Problem in getting File")
        }
        audioPlayer.play()
    
    0 讨论(0)
  • 2020-12-16 03:35

    There's so much wrong with your code that Socratic method breaks down; it will probably be easiest just to throw it out and show you:

    var player : AVAudioPlayer! = nil // will be Optional, must supply initializer
    
    @IBAction func playMyFile(sender: AnyObject?) {
        let path = NSBundle.mainBundle().pathForResource("audioFile", ofType:"m4a")
        let fileURL = NSURL(fileURLWithPath: path)
        player = AVAudioPlayer(contentsOfURL: fileURL, error: nil)
        player.prepareToPlay()
        player.delegate = self
        player.play()
    }
    

    I have not bothered to do any error checking, but the upside is you'll crash if there's a problem.

    One final point, which may or may not be relevant: not every m4a file is playable. A highly compressed file, for example, can fail silently (pun intended).

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

    Based on @matt answer but little bit detailed 'cause original answer did not completely satisfied me.

    import AVFoundation
    
    class YourController: UIViewController {
    
      private var player : AVAudioPlayer?
    
      override func viewDidLoad() {
         super.viewDidLoad()
    
         prepareAudioPlayer()
      }
    
      @IBAction func playAudio() {
    
          player?.play()
      }
    }
    
    extension YourController: AVAudioPlayerDelegate {}
    
    private extension YourController {
    
        func prepareAudioPlayer() {
    
            guard let path = Bundle.main.path(forResource: "you-audio", ofType:"mp3") else {
                return
            }
            let fileURL = URL(fileURLWithPath: path)
            do {
                player = try AVAudioPlayer(contentsOf: fileURL)
            } catch let ex {
                print(ex.localizedDescription)
            }
            player?.prepareToPlay()
            player?.delegate = self
        }
    }
    
    0 讨论(0)
  • 2020-12-16 03:43

    var audioPlayer = AVAudioPlayer()
    var alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("KiepRongBuon", ofType: "mp3")!)
            AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
            AVAudioSession.sharedInstance().setActive(true, error: nil)
            var error:NSError?
            audioPlayer = AVAudioPlayer(contentsOfURL: alertSound, error: &error)
            audioPlayer.prepareToPlay()
            audioPlayer.play()

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