oops-framework框架 之 音频管理(六)

2023-12-05 09:44

本文主要是介绍oops-framework框架 之 音频管理(六),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引擎: CocosCreator 3.8.0

环境: Mac

Gitee: oops-game-kit

注: 作者dgflashoops-framework框架QQ群: 628575875


简介


在CocosCreator中,音频的播放主要通过组件: AudioSource 来管理音乐、音效的播放、暂停和停止等功能。

该组件的两个主要接口:

  • play() 用于播放音乐
  • playOneShot() 用于播放音效

CocosCreator官方提供了对应的音频管理器,大致原理是:

  • 在起始场景中,添加根节点,该节点下包含组件AudioSource
  • 该节点在场景脚本中,声明为常驻根节点
  • 声音管理器为单例模式,在项目初始化中,该管理器会获取该组件,用于实现对音频的管理
import { AudioSource, Component, game } from 'cc';
import {audioManager} from 'manager/audioManager';
const { ccclass, property } = _decorator;@ccclass('GameRoot')
export class GameRoot extends Component {@property(AudioSource) _audioSource: AudioSource = null!;onLoad () {// 获取AudioSource组件,并添加到管理器中const audioSource = this.node.getComponent(AudioSource)!;audioManager.instance.init(audioSource);// 声明常驻根节点,该节点不会在场景切换中被销毁game.addPersistRootNode(this.node);        }
}

更多内容可参考博客: CocosCreator笔记 之 背景音乐


AudioManger


oops-framework框架中,音频管理通过AudioManager来实现的。

该类通过管理框架封装的AudioMusicAudioEffect 来实现音乐和音效的播放、暂停和停止等。

他们的继承结构:

音频管理类
音频组件
音乐
音效
AudioManager
Component
AudioSource
AudioMusic
AudioEffect

该管理类提供的主要接口有:

参数或接口说明
progressMusic设置/获取音乐的播放进度
volumeMusic设置/获取音乐的音量,范围在[0, 1]之间
switchMusic设置/获取音乐开关
volumeEffect设置/获取音效音量大小,范围在[0, 1]之间
switchEffect设置/获取音效开关
load()音乐音效的初始化加载,并设置音量大小等
save()本地存储音乐音效的音量、开关等配置数据
playMusic(url, callback?)播放音乐,可添加音乐播放完成回调
playerMusicLoop(url)循环播放音乐
setMusicComplete(callback)设置背景音乐播放完成回调
playEffect(url)播放音效
resumeAll()恢复当前暂停的音乐与音效播放
pauseAll()暂停当前音乐与音效的播放
stopAll()停止当前音乐与音效的播放

有几个关键的方法需要注意下:

  • load() 用于音乐音效的初始化
load() {// 获取或添加AudioSource的组件,用于音乐和音效的管理this.music = this.getComponent(AudioMusic) || this.addComponent(AudioMusic)!;this.effect = this.getComponent(AudioEffect) || this.addComponent(AudioEffect)!;// 获取本地存储数据,设置音乐音效的音量大小和开关let data = oops.storage.get(LOCAL_STORE_KEY);if (data) {try {this.local_data = JSON.parse(data);this._volume_music = this.local_data.volume_music;this._volume_effect = this.local_data.volume_effect;this._switch_music = this.local_data.switch_music;this._switch_effect = this.local_data.switch_effect;}catch (e) {this.local_data = {};this._volume_music = 1;this._volume_effect = 1;this._switch_music = true;this._switch_effect = true;}// 根据数据设置声音大小if (this.music) this.music.volume = this._volume_music;if (this.effect) this.effect.volume = this._volume_effect;}
}
  • playMusic 播放音乐相关
// 播放音乐
playMusic(url: string, callback?: Function) {if (this._switch_music) {this.music.load(url, callback);}
}// AudioMusic.ts 加载音乐并播放
public load(url: string, callback?: Function) {// 根据url进行动态加载oops.res.load(url, AudioClip, (err: Error | null, data: AudioClip) => {if (err) {error(err);}// 检测音乐是否播放中,如果播放则停止if (this.playing) {this._isPlay = false;this.stop();}if (this._url) {oops.res.release(this._url);}// 设置要播放的音频this.enabled = true;this.clip = data;// 注:事件定义在这里,是为了在播放前设置初始播放位置数据callback && callback();// 开始播放this.play();this._url = url;});
}

注:这段代码主要是为了理解框架对音乐音效的封装,先后台加载,完成后才进行播放。


示例


在框架中使用音效管理,在Oops.ts提供的入口主要是:

export class oops {/** 游戏音乐管理 */static audio: AudioManager;
}

在程序中使用的主要示例:

// 初始化
oops.audio.init();
// 设置音乐的播放
oops.audio.volumeMusic = 0.5;
oops.audio.playerMusicLoop("audio/bgm");
// 设置音效的播放
oops.audio.switchEffect = true;
oops.audio.playEffect("audio/click");
// 设置暂停
oops.audio.pauseAll();

注:如果设置页面关闭,注意音频的保存,记得调用save()接口即可。

感谢作者dgflash的分享,作者CSDN博客: dgflash CSDN

最后,祝大家学习和生活愉快!

这篇关于oops-framework框架 之 音频管理(六)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/457056

相关文章

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

mac安装nvm(node.js)多版本管理实践步骤

《mac安装nvm(node.js)多版本管理实践步骤》:本文主要介绍mac安装nvm(node.js)多版本管理的相关资料,NVM是一个用于管理多个Node.js版本的命令行工具,它允许开发者在... 目录NVM功能简介MAC安装实践一、下载nvm二、安装nvm三、安装node.js总结NVM功能简介N

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

IDEA中的Kafka管理神器详解

《IDEA中的Kafka管理神器详解》这款基于IDEA插件实现的Kafka管理工具,能够在本地IDE环境中直接运行,简化了设置流程,为开发者提供了更加紧密集成、高效且直观的Kafka操作体验... 目录免安装:IDEA中的Kafka管理神器!简介安装必要的插件创建 Kafka 连接第一步:创建连接第二步:选