Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swift 3 sound play

Ok I have looked into this and have tried many different ways to play a sound when a button is clicked.

How would I play a sound when a button is clicked in swift 3? I have my sound in a folder named Sounds and the name is ClickSound.mp3

like image 235
shane Avatar asked Nov 15 '16 04:11

shane


4 Answers

User below this function

 //MARK:- PLAY SOUND
func playSound() {
    let url = Bundle.main.url(forResource: "ClickSound", withExtension: "mp3")!

    do {
        player = try AVAudioPlayer(contentsOf: url)
        guard let player = player else { return }

        player.prepareToPlay()
        player.play()
    } catch let error as NSError {
        print(error.description)
    }
}

first import AudioToolbox import AVFoundation

Hope it works :)

like image 197
Amit Rawat Avatar answered Nov 09 '22 02:11

Amit Rawat


You have to keep the player from being disposed of, get it in a property of your view controller

The only real catch is that you must store your player as a property or other variable that won't get destroyed straight away – if you don't, the sound will stop immediately.

source:

var player : AVAudioPlayer?

func playSound(){
        let path = Bundle.main.path(forResource: "alert", ofType:"mp3")!
        let url = URL(fileURLWithPath: path)

        do {
            let sound = try AVAudioPlayer(contentsOf: url)
            self.player = sound
            sound.numberOfLoops = 1
            sound.prepareToPlay()
            sound.play()
        } catch {
            print("error loading file")
            // couldn't load file :(
        }
}
like image 14
Amr Lotfy Avatar answered Nov 09 '22 01:11

Amr Lotfy


You might want to use SwiftySound. It lets you play sounds easily in Swift.

Sound.play(file: "ClickSound.mp3")
like image 6
Adam Avatar answered Nov 09 '22 02:11

Adam


A much easier way to do this is to put the following line of code in your button pressed function (Note: Only works in sprite kit):

run(SKAction.playSoundFileNamed("ClickSound.mp3", waitForCompletion: false))

Hope this helps :)

like image 3
Luke Roberts Avatar answered Nov 09 '22 03:11

Luke Roberts