2016-11-15 6 views
14

Хорошо, я просмотрел это и попробовал много разных способов воспроизвести звук при нажатии кнопки.Swift 3 sound play

Как воспроизвести звук при нажатии кнопки в режиме быстрого 3? У меня есть звук в папке Звуки и имя ClickSound.mp3

+0

Это старый вопрос, но можно отметить, что она является рекомендуемым способом использовать WAV или CAF аудио форматы (а не mp3) для коротких звуков. – Whirlwind

+0

@Whirlwind вы можете объяснить, почему? Мне на самом деле очень интересно это, так как у меня есть приложение, над которым я работаю с короткими звуками, где я сейчас использую mp3 для них. Спасибо, что указали мне это! – SRMR

+1

@SRMR Просто google о сжатых и распакованных форматах на iOS. Например, wav-файл не имеет сжатия, означает, что вы получите лучшее качество, низкое влияние процессора, но большое потребление дискового пространства. Таким образом, это идеально подходит для коротких звуков, потому что они не занимают слишком много места на диске. С другой стороны, mp3 сжимается, поэтому он сохранит ваше дисковое пространство, значит, он будет поддерживать низкое значение вашего приложения, но он будет распакован в ram, а при распаковке он займет столько же места, сколько несжатый звук. Кроме того, декомпрессия влияет на процессор в некоторых процентах ... Надеюсь, это имеет смысл для вас. – 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

фатальная ошибка: неожиданно найден nil при разворачивании необязательного значения(lldb) – shane

+0

Это код func playSound() { let url = Bundle.main.url (forResource: "ClickSound", withExtension: "mp3")! сделать { пусть игрок = попробовать AVAudioPlayer (contentsOf: URL) охранник игрок == игрок еще {возвращение} player.prepareToPlay() player.play() } поймать пусть ошибка в NSError { печать (ошибка .) } } – 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

@LenD Добро пожаловать, я рад, что смог помочь :) –

3

Гораздо более простой способ сделать это, чтобы положить следующую строку кода в вашей кнопки нажатой функции (Примечание: Работает только в комплекте спрайт):

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

Надежда это помогает :)

5

Возможно, вы захотите использовать SwiftySound. Это позволяет играть легко звуки в Swift 3.

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