CocosCreator3.8研究笔记(十三)CocosCreator 音频资源理解

news2024/11/22 9:54:13

1、 Cocos Creator 支持音频格式


目前 Cocos Creator 支持以下格式的音频文件:

音频格式说明
.ogg.ogg 是一种开源的有损音频压缩格式,与同类型的音频压缩格式相比,优点在于支持多声道编码,采用更加先进的声学模型来减少损失音质,同时文件大小在相同条件下比 .mp3 格式小。目前 Android 系统所有的内置铃声也都使用 .ogg 文件。
.mp3.mp3 是最常见的一种数字音频编码和有损压缩格式。通过舍弃 PCM 音频资料中对人类听觉不重要的部分,达到压缩成较小文件的目的。但对于大多数用户的听觉感受来说,压缩后的音质与压缩前的相比并没有明显的下降。MP3 被大量软硬件支持,应用广泛,是目前的主流。
.wav.wav 是微软与 IBM 公司专门为 Windows 开发的一种标准数字音频文件,该文件能记录各种单声道或立体声的声音信息,并能保证声音不失真,因为音频格式未经过压缩。但文件占用相对较大。
.mp4.mp4 是一套用于音频、视频信息的压缩编码标准,对于不同的对象可采用不同的编码算法,从而进一步提高压缩效率。
.m4a.m4a 是仅有音频的 MP4 文件。音频质量是压缩格式中非常高的,同时在相同的比特率下,文件占用更小。

2、 Cocos Creator 音频资源生成

Cocos Creator 直接将音频文件拖拽到 资源管理器 面板, 会生成相应的音频资源(AudioClip)。

在这里插入图片描述


在这里插入图片描述


3、AudioSource 组件播放音乐

AudioSource 组件的属性说明:

属性说明
Clip添加的用于播放的音频资源,默认为空,点击后面的箭头按钮即可选择。
Loop是否循环播放
PlayOnAwake是否在游戏运行(组件激活)时自动播放音频
Volume音量大小,范围在 0~1 之间

使用AudioSource 组件播放音频步骤:

(1)、在层级管理器中,创建播放音频的节点


在这里插入图片描述


(2)、资源管理器中添加脚本

这里测试命名为:AudioSourceControl.ts


在这里插入图片描述


(3)、在 层级管理器 中绑定脚本

将资源管理器中的脚本文件AudioSourceControl.ts 拖拽到层级管理器中:

在这里插入图片描述


(4)、层级管理器中添加 AudioSource 组件

点击 属性检查器 下方的 添加组件 按钮,选择 Audio -> AudioSource 即可添加 AudioSource 组件到节点上。


在这里插入图片描述


添加节点后如下:

在这里插入图片描述


将资源管理器中的音频文件拖拽到属性检查器中,audiosource 组件的 clip 资源中:

在这里插入图片描述


(5)、AudioSourceControl.ts 中添加AudioSource 属性,并实现播放声音


import { _decorator, Component,  AudioSource,  assert } from 'cc';
const { ccclass, property} = _decorator;

@ccclass('AudioSourceControl')
export class AudioSourceControl extends Component {
   @property(AudioSource)
   public audioSource: AudioSource = null!;

    onLoad() {
   
       // 获取 AudioSource 组件
       const audioSource = this.node.getComponent(AudioSource)!;
       // 检查是否含有 AudioSource,如果没有,则输出错误消息
       assert(audioSource);
       // 将组件赋到全局变量 _audioSource 中
       this.audioSource = audioSource;
       console.log(" this._audioSource==" +  this.audioSource)
   }

   start() {
       this.play()
   }

   update(deltaTime: number) {
       
   }


   play () {
       // 播放音乐
       this.audioSource.play();
       console.log(" this._audioSource play")
   }

   pause () {
       // 暂停音乐
       this.audioSource.pause();
   }
}


(6)、 播放状态的监听

import { _decorator, Component,  AudioSource,  assert } from 'cc';
const { ccclass, property} = _decorator;

@ccclass('AudioSourceControl')
export class AudioSourceControl extends Component {
    
    @property(AudioSource)
    public audioSource: AudioSource = null!;

     onLoad() {

        // 获取 AudioSource 组件
        const audioSource = this.node.getComponent(AudioSource)!;
        // 检查是否含有 AudioSource,如果没有,则输出错误消息
        assert(audioSource);
        // 将组件赋到全局变量 _audioSource 中
        this.audioSource = audioSource;

        console.log(" this._audioSource==" +  this.audioSource)
    }

    onEnable () {
        // Register the started event callback
        this.audioSource.node.on(AudioSource.EventType.STARTED, this.onAudioStarted, this);
        // Register the ended event callback
        this.audioSource.node.on(AudioSource.EventType.ENDED, this.onAudioEnded, this);
    }

    onDisable () {
        this.audioSource.node.off(AudioSource.EventType.STARTED, this.onAudioStarted, this);
        this.audioSource.node.off(AudioSource.EventType.ENDED, this.onAudioEnded, this);
    }
    
    onAudioStarted () {
        console.log("this._audioSource onAudioStarted")
    }

    onAudioEnded () {
        console.log("this._audioSource onAudioEnded")
    }

    start() {
        this.play()
    }

    update(deltaTime: number) {
        
    }

        
    play () {
        // 播放音乐
        this.audioSource.play();
        
        console.log(" this._audioSource play")
    }

    pause () {
        // 暂停音乐
        this.audioSource.pause();
    }
}


在这里插入图片描述


4、AudioSource 组件播放音效

音效播放一般有以下特点:

  • 播放时间短
  • 同时播放的数量多

AudioSource 组件提供 playOneShot 接口来播放音效。

输入参数:

名称类型描述
volumenumber音量 0-1

playOneShot 是一次性播放操作,播放后的音效无法暂停或停止播放,也无法监听播放结束的事件回调。

import { AudioClip, AudioSource, Component, _decorator } from 'cc';
const { ccclass, property } = _decorator;

@ccclass("AudioSourceControl")
export class AudioSourceControl extends Component {     

    @property(AudioClip)
    public clip: AudioClip = null!;   

    @property(AudioSource)
    public audioSource: AudioSource = null!;

    playOneShot () {
        this.audioSource.playOneShot(this.clip, 1);
    }
}


playOneShot 是一次性播放操作,播放后的音效无法暂停或停止播放,也无法监听播放结束的事件回调.


5、音频管理器 AudioManager.ts 封装

//AudioManager.ts
import { Node, AudioSource, AudioClip, resources, director } from 'cc';
/**
 * @en
 * this is a sington class for audio play, can be easily called from anywhere in you project.
 * @zh
 * 这是一个用于播放音频的单件类,可以很方便地在项目的任何地方调用。
 */ 
export class AudioManager {
    private static _inst: AudioManager;
    public static get inst(): AudioManager {
        if (this._inst == null) {
            this._inst = new AudioManager();
        }
        return this._inst;
    }

    private _audioSource: AudioSource;
    constructor() {
        //@en create a node as AudioManager
        //@zh 创建一个节点作为 AudioManager
        let audioMgr = new Node();
        audioMgr.name = '__audioMgr__';

        //@en add to the scene.
        //@zh 添加节点到场景
        director.getScene().addChild(audioMgr);

        //@en make it as a persistent node, so it won't be destroied when scene change.
        //@zh 标记为常驻节点,这样场景切换的时候就不会被销毁了
        director.addPersistRootNode(audioMgr);

        //@en add AudioSource componrnt to play audios.
        //@zh 添加 AudioSource 组件,用于播放音频。
        this._audioSource = audioMgr.addComponent(AudioSource);
    }

    public get audioSource() {
        return this._audioSource;
    }

    /**
     * @en
     * play short audio, such as strikes,explosions
     * @zh
     * 播放短音频,比如 打击音效,爆炸音效等
     * @param sound clip or url for the audio
     * @param volume 
     */
    playOneShot(sound: AudioClip | string, volume: number = 1.0) {
        if (sound instanceof AudioClip) {
            this._audioSource.playOneShot(sound, volume);
        }
        else {
            resources.load(sound, (err, clip: AudioClip) => {
                if (err) {
                    console.log(err);
                }
                else {
                    this._audioSource.playOneShot(clip, volume);
                }
            });
        }
    }

    /**
     * @en
     * play long audio, such as the bg music
     * @zh
     * 播放长音频,比如 背景音乐
     * @param sound clip or url for the sound
     * @param volume 
     */
    play(sound: AudioClip | string, volume: number = 1.0) {
        if (sound instanceof AudioClip) {
            this._audioSource.clip = sound;
            this._audioSource.play();
            this.audioSource.volume = volume;
        }
        else {
            resources.load(sound, (err, clip: AudioClip) => {
                if (err) {
                    console.log(err);
                }
                else {
                    this._audioSource.clip = clip;
                    this._audioSource.play();
                    this.audioSource.volume = volume;
                }
            });
        }
    }

    /**
     * stop the audio play
     */
    stop() {
        this._audioSource.stop();
    }

    /**
     * pause the audio play
     */
    pause() {
        this._audioSource.pause();
    }

    /**
     * resume the audio play
     */
    resume(){
        this._audioSource.play();
    }
}


6、Web 平台的播放限制

目前 Web 平台的音频播放需要遵守最新的 Audio Play Policy,即使 AudioSource 组件设置了 playOnAwake,也需要在第一次用户点击事件发生后,才会播放:


如图,当音乐开始播放后,有声音图标显示:


在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995736.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机基础】Word那些常用便捷操作设置

📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…

分享一个基于python+爬虫的豆瓣电影数据可视化分析系统源码

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、Node.js、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! &#x1…

蓝牙串口调试助手通过PC蓝牙发送数据给ESP32同时在串口上显示

OK,好久没有更新Blog啦 今天把之前积累的代码放上,给需要学习的程序猿们使用 我还是不太喜欢写文字,倒是比较喜欢客套,哈哈 硬件图: ESP32和USB-micro-B数据线一根 蓝牙串口调试助手通过PC蓝牙发送数据给ESP32同时在串口上显示 具体代码如下: #include <Arduino.…

加入【软考部落】一起走过软考之路,共同成长!

&#x1f449; 写在前面&#x1f449; 关于软考&#x1f449; 关于【软考部落】&#x1f449; 关于我 &#x1f449; 写在前面 距 2023 年下半年软考考试还剩两个月&#xff01;各省市均已开启软考报名&#xff01; 【软考部落】顾名思义就是软考学习者的聚集地。创立此部落的初…

笔记随笔:基于selvlet的Web应用程序流程

前言&#xff1a; 欢迎阅读本文&#xff0c;本文将介绍基于Servlet的Web应用程序的开发流程。Servlet是Java技术中用于处理Web请求和生成动态内容的核心组件之一。通过学习本文&#xff0c;您将了解从项目结构搭建到Servlet类编写、配置和部署的全流程&#xff0c;帮助您快速入…

基于SSM的龙腾公司员工信息管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

第25节-PhotoShop基础课程-文本工具组

文章目录 前言1.横排文字工具1.基本操作1.字体选择2.字体大小3.字体颜色4.左对齐5.右对齐6.居中对齐 2.字符 2.段落文字3.蒙版文字 前言 1.横排文字工具 1.基本操作 1.字体选择 2.字体大小 3.字体颜色 4.左对齐 5.右对齐 6.居中对齐 2.字符 2.段落文字 3.蒙版文字

双键网络对讲求助模块

SV-6005 双键网络对讲求助模块 一、描述 SV-6005模块是我司的一款壁挂式一键求助对讲模块&#xff0c;具有10/100M以太网接口&#xff0c;其接收网络的音频数据&#xff0c;实时解码播放&#xff0c;还配置了麦克风输入和扬声器输出。SV-6005模块可实现对讲、广播、监听等功能…

java项目基于 SSM+JSP 的毕业生就业信息管理系统,保证可用

java项目之毕业生就业信息管理系统 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 java项目之毕业生就业信息管理系统**开发环境&#xff1a;**后…

Python基础练习案例

Python基础练习案例 一、Python基础语法1、练习案例1&#xff1a;求钱包余额2、练习案例2&#xff1a;股价计算小程序3、练习案例3&#xff1a;欢迎登陆小程序 二、Python判断语句1、练习案例1&#xff1a;成年人判断2、练习案例2&#xff1a;我要买票吗3、练习案例3&#xff1…

C3a C4a C5a

过敏毒素&#xff1b;

新知同享 | AI 开发广泛应用,高效构建

谷歌致力于通过高效、可靠的方法 构建 AI 驱动的产品 如今已经走过了七年 "AI 为先" 的旅程 一起来看 2023 Google 开发者大会上 AI 开发如何被广泛应用&#xff0c;简化开发 并将机器学习的强大能力 引入到应用和工作流中 提高开发者工作效率 精彩大会现场一览 过去…

Android学习之路(14) Context详解

一. 简介 在 Android 开发中、亦或是面试中都离不开四大组件的身影&#xff0c;而在创建或启动这些组件时&#xff0c;并不能直接通过 new 关键字后跟类名来创建实例对象&#xff0c;而是需要有它们各自的上下文环境&#xff0c;也就是本篇文章要讨论的 Context。 1.1 Contex…

股票量化系统QTYX选股框架实战案例集|华为补涨龙三连板打板进,套利8个点离场-230908...

前言 “实战案例个股画像”系列和大家分享我基于QTYX选股框架&#xff0c;在实战中选股的案例&#xff0c;和大家一起见证QTYX选股框架逐步完善的过程&#xff0c;帮助大家理解QTYX的精髓。 关于QTYX的使用攻略可以查看链接&#xff1a;QTYX使用攻略 关于QTYX初衷和精髓可以查看…

《阿里大数据之路》读书笔记:第三章 数据同步

第三章 数据同步 数据同步技术含义&#xff1a;不同系统间的数据流转&#xff0c;有多种不同的应用场景。 应用场景&#xff1a; 同类型不同集群数据库之间的数据同步主数据库与备份数据库之间的数据备份主系统与子系统之间的数据更新不同地域、不同数据库类型之间的数据传输…

解决ul元素不能跟div同一行显示的办法

现象如下&#xff1a; html结构如下&#xff1a; 可以看到div和ul是同级元素。 为什么这里ul换行了呢&#xff01; 这里要敲黑板了&#xff01; 因为ul是块级元素&#xff01;也就是独占一行&#xff0c;跟div一样。 如果需要ul跟div在同一行显示&#xff0c;则要求ul前面相…

2023国赛高教社杯数学建模C题思路分析

1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

【论文笔记】Perception, Planning, Control, and Coordination for Autonomous Vehicles

单纯作为阅读笔记&#xff0c;文章内容可能有些混乱。 文章目录 1. Introduction2. Perception3. Planning3.1. Autonomous Vehicle Planning Systems3.2. Mission Planning3.3. Behavioral Planning3.4. Motion Planning3.4.1. Combinatorial Planning3.4.2. Sampling-Based P…

python将手机模拟器截屏并发送至电脑上

电脑上安装手机模拟器&#xff0c;截手机屏幕图片&#xff0c;发送至电脑上&#xff0c;&#xff08;继而进一步操作&#xff0c;比如图文识别等&#xff09;。环境&#xff1a;python3.10.4 模拟器&#xff1a;雷电模拟器 模拟器安装路径&#xff0c;我的是&#xff1a;D:\lei…

新AI技术革命:向左走,向右走

前两天阅读到一篇博文&#xff0c;主要是讲海外创业者初创公司的产品情况&#xff0c;整理出来分享给你&#xff0c;如果你也在关注 AI 领域&#xff0c;不妨对照一下。 回归本篇内容正题。 时不时会有朋友问我&#xff1a;有没有一个工具&#xff0c;可以自动完成这系列的工作…