Apple播放音频的AVAudioPlayer
Apple播放音频的AVAudioPlayer

Apple播放音频的AVAudioPlayer

AVAudioPlayer 是 AVFoundation 框架中的一个类,专门用于播放音频文件(MP3、WAV、CAF 等)。

基本使用

1、导入 AVFoundation

import AVFoundation

2、在SwiftUI中使用

import AVFoundation

var player: AVAudioPlayer?

func playSound() {
    guard let url = Bundle.main.url(forResource: "test", withExtension: "mp3") else { return }
    
    do {
        player = try AVAudioPlayer(contentsOf: url)
        player?.prepareToPlay()
        player?.numberOfLoops = 0
        player?.volume = 1.0
        player?.play()
    } catch {
        print("音频加载失败:\(error)")
    }
}

3、确保音效文件已加入 Xcode

拖入 .mp3 或 .wav 文件 到 Xcode 项目的 Assets 目录(或直接放入 Bundle 目录)。

例如,音效文件名为 “place_block.mp3” 和 “clear_block.mp3”。

4、在 SwiftUI 中播放音效

Button("播放放置音效") {
    playSound()
}

常用属性

1、isPlaying:布尔类型,表示是否正在播放。

2、duration:Double类型,音频总时长。

3、currentTime:Double类型,当前播放进度(可读写控制音频播放进度)。

4、volume:Float类型,音量 0.0 ~ 1.0。

5、pan:Float类型,左右声道平衡 -1.0 ~ +1.0。

6、numberOfLoops:Int类型,循环播放次数,-1表示无限循环。

7、enableRate:布尔类型,表示是否开启倍速播放。

8、rate:Float类型,1.0正常、0.5半速、2.0 2倍速,需要开启enableRate后,才能使用。

9、isMeteringEnabled:布尔类型,开启音量检测。

11、averagePower(forChannel: 0):平均功率(dB)。

12、peakPower(forChannel:0):峰值功率(dB)。

13、delegate = self:设置代理,监听播放结束。

常用方法

1、prepareToPlay():预加载,减少播放延迟。

2、play():播放。

3、pause():暂停。

4、stop():停止并重置时间为0.

5、play(atTime:1.0):指定时间点开始播放。

6、updateMeters(): 更新音量电平,用于波形动画数据。

代理(监听播放结束和错误)

class SoundManager: NSObject, AVAudioPlayerDelegate {

    var player: AVAudioPlayer?

    func setup() {
        let url = Bundle.main.url(forResource: "test", withExtension: "mp3")!
        player = try? AVAudioPlayer(contentsOf: url)
        player?.delegate = self
        player?.prepareToPlay()
    }

    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        print("播放结束")
    }

    func audioPlayerDecodeErrorDidOccur(_ player: AVAudioPlayer, error: Error?) {
        print("解码错误:\(String(describing: error))")
    }
}

总结

使用AVAudioPlayer可以实现在应用中播放音频、音效,支持同时播放多个音频,也支持循环播放、音量控制和播放状态。

AVAudioPlayer在实际应用中,首次播放音效可能会造成UI卡顿的场景,解决方案就是在应用入口设置预加载音效,具体解决方案《SwiftUI首次播放AVAudioPlayer导致卡顿的问题》。

免费音乐/音效网站

1、p1ixabay:https://pixabay.com/zh/

2、mixkit:https://mixkit.co/free-sound-effects/

3、freesound:https://freesound.org/

4、zapsplat:https://www.zapsplat.com/

相关文章

1、Apple多媒体框架avfoundation:https://fangjunyu.com/2024/12/11/apple%e5%a4%9a%e5%aa%92%e4%bd%93%e6%a1%86%e6%9e%b6avfoundation/

2、SwiftUI首次播放AVAudioPlayer导致卡顿的问题:https://fangjunyu.com/2025/03/16/swiftui%e5%ae%89%e8%a3%85%e5%90%8e%e9%a6%96%e6%ac%a1%e8%bf%90%e8%a1%8c%e5%87%ba%e7%8e%b0%e5%8d%a1%e9%a1%bf%e9%97%ae%e9%a2%98/

扩展知识

单例模式管理

iOS 可以通过创建单例模式,在整个 App 里播放音效:

class SoundManager {
    static let shared = SoundManager() // 单例
    var player: AVAudioPlayer?

    func playSound(named soundName: String) {
        if let url = Bundle.main.url(forResource: soundName, withExtension: "mp3") {
            do {
                player = try AVAudioPlayer(contentsOf: url)
                player?.play()
            } catch {
                print("播放失败: \(error.localizedDescription)")
            }
        } else {
            print("找不到音效文件: \(soundName)")
        }
    }
}
   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注