2016-11-15 74 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")