【问题标题】:Swift 3 sound playSwift 3 声音播放
【发布时间】:2017-03-28 21:06:29
【问题描述】:

好的,我已经对此进行了调查,并尝试了许多不同的方法来在单击按钮时播放声音。

在swift 3中单击按钮时如何播放声音? 我的声音在名为 Sounds 的文件夹中,名称为 ClickSound.mp3

【问题讨论】:

  • 这是一个老问题,但可以提及的是,推荐使用 wav 或 caf 音频格式(而不是 mp3)来播放短音。
  • @Whirlwind 你能解释一下为什么吗?我实际上对此非常感兴趣,因为我有一个我正在使用短声音的应用程序,我目前正在为它们使用 mp3。感谢您向我指出这一点!
  • @SRMR 只是谷歌关于 iOS 上的压缩和解压缩格式。例如,wav 文件没有压缩,这意味着您将获得最佳质量、低 CPU 影响但占用大量磁盘空间。所以这对于短声音来说是理想的,因为它们不会占用过多的磁盘空间。另一方面,mp3 是压缩的,所以它会节省你的磁盘空间,这意味着它会降低你的应用程序大小,但它会被解压缩到内存中,并且在解压缩时它会占用与未压缩的声音相同的空间。减压也会对 cpu 产生一定的影响......希望这对你有意义。
  • 所以 mp3 是背景音乐的理想选择
  • @Whirlwind 这太棒了,感谢您解释并指出我现在也可以找到更多信息的方向:压缩和解压缩格式。

标签: swift3 avfoundation avaudioplayer


【解决方案1】:

此功能下的用户

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

希望它有效:)

【讨论】:

  • 致命错误:在展开可选值 (lldb) 时意外发现 nil
  • 这是代码 func playSound() { let url = Bundle.main.url(forResource: "ClickSound", withExtension: "mp3")! do { let player = try AVAudioPlayer(contentsOf: url) guard player == player else { return } player.prepareToPlay() player.play() } catch let error as NSError { print(error.description) } }
  • 你应该为 "player" 创建一个全局引用 .add var player:AVAudioPlayer?
  • var player: AVAudioPlayer?将其声明为全局。
【解决方案2】:

您必须防止播放器被丢弃,将其放在视图控制器的属性中

唯一真正的问题是您必须将播放器存储为属性 或其他不会立即被破坏的变量——如果你 不要,声音会立即停止。

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

【讨论】:

  • 您对被毁财产的评论救了我。谢谢。
  • @LenD 不客气,我很高兴能帮上忙 :)
【解决方案3】:

您可能想使用SwiftySound。它可以让你在 Swift 中轻松播放声音。

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

【讨论】:

    【解决方案4】:

    一个更简单的方法是在你的按钮按下函数中添加以下代码行(注意:仅适用于 sprite kit):

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

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多