gpt4 book ai didi

ios - 在 Swift4 中播放声音

转载 作者:行者123 更新时间:2023-11-28 14:25:17 25 4
gpt4 key购买 nike

我得到的声音播放得很好,但我复制了别人的代码,我想理解它。我是 Swift 的新手,过去并没有深入编程,所以请原谅我对术语的误用 - 我相信我的问题仍然很清楚。

这是我的代码:

import UIKit
import AVFoundation

class ViewController: UIViewController{


var xyloSound: AVAudioPlayer?


override func viewDidLoad() {
super.viewDidLoad()
}


@IBAction func Key1(_ sender: UIButton) {

let path = Bundle.main.path(forResource: "note\(sender.tag).wav", ofType: nil)!
let url = URL(fileURLWithPath: path)

do {
xyloSound = try AVAudioPlayer(contentsOf: url)
xyloSound?.play()
} catch {

}

}

}

所以“var xyloSound: AVAudioPlayer?”这一行……​​我猜 AVAudioPlayer 是在 AVFoundation 工具包中定义的音频播放器的一个实例。所以那行代码创建了音频播放器。我的问题是,为什么我们不写“let”而不是“var”?我了解到“let”是常量,看来我们需要创建一个,而且是唯一一个音频播放器,这听起来像是一个常量。

至于这一行:“let path = Bundle.main.path(forResource: "note(sender.tag).wav", ofType: nil)!”

看起来我们正在创建一个名为 path 的常量,它保​​存函数 Bundle.main.path 返回的值(该函数有两个参数)。据我了解,此函数返回关联文件名的路径,这可能是一个字符串。

现在,下一行:“let url = URL(fileURLWithPath: path)”

这样做的目的是什么?我们已经有了存储在“路径”中的音频文件的路径,那么为什么我们还需要任何进一步的信息?

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

1- 它是 var 而不是 let

var xyloSound: AVAudioPlayer?

稍后在这里分配

xyloSound = try AVAudioPlayer(contentsOf: url)

如果你声明它 let 你会得到一个编译错误,你不能改变一个 let 变量,加上可选的 let 甚至不适用,因为它意味着你不会改变它的编译器

2- 你在这里使用 URL

let url = URL(fileURLWithPath: path)

因为 AVAudioPlayer 需要一个 URL 类型而不是路径(字符串类型)

xyloSound = try AVAudioPlayer(contentsOf: url)

看这里 Docs

init(contentsOf url: URL) throws

关于ios - 在 Swift4 中播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51642762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com