2016-11-15 77 views
14

好吧我已经研究过这个,并尝试了许多不同的方式来播放声音时,单击一个按钮。斯威夫特3声音播放

当我在swift 3中点击一个按钮时,如何播放声音? 我有我的声音一个名为声音文件夹中,名称为ClickSound.mp3

+0

这是一个老问题听起来很容易,但它可以被提及的是,使用WAV或CAF音频格式(而不是MP3)的简称声音的推荐方式。 – Whirlwind

+0

@Whirlwind你能解释为什么吗?实际上,我对此非常感兴趣,因为我有一个应用程序,正在使用我正在为他们使用mp3的短音。感谢您向我指出这一点! – SRMR

+1

@SRMR在iOS上只是谷歌关于压缩和解压缩格式。例如,一个wav文件没有压缩,意味着你会得到最好的质量,低cpu影响,但是磁盘空间消耗很大。所以这对于短音非常理想,因为它们不占用光盘上的太多空间。另一方面,mp3是压缩的,所以它会保存你的磁盘空间,这意味着它会保持你的应用程序的大小很低,但它会被解压缩为ram,并且在解压缩时它将占用与未压缩声音相同数量的空间。此外,解压缩对CPU有一定的影响......希望这对你有意义。 – Whirlwind

回答

15

用户低于此功能

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

第一进口AudioToolbox 进口AVFoundation

希望工程:)

+0

这是我的错误。 @Amit Rawat – shane

+0

致命错误:意外发现零,同时展开一个可选值 (lldb) – shane

+0

这是代码func playSound(){ let url = Bundle.main.url(forResource:“ClickSound”,withExtension:“mp3” )! 做{ 让玩家=尝试AVAudioPlayer(contentsOf:URL) 后卫球员==播放其他{}回报 player.prepareToPlay() player.play() }赶上让误差NSError { 打印(错误.description) } } – shane

14

你必须避免玩家被处置,并将其置于你的视图控制器的属性中

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

你对破坏财产的评论拯救了我。谢谢。 – Lengo

+0

@LDD你非常欢迎,我很高兴我可以帮助:) –

3

更简单的方法做,这是把下面的代码行中的按钮按下的功能(注:只在精灵套件作品):

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

希望这有助于:)

5

您可能想要使用SwiftySound。它可以让你玩在斯威夫特3.

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