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

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

使用Python实现文本转语音(TTS)并播放音频

《使用Python实现文本转语音(TTS)并播放音频》在开发涉及语音交互或需要语音提示的应用时,文本转语音(TTS)技术是一个非常实用的工具,下面我们来看看如何使用gTTS和playsound库将文本... 目录什么是 gTTS 和 playsound安装依赖库实现步骤 1. 导入库2. 定义文本和语言 3