cocos2dx3.2 win32平台下怎么播放ogg格式的音乐

yym_neusoft
Sat, 25 Apr 2015 03:43:05 +0000

ogg是谷歌的格式，要在Windows上播放必须安装对应的解码器，不过有牛逼的老外做了一套整合各种常用格式解码器包叫 K-Lite Mega Codec Pack，建议装9.0以上的版本。
安装后就去测试能不能用系统自带的播放器WMP播放ogg（如果WMP都不能播放，那cocos2dx也别想播放了）。
通过之后修改cocos音频库的源码（因为MCI有设备类型选择，而MPEGVideo才支持扩展格式），找到cocos\audio\win32\MciPlayer.cpp：
void MciPlayer::Open(const char* pFileName, UINT uId)
{
do
{
BREAK_IF(! pFileName || ! _wnd);
int nLen = (int)strlen(pFileName);
BREAK_IF(! nLen);
int nBufLen = MultiByteToWideChar(CP_UTF8, 0, pFileName, nLen + 1, nullptr, 0);
LPWSTR pBuf = new WCHAR;
BREAK_IF(! pBuf);
MultiByteToWideChar(CP_UTF8, 0, pFileName, nLen + 1, pBuf, nBufLen);

    Close();

    MCI_OPEN_PARMSW mciOpen = {0};
    MCIERROR mciError;
    mciOpen.lpstrDeviceType = TEXT("MPEGVideo");
    mciOpen.lpstrElementName = pFileName;

    mciError = mciSendCommandW(0,MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, reinterpret_cast<DWORD_PTR>(&mciOpen));
    BREAK_IF(mciError);

    _dev = mciOpen.wDeviceID;
    _soundID = uId;
    _playing = false;
} while (0);

}

阅读整个主题