码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-12-30 21:50:02      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:

在上一篇中,写了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));  
    }
}

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

 

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

标签:

原文地址:http://www.cnblogs.com/SkyflyBird/p/5089991.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!