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

Apple播放音频的AVAudioPlayer

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

基本使用

1、导入 AVFoundation

import AVFoundation

2、创建 SoundManager(单例模式)

为了方便在整个 App 里播放音效,可以创建一个 SoundManager:

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)")
        }
    }
}

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

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

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

4、在 SwiftUI 中播放音效

Button("播放放置音效") {
    SoundManager.shared.playSound(named: "place_block")
}

进阶用法

同时播放多个音效

默认 AVAudioPlayer 一次只能播放一个音效,如果想要多个音效同时播放,可以使用多个 AVAudioPlayer 实例:

class SoundManager {
    static let shared = SoundManager()
    var players: [AVAudioPlayer] = []

    func playSound(named soundName: String) {
        if let url = Bundle.main.url(forResource: soundName, withExtension: "mp3") {
            do {
                let player = try AVAudioPlayer(contentsOf: url)
                player.play()
                players.append(player) // 保持引用,防止音效被系统回收
            } catch {
                print("播放失败: \(error.localizedDescription)")
            }
        }
    }
}

这样,可以同时播放多个音效,比如放置方块的音效不会被消除音效打断。

循环播放背景音乐

如果游戏有背景音乐,可以使用 numberOfLoops = -1 让音效无限循环:

class MusicManager {
    static let shared = MusicManager()
    var player: AVAudioPlayer?

    func playBackgroundMusic() {
        if let url = Bundle.main.url(forResource: "background_music", withExtension: "mp3") {
            do {
                player = try AVAudioPlayer(contentsOf: url)
                player?.numberOfLoops = -1 // 无限循环
                player?.play()
            } catch {
                print("背景音乐播放失败: \(error.localizedDescription)")
            }
        }
    }

    func stopBackgroundMusic() {
        player?.stop()
    }
}

控制音量

可以设置 volume 来控制音效音量:

player?.volume = 0.5 // 设置为 50% 音量

如果想要让背景音乐和音效有不同的音量:

SoundManager.shared.playSound(named: "place_block") // 音效
MusicManager.shared.playBackgroundMusic() // 背景音乐

检测播放状态

可以检测音效是否正在播放:

if player?.isPlaying == true {
    print("音效正在播放")
} else {
    print("音效已停止")
}

总结

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

相关文章

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

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

发表回复

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