正规365娱乐平台-365bet官方游戏-365体育官网全球最大

Apple播放音频的AVAudioPlayer

AVAudioPlayer 是 AVFoundation 框架中的一个类,专门用于播放音频文件(MP3、WAV、CAF 等)。 基本使用 1、导入 AVFoundation import AVFoundation 2、创建 SoundMan

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可以实现在应用中播放音频、音效,支持同时播放多个音频,也支持循环播放、音量控制和播放状态。

2025年3月19日补充知识点: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/

相关文章

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

附录

完整代码

import AVFoundation

class SoundManager {

static let shared = SoundManager() // 单例

private var players: [String: AVAudioPlayer] = [:]

private init() {

preloadSounds(["blockSound"]) // 预加载音效

}

private func preloadSounds(_ soundNames: [String]) {

for soundName in soundNames {

if let url = Bundle.main.url(forResource: soundName, withExtension: "mp3") {

do {

let player = try AVAudioPlayer(contentsOf: url)

player.prepareToPlay() // 预加载到缓存

players[soundName] = player

print("预加载音效: \(soundName)")

} catch {

print("预加载失败: \(soundName), 错误: \(error.localizedDescription)")

}

} else {

print("找不到音效文件: \(soundName)")

}

}

}

func playSound(named soundName: String) {

DispatchQueue.global(qos: .userInitiated).async {

if let player = self.players[soundName] {

player.currentTime = 0

DispatchQueue.main.async {

player.play()

}

} else {

print("音效未加载: \(soundName)")

}

}

}

}

← 上一篇: 原神散兵周本在哪
下一篇: 火狐浏览器卡顿?看这里的10个技巧 →

相关推荐

本地画面和直播间画面不同步 原来是延迟在作祟

本地画面和直播间画面不同步 原来是延迟在作祟

很多新人主播在第一次直播的时候会发现,直播间的画面和本地机器的画面总是不一致,而且直播间的画面都会比本地画面慢一些,这是为什么

书籍如同什么(书籍如同什么排比句)

书籍如同什么(书籍如同什么排比句)

比喻书的比喻句有哪些? 1、我认为书的比喻句如下:书是人类的良药,帮助人们医治愚昧的顽症。书是人类的相机,帮助人们记录万年的历史。

终于有人把“换手率”讲清楚了:当你了解高位换手率与低位换手率的差别,便能真正了解股票市场

终于有人把“换手率”讲清楚了:当你了解高位换手率与低位换手率的差别,便能真正了解股票市场

来源:雪球App,作者: 分隔符个,(https://xueqiu.com/7422123730/229265275) 炒股前提是稳健,我们入市投资者在炒股过程中,如何把风险降到最低? 一

Win10重启快捷键是哪个-Win10电脑重启快捷键介绍

Win10重启快捷键是哪个-Win10电脑重启快捷键介绍

Win10重启快捷键是哪个?在Win10电脑操作中,用户想通过快捷键重启电脑,但不清楚重启快捷键是哪个?接下来小编给大家详细介绍Win10电脑重启

明日方舟/干员图鉴

明日方舟/干员图鉴

回到方舟主条目 干员图鉴 时装图鉴 家具图鉴 敌方图鉴 材料图鉴 作战地图 剧情一览 活动一览 制作组通讯 卡池一览 世界观 欢迎来到萌娘百科

滴滴出行接驾专线是什么?怎么用?

滴滴出行接驾专线是什么?怎么用?

滴滴出行今日宣布推出“接驾专线”,在打车过程中,司机、乘客双方都无需公开手机号码,可通过“接驾专线”来直接联系沟通。滴滴出行“