cocos2dx AudioEngine(声音播放)音效播放结束判断测试和背景音乐播放

cocos2dx3.11-lua项目声音系统 cocos2dx3.11版本中声音系统还是使用SimpleAudioEngine引擎,只不过由对其进行了一层封装: AudioEngine.preload(“bg.mp3”)                                                                                 --预加载背景音乐 AudioEngine.playMuis 阅读详情

由于simpleAudioEngine在播放音效时无法获取状态也无法在播放完成后回调,造成音效在按键频繁时发声重叠。改mac版本的库对目前的我来说挑战难度太大。

于是百度了半天,发现3.6版本的cocos2dx有了新的声音播放库AudioEngine。于是体验下,感觉还不错:

直接贴代码:

头文件:

#ifndef __macstudycocos2dx__newAudioEngineTest__

#define __macstudycocos2dx__newAudioEngineTest__


#include <stdio.h>

#include "cocos2d.h"

#include "audio/include/AudioEngine.h"

USING_NS_CC;

using namespace experimental;


class newAudioEngineTest:publicLayer ,publicAudioEngine{

public:

   staticcocos2d::Scene* createScene();

    


   virtualbool init();

    

    // a selector callback

   void playCallback(cocos2d::Ref* pSender);// 点击按钮后开始播放的回调函数

    

 

    CREATE_FUNC(newAudioEngineTest);

    

   bool isplaying=false;//标记播放状态

    

   void changer_playingstatus();//播放完成后的回调函数,用来更改播放状态

    

    

};

newAudioEngineTest.cpp如下:


#endif /* defined(__macstudycocos2dx__newAudioEngineTest__) */


//

//  newAudioEngineTest.cpp

//  macstudycocos2dx

//

//  Created by WangWei on 15/6/23.

//

//


#include "newAudioEngineTest.h"


Scene* newAudioEngineTest::createScene()

{

    // 'scene' is an autorelease object

   auto scene =Scene::create();

    

    // 'layer' is an autorelease object

   auto layer =newAudioEngineTest::create();

    

    // add layer as a child to scene

    scene->addChild(layer);

    

    // return the scene

   return scene;

}

bool newAudioEngineTest::init()

{

    //////////////////////////////

    // 1. super init first

   if ( !Layer::init() )

    {

        return false;

    }

    

   Size visibleSize =Director::getInstance()->getVisibleSize();

    Vec2 origin =Director::getInstance()->getVisibleOrigin();

    

    

    auto menuitem=MenuItemFont::create("play wav", CC_CALLBACK_1(newAudioEngineTest::playCallback,this));

    //创建菜单项,点击时播放音效

    

    menuitem->setPosition(Vec2(0,0));

    

    // create menu, it's an autorelease object

   auto menu =Menu::create(menuitem,NULL);

    menu->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));

   this->addChild(menu,1);

    

   

    

    return true;

}



voidnewAudioEngineTest::playCallback(Ref* pSender)

{


   if (!isplaying) {

        log("wav is not playing!");

       isplaying=true;

       int audioID=play2d("man1.wav");//播放音效文件

       log("audioID =%d",audioID);

        setFinishCallback(audioID,CC_CALLBACK_0(newAudioEngineTest::changer_playingstatus,this));

        //音效播放完成后修改播放状态,此时会用到audioID

    }

   else{

        log("wav is playing,this  click is not response!");

    }

}


voidnewAudioEngineTest::changer_playingstatus(){

    isplaying=false;

    log("finished,status has been change");

}


以下是log输出:(可以看出audioID是改变的,即使播放同一个音效)


2015-06-23 15:24:35.303 macstudycocos2dx iOS[17888:662515] cocos2d: surface size: 1024x768

wav is not playing!

audioID =0

finished,status has been change

wav is not playing!

audioID =1

finished,status has been change

wav is not playing!

audioID =2

finished,status has been change

wav is not playing!

audioID =3

finished,status has been change

wav is not playing!

audioID =4

wav is playing,this  click is not response!   //快速点击时

finished,status has been change

wav is not playing!

audioID =5     

wav is playing,this  click is not response!   //快速点击时

wav is playing,this  click is not response!   //快速点击时

finished,status has been change

wav is not playing!

audioID =6

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

finished,status has been change

wav is not playing!

audioID =7

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

wav is playing,this  click is not response!

finished,status has been change


起初觉得如果音效可以使用AudioEngine来做,记住要用caf和wav格式。背景音乐可以使用simpleAudioEngine来播放,毕竟simpleAudioEngine有缓存机制。

更正下,之所以标红,是今天发现如果同时使用AudioEngine和simpleAudioEngine时会导致音效无法播放,具体原因不清楚。看来只能使用AudioEngine了。

 

AudioEngine中没有了playbackgoudmuisc的方法,背景音乐通过play2d来播放,通过AudioID可以对背景音乐的播放进行控制,用起来也很方便。 



而且,今天发现AudioEngine能播放mp3格式的音乐文件,对于被wav撑得硕大的app来说使用mp3格式无疑是个完美的解决方案,真机的调试效果也是相当满意。

 (未完待续)


如果不继承类时可以使用以下方式来播放哦:

int audioID=experimental::AudioEngine::play2d(wavfilestring->getCString());


cocos2dx学习之路----第十一篇(对声音的操作处理) 这一篇就来谈谈关于声音的加载和播放等问题吧。 阅读详情

相关推荐

Cocos2d-x进阶实战:模块化设计、性能优化与跨平台开发全解析

在游戏开发领域,模块化设计与性能优化是构建高质量、可维护项目的核心工程实践。其原理在于通过合理的代码组织与资源管理,提升渲染效率、减少内存占用,并确保逻辑清晰。对于使用Cocos2d-x等跨平台引擎的开发者而言,掌握这些技术能显著提升开发效率与游戏表现。具体到Cocos2d-x项目,这涉及UI系统的动态列表与触摸事件处理、动画系统的组合与序列控制、以及资源异步加载与本地存储加密等关键场景。例如,通过纹理图集与自动批处理优化Draw Call,或利用引用计数机制避免内存泄漏,都是提升性能的典型手段。本文聚焦于

weixin_34253126的博客 538

cocos2dx-3.5 NewAudioEngine

引入 头文件 #include "audio/include/AudioEngine.h" 播放一个2d的sound int _audioID = AudioEngine::play2d("background.mp3", _loopEnabled, _volume); 停止一个2d在sound  AudioEngine::stop(_audioID); 暂停一个2d在soun

TheClimb的池塘 2509

Cocos2dx - -播放声音和音效的实现

Cocos2d-x提供了对声音和音效的支持,能够十分方便地实现音乐与音效的播放、暂停和循环功能。 使用音效引擎 我们可以使用Cocos2d-x自带的CocosDension库来使用声音引擎。CocosDesion实现了简单易用的SimpleAudioEngine类,为了使用它,我们只需引入他的头文件即可: 1 #include "Si

妙心的专栏 3611

cocos2dx学习之路(九)——声音引擎

声音的控制、事件分发、键盘鼠标事件、加速度传感器、对两个不同层的控制

Jack的博客 6016

Cocos2d-x:Cocos2d-x声音与音频集成教程

在Cocos2d-x中,音频集成主要依赖于和两个类。是Cocos2d-x早期版本中用于音频处理的类,而则是在Cocos2d-x 3.0及以后版本中推荐使用的音频处理类,提供了更丰富的功能和更好的性能。

kkchenjj的博客 1878

Cocos Creator v2.0安卓游戏开发实战:从跳箱子到APK上线

Cocos Creator 是一款面向2D游戏的轻量级跨平台引擎,其v2.0版本虽已迭代,但在安卓中低端设备上仍具不可替代的性能优势。该版本基于WebGL1+Canvas双渲染后端,对Android 7–9系统及联发科/骁龙4系SoC适配更优,启动更快、内存更稳。理解其底层资源加载队列、Canvas动态DPR校准、AudioEngine三重降级策略与Box2D轻量化改造,是保障闯关类游戏帧率稳定、音效不丢、触控不延的关键。本文聚焦真实安卓ROM生态(如MIUI、EMUI、ColorOS)下的逐厂适配实践,覆

weixin_33924220的博客 419

cocos2d-x:Audio的使用

cocos2d-x的声音引擎是CocosDenshion。在创建工程时,如果要包含声音就必须导入这个库。他的使用很简单,在代码中我们与SimpleAudioEngine打交道。它是一个单件,与ActionManager很类似。 游戏中声音主要包含2个方面,背景声音和特效。SimpleAudioEngine的API 也是这么设计的。你可以简单方便的使用它。该有的功能都已经有了。

freeket的专栏 3096

Cocos Creator v2.0安卓真机部署实战指南

Cocos Creator 是一款面向2D游戏开发的跨平台引擎,其v2.0版本因轻量、稳定和成熟安卓构建链路,仍被大量中小团队用于维护与交付。理解v2.0在Android平台的底层构建原理——包括Gradle配置约束、AndroidManifest.xml关键字段、AssetManager资源生命周期、AudioTrack音频缓冲调控及SurfaceFlinger帧级调试——是突破‘编辑器能跑、真机崩溃’交付断层的核心能力。本文聚焦v2.0.10稳定子版本,系统拆解从JS逻辑到APK安装包的全链路技术细节,

weixin_34268310的博客 356

cocos2dx中的AppDelegate.cpp

【代码】cocos2dx中的AppDelegate.cpp。

weixin_44313898的博客 207

从零搭建智能视觉小车:OpenART图像处理+增强现实避坑指南

本文详细指导如何从零搭建智能视觉小车,重点介绍OpenART图像处理与增强现实技术在AprilTag识别中的应用。涵盖硬件选型、环境配置、算法优化及实战调试全流程,特别分享智能汽车竞赛中的避坑技巧和优化方案,帮助开发者构建稳定高效的视觉系统。

yhn456789的博客 1056

企业数字化转型的 4A 架构指南:从概念解读到 TOGAF 阶段对应

4A企业架构是中国数字化转型实践中总结的简化框架,包含业务、应用、数据和技术四个架构层。它自上而下形成业务驱动应用的指导关系,自下而上构建技术支撑数据的实现路径,与国际标准TOGAF核心内容高度对应。该模型通过统一语言、战略对齐和系统梳理,有效连接业务需求与IT实施,已成为企业架构规划的实用工具。其分层结构清晰展示了从业务目标到技术落地的完整推导链,特别适合中国企业的数字化转型场景。

友莘居士的博客 2177

cocos2dx播放声音学习

在cocos2dx播放声音是需要添加 #include "SimpleAudioEngine.h"

Leo的专栏 1350

【腹腔镜数据集】Cholec80+CholecSeg8k2020+Endoscapes2024

计算机辅助手术的发展旨在提高手术的正确性和安全性。然而,研究人员和工程师却面临着开发和训练更好算法所需的注释数据有限的问题。因此,同步定位与建图(SLAM)等基础算法的发展受到限制。基于Cholec80数据集,从Cholec80中的17个视频片段中提取了8,080个腹腔镜胆囊切除术图像帧,对图像进行注释并向公众发布。该数据集名为 CholecSeg8K。这些图像中的每一个都以十三个类别的像素级注释,这些类别通常在腹腔镜胆囊切除术中发现。

Toky_min的博客 2020

Cocos2d-x 3.9教程:3.音乐的播放

1. 音乐的播放 在游戏中,一般音乐分两大类型,一种是长时间播放的背景音乐,一种是根据游戏事件播放的短时间音乐(音效)。 在Cocos2d-X中,使用SimpleAudioEngine类来播放两种类型的声音: 1.1. 播放背景音乐 CocosDenshion::SimpleAudioEngine::getInstance()->playBackgroundMusic("backgroun

tiancao222的博客 1272

同源策略与跨域

前言:最近业务上前端同学多次联系说访问腾讯云cos资源的时候因为跨域的问题访问不到。大致看了下腾讯云关于设置跨域访问的教程,按照前端同学给的域名等选项就给配了,而且测试下来也是好的。但是呢一直不知道什么是跨域这里就做一个简单的学习记录。 一、同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;关于这一点我们后面会举例说明。...

mijichui2153的博客 1万+

电商平台大数据分析指标

一、五大关键数据分析指标 1.1活跃用户量 活跃用户量是一个基本的指标,有 DAU(日活跃用户)、WAU(周活跃用户)和 MAU(月活跃用户)三个层次; 1.2转化 转化是一个非常重要的指标,电商运营需要关注主路径、次路径甚至精细到每一个品类 / SKU 的转化率; 1.3留存 留存要从不同的时间周期上研究,包括次日留存率、3 日、7 日、30 日留存; 1.4复购 复购则要从 3 个角度去看,复购用户量、复购率和复购金额比; 1.5GMV GMV 是最重要的指标,我们的运营最终是围绕这

默主归沙的博客 4820

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试)

Cocos2d-x 3.2 Lua示例CocosDenshionTest(音频测试) 本篇博客介绍Cocos2d-x 3.2中Lua示例的音频测试,Cocos2d-x使用SimpleAudioEngine这个类来实现音频的控制,比如播放、暂停、停止等操作。 Lua代码中,使用的是AudioEngine,具体实现可以参考AudioEngine.lua文件,只是把SimpleAudioEngin进...

weiyinchao88 405

【物联网】探索NE555:一款经典的集成电路(超详细)

NE555是一种集成电路,其内部结构包括比较器、RS触发器、电压比较器和输出级三个主要功能模块,外部引脚则提供了与其他电路元件进行连接的接口。NE555的设计目的是为了提供一种简单方便的定时器解决方案,它广泛应用于模拟和数字电路中。NE555作为一款经典的集成电路,具备设计简单、易于使用和稳定可靠的特点,在电子领域发展了广泛的应用。从单稳态模式到多稳态模式,再到振荡器模式,NE555可以满足不同的需求,并且可以与其他电路元件灵活组合,扩展其功能。然而,需要注意的是NE555也有一些限制。

Goforyouqp的博客 6万+

cocos2dx3.4 新声音引擎bug,自己修复了---带方法,希望引擎组能看到这博客验证下

经过新项目用了coco2dx3.4,发现 新的声音引擎,bug描述如下:我在一个场景的onEnter里面循环播放音乐:AudioEngine::play2d("backsound.mp3",true); 并在场景的onExit函数里面停止:AudioEngine::stopAll(); 然后我切换场景,并在新场景的onEnter里面循环播放音乐:AudioEngine::play2d("te...

菲菲家的吴先森 3230

第8章-认知工程:构建Agent的认知飞轮与自进化《万物皆映射》

认知架构(Cognitive Architecture)是一个系统组织和运行其认知过程的整体设计。对人类而言,认知架构是大脑的结构和功能组织方式;对 AI Agent 而言,认知架构是它处理信息、做出决策、学习经验的系统设计。固定映射 vs 进化映射维度固定映射 Agent进化映射 Agent知识静态(训练时确定)动态(持续积累)策略固定(设计时确定)自适应(经验驱动)工具预定义自主发现/创建错误处理硬编码规则从错误中学习能力边界固定持续扩展在认知工程中,技能。

AI天才研究院 108

【软考中级】多媒体应用设计师复习笔记第十章【free】

第10章法律法规与标准规范 行业标准 缩写的大写拼音 地方标准 DB加生代码 企业标准Q加斜线企业代号国际标准是国际标准化组织ISO和国际电工委员会IEC制定的标准 国家标准是由国务院标准化行政主管部门制定,全国范围内使用 ?强制性国家标准的代号为GB,推荐性国家标准的代号为GB/T。 ?软件开发规范GB8566-88属于强制性国家标准 在这里插入图片描述 行业标准代号由大写汉语拼音字母组成,加上斜线和T,组成推荐性行业标准,如XX/T。已经发布的行业代号有QJ(航天),SJ(电子

weixin_47120900的博客 641

Cocos2D-x如何播放音乐和音效

Cocos2d-x已封装了SimpleAudioEngine用来跨平台。在我们的游戏中,我可以仅用一行代码,就能播放背景音乐和音效。这是非常方便的。 事实上,cocos2d-iphone里包含cocosDenshion库,里面从底到高提供三层接口:CDSoundEngine->CDAudioManager->SimpleAudioEngine,但整个库完全依赖于OpenAL来实现。关于Ope

ZhouJoLoker的专栏 2374

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

cocos2dx基础篇(19)——音乐音效SimpleAudioEngine

【唠叨】本节比较简单,主要讲讲cocos2dx引擎中的音乐音效SimpleAudioEngine。【致谢】http://gl.paea.cn/contents/f86d1f6e2a52e7ea.html【小知识】单例类:说的通俗一点,它就是一个全局静态类。第一次调用时会创建一个全局静态对象,整个游戏的运行过程中会一直存在,全局都可以访问。【Demo下载...

weixin_33675507的博客 525

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

cocos2dx播放背景音乐或者音效

cocos2d-x 游戏中声音 有两种 一种是背景音乐 一种是音效 加载音乐 或者音效的时候 我们需要先缓存声音       #define EFFECT_FILE        "effect1.wav"  //音效     #define MUSIC_FILE        "background.mp3"  //音乐 这两个宏 代表了 音乐和音效的名称或者目录

zhipengit 964

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

cocos2dx3.2 判断音效是否播放

SimpleAudioEngine类中加入一函数 如下   bool isEffectPlaying(unsigned int nSoundId); 定义如下     bool SimpleAudioEngine::isEffectPlaying(unsigned int nSoundId) { EffectList::iterator p = sharedList().fi...

谢小军的专栏 3438

Cocos2d-JS 中游戏背景音乐与音效

游戏中音频的处理也是非常重要的,它分为背景音乐播放与音效播放。 背景音乐是长时间循环播放的,它会长时间占用较大的内存,背景音乐不能多个同时播放。 而音效是短的声音,它占用内存较小,音效能多个同时播放。 在Cocos2d-JS中提供了一个音频引擎—AudioEngine,通过引擎能够很好地控制游戏背景音乐与音效优化播放。 Cocos2d-JS音频文件 音频多媒体文件主要是存放音频数据信

AiCoding_D的博客 1万+
上一篇: cocos2dx tableview基础:实现多图片的滑动显示
下一篇: cocos2dx3.6 弹出对话框的实现
windvally
博客等级 码龄25年 20粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值