2016-11-15 2 views
14

Ok J'ai regardé cela et j'ai essayé de nombreuses façons de jouer un son quand on clique sur un bouton.Swift 3 sound play

Comment jouer un son quand un bouton est cliqué dans swift 3? J'ai mon son dans un dossier nommé Sons et le nom est ClickSound.mp3

+0

Il est une vieille question, mais il pourrait être mentionné qu'il est un moyen recommandé d'utiliser des formats audio wav ou cafs (plutôt que mp3) pour sons courts. – Whirlwind

+0

@Whirlwind pouvez-vous expliquer pourquoi? Je suis vraiment super intéressé par ça, puisque j'ai une application sur laquelle je travaille avec des sons courts où je suis en train d'utiliser des mp3 pour eux. Merci de me l'avoir signalé! – SRMR

+1

@SRMR Juste google sur les formats compressés et décompressés sur iOS. Par exemple, un fichier wav n'a pas de compression, ce qui signifie que vous obtiendrez la meilleure qualité, un faible impact sur le processeur mais une grande consommation d'espace disque. C'est donc idéal pour les sons courts car ils ne prennent pas trop de place sur le disque. De l'autre côté, mp3 est compressé, donc il sauvera votre espace disque, ce qui signifie qu'il gardera votre taille d'application faible, mais il sera décompressé en RAM, et lorsqu'il sera décompressé, il prendra la même quantité d'espace qu'un son non compressé. La décompression a aussi un impact sur le CPU dans quelques pourcents ... J'espère que cela a du sens pour vous. – Whirlwind

Répondre

15

utilisateur pour cette fonction

//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) 
    } 
} 

première importation AudioToolbox importation AVFoundation

espérons que cela fonctionne :)

+0

Ceci est mon erreur. @Amit Rawat – shane

+0

erreur irrécupérable: trouvé de façon inattendue nil tout en déballant une valeur optionnelle (lldb) – shane

+0

Ceci est le code func playSound() { laissez url = Bundle.main.url (forResource: "ClickSound", avecExtension: "mp3")! do { let joueur = essayer AVAudioPlayer (contentsOf: url) joueur garde == joueur autre {return} player.prepareToPlay() player.play() } catch laisser erreur NSError { impression (erreur .description) } } – shane

14

Vous devez garder le lecteur d'être éliminé, l'obtenir dans une propriété de votre contrôleur de vue

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 :(
     } 
} 
+1

Votre commentaire sur la propriété détruite m'a sauvé.Merci. – Lengo

+0

@LenD Vous êtes le bienvenu, je suis content que je puisse vous aider :) –

3

Un moyen beaucoup plus facile à faire est de mettre la ligne de code suivante dans votre touche fonction enfoncée (Remarque: Fonctionne uniquement dans le kit de sprite):

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

Espoir cela aide :)

5

Vous pouvez utiliser SwiftySound. Il vous permet de jouer des sons facilement dans Swift 3.

Sound.play(file: "ClickSound.mp3")