cocos2d-x 之 声音和音效(二)

在上一篇中,写了cocos2d-x 2.1.6版本的声音和音效的播放,结果编写如下代码:

float m_MusicVol = 0.5f;  // (0.0f~1.0f)  音量大小

float m_WavVol = 0.5f;  // (0.0f~1.0f)  音效大小

CocosDenshion::SimpleAudioEngine::sharedEngine()->setBackgroundMusicVolume(m_MusicVol);
CocosDenshion::SimpleAudioEngine::sharedEngine()->setEffectsVolume(m_WavVol);

设置无效,查看了下,后来发现在代码中根本就没有对其相关处理,所以参考cocos2d-x中的TestCpp对其进行了修改,大概如下:

(1)打开MciPlayer.h文件,添加头文件:#include <Digitalv.h>,且添加接口,如下:

class MciPlayer

{

public:

  /*
    设置音量大小 0~1000
    */
    void SetVolume(UINT volume);

/*
    获取音量大小 0~1000
    */
    UINT GetVolume() const;

};

(2)打开MciPlayer.cpp文件,以上接口实现代码如下:

void MciPlayer::SetVolume(UINT volume)
{
    if(!m_hDev)
        return;

MCI_DGV_SETAUDIO_PARMS mciParams = {0};  
    mciParams.dwItem = MCI_DGV_SETAUDIO_VOLUME;  
    mciParams.dwValue = volume;  
    mciSendCommand(m_hDev, MCI_SETAUDIO,
        MCI_DGV_SETAUDIO_ITEM | MCI_DGV_SETAUDIO_VALUE, (DWORD)&mciParams);
}

UINT MciPlayer::GetVolume() const
{
    if(!m_hDev)
        return 0;

MCI_STATUS_PARMS mciParams = {0};  
    mciParams.dwItem = MCI_DGV_STATUS_VOLUME;  
    mciSendCommand(m_hDev, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)&mciParams);

return mciParams.dwReturn;
}

(3)  打开SimpleAudioEngine.h,添加如下代码:

class EXPORT_DLL SimpleAudioEngine : public TypeInfo

{

private:

  float m_effectsVolume;    // 音效音量

};

(4)打开SimpleAudioEngine.cpp,添加如下代码:

SimpleAudioEngine::SimpleAudioEngine():
m_effectsVolume(1.0f)      // 音效音量初始化
{
}

unsigned int SimpleAudioEngine::playEffect(const char* pszFilePath, bool bLoop)
{
    unsigned int nRet = _Hash(pszFilePath);

preloadEffect(pszFilePath);

EffectList::iterator p = sharedList().find(nRet);
    if (p != sharedList().end())
    {
        p->second->Play((bLoop) ? -1 : 1);
        p->second->SetVolume((UINT) (m_effectsVolume * 1000.0f));   // 新代码添加
    }

return nRet;
}

// volume interface

float SimpleAudioEngine::getBackgroundMusicVolume()
{

//return 1.0;
    return sharedMusic().GetVolume() / 1000.0f;
}

void SimpleAudioEngine::setBackgroundMusicVolume(float volume)
{
    sharedMusic().SetVolume((UINT)(volume * 1000.0f));
}

float SimpleAudioEngine::getEffectsVolume()
{

//return 1.0;
    return m_effectsVolume;
}

void SimpleAudioEngine::setEffectsVolume(float volume)
{
    m_effectsVolume = volume;  
    EffectList::iterator iter;  
    for (iter = sharedList().begin(); iter != sharedList().end(); iter++)  
    {  
        iter->second->SetVolume((UINT) (volume * 1000.0f));  
    }
}

接下来编译代码,成功后,便可以控制音量大小了哦。

时间: 2024-10-13 11:25:04

cocos2d-x 之 声音和音效(二)的相关文章

5.cocos2dx中关于draw绘图,声音和音效,预加载,播放与停止Vs暂停和恢复,音量控制

 1 draw绘图 头文件 T19Draw.h #ifndef __T19Draw_H__ #define __T19Draw_H__ #include "cocos2d.h" #include "TBack.h" USING_NS_CC; class T19Draw:public TBack { public: static CCScene * scene(); CREATE_FUNC(T19Draw); bool init(); void draw(); }

cocos2d游戏界面卡住声音正常播放的问题分析

cocos2d游戏界面卡住声音正常播放的问题分析 从目前已知的情况看,出现这种情况只可能是设备的内存不够导致的. 从代码上来说内存不够时会调用AppController的“- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;"方法. // purge memory - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

Cocos2d-X中的声音和音效

在玩游戏时都会有各种游戏音,如启动游戏时会有背景音,胜利或者失败会有一些音效.在Cocos2d-X中能够使用CocosDenshion实现各种声音 在使用CocosDenshion之前须要在程序中加入一个头文件和一个命名空间 #include "SimpleAudioEngine.h" using namespace CocosDenshion; 然后在project文件夹下的Resource文件夹中加入音乐文件 播放背景音乐 //播放背景音乐 //第一个參数:音乐文件名称 //第二个

数字信号处理实验(零)&mdash;&mdash; 一维声音信号处理和二维图像处理

一.在matlab下声音信号的I/O 1.读wav文件函数 ?y = wavread('filename') ?[y,Fs,bits] = wavread('filename') ?[...] = wavread('filename',N) ?[...] = wavread('filename',[N1 N2])   2.写wav文件函数 ?wavwrite(y,'filename') ?wavwrite(y,Fs,'filename') ?wavwrite(y,Fs,N,'filename')

cocos基础教程(9)声音和音效

使用音效引擎 我们可以使用Cocos2d-x自带的CocosDension库来使用声音引擎.CocosDesion实现了简单易用的SimpleAudioEngine类,为了使用它,我们只需引入他的头文件即可: #include "SimpleAudioEngine.h" 支持平台与格式 CocosDesion支持的音乐格式如下: 平台 支持的常见文件格式 备注 Android mp3, mid, oggg, wav 可以播放android.media.MediaPlayer所支持的所有

Cocos2d JS 之消灭星星(十二) 游戏帮助

前面游戏的各个部分都完善了,游戏共一百关,后面还有使用粒子系统的部分,给游戏添加特效:写得有点粗糙 1 /* 2 * @游戏帮助说明 3 */ 4 var GameHelpLayout = ccui.Layout.extend( 5 { 6 ctor:function() 7 { 8 this._super(); 9 this.zinit(); 10 this.setBackButton(); 11 }, 12 //还回按钮 13 setBackButton:function() 14 { 15

cocos2d-x ios游戏开发初认识(八) 音效、粒子系统与存储

我们知道,一个游戏少不了声音,一些好听的声音会提起你对游戏的兴趣,当然做好听的声音不是我们要学的,我们的目的是把声音在适当的时候放出来,顺便在这节中会说下简单的粒子系统和文件存储. 一.声音的播放: 1.新建一个cocos2d工程添加相应的声音图片资源: 播放声音所用到的内容: 代码: 这里可以先在RootViewController.mm里面设置屏幕 禁止旋转 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientat

cocos2dX 之音乐与音效

今天, 我们来学习cocos2dX里面的音乐和音效, 为什么学他呢, 难道你喜欢看无声电影( 旁白: 我就喜欢关着声音玩), 我们不要管旁白了, 她是个疯子 老规矩, 资源准备好: 一首<故宫神思>作为背景音乐, 话说我最喜欢这种调调了, 一个hit.mp3作为背景音效, 话说我百度了好久都没找到其他格式的音效, 将就使用mp3的了, 嘿嘿 嗯, 对了, 先来看看音乐和音效的区别吧: 音乐一般是歌曲, 用来作为背景声音的, 音效一般比较短促, 用来作为打斗效果时或者按下的时候的短促声音 我们来

语言活动:《自然界美妙的声音》(讲述活动)

一.活动内容:语言活动:<自然界美妙的声音>(讲述活动) 二.活动目标: 1.能仔细倾听自然界的声音,大胆地展开联想和描述. 2.热爱大自然,喜欢探究大自然的秘密. 三.活动准备: 经验准备:在目常生活中有意识地引导幼儿注意倾听各种声音,想象声音所表达的内容.请家长有意识引导幼儿倾听家用电器的各种声音. 材料准备:选择幼儿园附近的小溪边作为观赏和活动的场地,确定好行线.集体逗留的场地及引导幼儿观赏的角度;或提前录制小溪流和周边景物的视频. 四.活动过程: (一)组织幼儿来到小溪边(或播放美丽清