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

相关文章

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

在Node.js中使用.env文件管理环境变量的全过程

《在Node.js中使用.env文件管理环境变量的全过程》Node.js应用程序通常依赖于环境变量来管理敏感信息或配置设置,.env文件已经成为一种流行的本地管理这些变量的方法,本文将探讨.env文件... 目录引言为什么使php用 .env 文件 ?如何在 Node.js 中使用 .env 文件最佳实践引

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

Linux系统管理与进程任务管理方式

《Linux系统管理与进程任务管理方式》本文系统讲解Linux管理核心技能,涵盖引导流程、服务控制(Systemd与GRUB2)、进程管理(前台/后台运行、工具使用)、计划任务(at/cron)及常用... 目录引言一、linux系统引导过程与服务控制1.1 系统引导的五个关键阶段1.2 GRUB2的进化优