能不能播放ogg, 主要取决于你用的音频库是否有ogg的解码器。
ogg 是谷歌的格式,所以几乎所有的android手机都支持这种格式, cocos2d-x 用windows 默认播放器,所以要装解码器。网上搜索一下 K-Lite Mega Codec Pack。 下载安装后。打开windows Medio Player 是否能播放ogg 音频文件。 如果没问题,接下来还需要改cocos2dx 音频相关的代码。、、
找打micPlayer.cpp.修改open()函数相关的代码,cpp文件位于 cocos2d/cocos/audio/win32 目录
void MciPlayer::Open(const char* pFileName, UINT uId)
{
// WCHAR * pBuf = NULL;
do
{
BREAK_IF(! pFileName || ! _wnd);
int nLen = (int)strlen(pFileName);
BREAK_IF(! nLen);
// pBuf = new WCHAR[nLen + 1];
// BREAK_IF(! pBuf);
// MultiByteToWideChar(CP_ACP, 0, pFileName, nLen + 1, pBuf, nLen + 1);
strExt = cocos2d::FileUtils::getInstance()->getFileExtension(pFileName);
Close();
MCI_OPEN_PARMS mciOpen = {0};
MCIERROR mciError;
//mciOpen.lpstrDeviceType = (LPCTSTR)MCI_ALL_DEVICE_ID; //这是原来的代码
mciOpen.lpstrDeviceType = TEXT("MPEGVideo"); //修改后的代码
WCHAR* fileNameWideChar = new WCHAR[nLen + 1];
BREAK_IF(! fileNameWideChar);
MultiByteToWideChar(CP_ACP, 0, pFileName, nLen + 1, fileNameWideChar, nLen + 1);
mciOpen.lpstrElementName = fileNameWideChar;
// mciError = mciSendCommand(0,MCI_OPEN, MCI_OPEN_ELEMENT, reinterpret_cast<DWORD_PTR>(&mciOpen)); //原来的代码
mciError = mciSendCommandW(0, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_OPEN_TYPE, reinterpret_cast<DWORD_PTR>(&mciOpen)); //修改后的代码
CC_SAFE_DELETE_ARRAY(mciOpen.lpstrElementName);
BREAK_IF(mciError);
_dev = mciOpen.wDeviceID;
_soundID = uId;
_playing = false;
} while (0);
}
上面的代码修改2处,一处是
micOpen.lpstrDeviceType = TEXT("MEPGVideo");
另外一处是
micError = mciSendCommandW(0,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,reinterpret_cast<DWORD_PTR>(&mciOpen))
修改完之后,重新编译libcocos2d 库就可以播放了