Swift 如何播放音频
在Swift中,有一个名为AVFoundation的框架,提供了灵活性来播放音频文件。这个框架提供了一个叫做AVAudioPlayer的类来管理音频播放和暂停。在本文中,您将学习如何在Swift中使用AVAudioPlayer类播放音频。
AVFoundation
这个框架是Swift中非常强大的多媒体框架。它为您提供了大多数用于处理媒体文件(如音频、视频和其他类型的媒体文件)的功能。这个框架使用一些常见的类来管理媒体文件。
- AVPlayer − 这是一个支持高质量音频和视频播放的类。它可以播放本地或远程媒体文件,并具有停止、搜索和音量调整控件。
-
AVAudioPlayer − 这是一个专门设计用于播放音频文件的AVPlayer子类。它还具有调整循环次数、修改播放速率和调整响度等其他功能。
-
AVCaptureSession − 这个类用于从输入设备(如摄像头和麦克风)捕捉媒体内容。它可以录制视频和音频,并具有改变曝光、对焦和其他捕捉设置的选项。
-
AVAsset − 这是一个表示媒体资产(如视频或音频文件)的类。它提供了诸如持续时间和格式之类的资产元数据,并可用于提取单个帧或视频内容的部分。
-
AVMetadata − 这是一个用于处理媒体资产元数据的类,如标题、艺术家和专辑信息。它可以读取和写入元数据,并为常用的元数据字段提供了一组定义的键。
-
AVPlayerLayer − 一个层子类,能够显示AVPlayer实例的视频内容。它允许您将视频播放集成到程序的用户界面中,并提供修改纵横比和其他显示参数的选项。
这些只是AVFoundation框架中最有价值的几个类和功能之一。在Swift中,有几个不同的类和API用于与媒体资产交互,包括支持实时音频处理、视频编辑等。
AVAudioPlayer类是AVFoundation框架中AVPlayer类的一个子类,它为您的Swift应用程序提供了播放音频内容的简单接口。下面是AVAudioPlayer类的一些关键属性和方法。
属性
- currentTime − 此属性返回音频文件的当前播放时间(以秒为单位)。
-
duration − 此属性返回音频文件的持续时间(以秒为单位)。
-
volume − 此属性设置音频播放的音量范围为0.0(静音)到1.0(最大音量)。
-
numberOfLoops − 此属性设置音频文件在停止前应播放的次数。值-1意味着应无限循环音频文件。
-
isPlaying − 此属性返回一个布尔值,指示音频文件当前是否正在播放。
方法
-
init(contentsOf url: URL) − 这是AVAudioPlayer类的指定初始化程序,它提供要播放的音频文件的URL。
-
play() − 此方法开始播放音频文件。
-
pause() − 此方法暂停音频文件播放。
-
stop() − 此方法停止音频文件播放。
-
prepareToPlay() − 此方法通过将音频文件加载到内存中并执行任何必要的初始化来为播放器准备播放。
-
setVolume(_ volume: Float, fadeDuration: TimeInterval) − 此方法设置音频播放器的音量,并提供可选的淡入或淡出持续时间。
-
currentTime (setter) − 此方法设置音频文件的当前播放时间(以秒为单位)。
-
numberOfLoops (setter) − 此方法设置音频文件在停止前应播放的次数。
下面是一个播放和暂停声音的示例
-
步骤1 − 首先,将音频文件添加到您的项目目录中。在本例中,我们将名为“sample_audio.mp3”的音频文件添加到本地目录中。
-
步骤2 − 要在Swift中播放音频文件,您需要导入AVFoundation框架。
-
步骤3 − 现在,我们声明一个属性,如“var audioPlayer: AVAudioPlayer?”来播放音频文件。
-
步骤4 − 您可以初始化一个AVAudioPlayer类的对象。您可以使用AVAudioPlayer(contentsOf:URL)初始化程序,提供音频文件的本地URL。
-
步骤5 − 要从URL播放和暂停音频文件,您需要调用“play”和“pause”方法以暂停正在进行的音频文件。
示例
import UIKit
import AVFoundation
class TestController: UIViewController {
private var audioPlayer: AVAudioPlayer?
private lazy var playButton: UIButton = {
let button = UIButton()
button.backgroundColor = .darkGray
button.setTitle("Play Sound", for: .normal)
button.setTitleColor(.white, for: .normal)
button.titleLabel?.font = UIFont.systemFont(ofSize: 17, weight: .medium)
button.layer.cornerRadius = 10
button.clipsToBounds = true
button.addTarget(self, action: #selector(handleButtonTapped), for: .touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
override func viewDidLoad() {
super.viewDidLoad()
initialSetup()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
private func initialSetup() {
view.backgroundColor = .white
navigationItem.title = "Play Sound"
view.addSubview(playButton)
playButton.heightAnchor.constraint(equalToConstant: 45).isActive = true
playButton.widthAnchor.constraint(equalToConstant: 250).isActive = true
playButton.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
playButton.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
}
@objc private func handleButtonTapped() {
if audioPlayer != nil && audioPlayer!.isPlaying {
audioPlayer?.pause()
playButton.setTitle("Play Sound", for: .normal)
} else {
guard let path = Bundle.main.path(forResource: "sample_audio", ofType:"mp3") else {
return
}
let url = URL(fileURLWithPath: path)
do {
if audioPlayer == nil {
audioPlayer = try AVAudioPlayer(contentsOf: url)
}
audioPlayer?.play()
playButton.setTitle("Pause Sound", for: .normal)
} catch let error {
print(error.localizedDescription)
}
}
}
}
输出
结论
你可以导入AVFoundation框架来使用AVAudioPlayer类。这个类提供了播放和暂停音频文件的功能。此类还提供其他属性和方法来管理执行。