关于音乐播放程序的问题,解决了一些问题,但还是存在问题
在大家的帮组下,解决了一些问题,但还是存在一些问题,再次麻烦大家。
主要程序如下,音乐正在播放的时候,我是在按了 下方向键 的时候调用 my_nextsong(),接着的几个函数在下面,播放下一首歌曲。但是,当我按了下方向键后,程序抛出错误:0X*******指令引用0X********内存,该内存不能为READ之类的错误,进行调试时,程序又正常的运行了。我的理解还是在调试模式下,程序运行速度相对较慢,所以系统有时间来进行事件处理。由于刚接触BREW,所以有些地方确实不知道怎么办好。很是苦恼。希望高手能详细指点下,到底是哪个环节出了问题,该怎么弥补。
//播放下一首
void my_nextsong(void* puser)
{
pMe->m_path="media\\2009010101.mp3"; //资源确实存在,路径没有错。
popmusic_player_stop(pMe);
}
//回调函数
void my_playnotify(void *puser, AEEMediaCmdNotify *pCmdNotify)
{
myfirstapp* pMe = (myfirstapp*)puser;
if (pCmdNotify->nCmd == MM_CMD_PLAY )
{
switch (pCmdNotify->nStatus)
{
case MM_STATUS_START:
break;
case MM_STATUS_TICK_UPDATE:
pMe->m_dwPlayprs += 1; //跟新当前进度
break;
case MM_STATUS_DONE:
if(pMe->m_pMedia!=NULL)
{
IMEDIA_RegisterNotify(pMe->m_pMedia, NULL, pMe);
IMEDIA_Release(pMe->m_pMedia);
pMe->m_pMedia=NULL;
}
my_play(pMe,pMe->m_path,my_playnotify);
break;
default:
break;
}
}
else if (pCmdNotify->nCmd == MM_CMD_GETTOTALTIME)
{
if (pCmdNotify->nStatus == MM_STATUS_DONE )
{
pMe->m_dwTotalTime= (uint16)(((uint32)pCmdNotify->pCmdData) / 1000 );
IMEDIA_Play(pMe->m_pMedia);
}
}
}
//播放函数
void my_play(void* pMfp,const char *pszFile,void*)
{
myfirstapp* pMe =(myfirstapp*) pMfp;
int nRet;
char *filesz = STRDUP(pszFile);
pMe->m_md.clsData = MMD_FILE_NAME;
pMe->m_md.pData = (void *)filesz;
pMe->m_md.dwSize = 0;
pMe->szFileName = (char *)pszFile;
if(pMe->m_pMedia!=NULL)
{
IMEDIA_Release(pMe->m_pMedia);
pMe->m_pMedia=NULL;
}
ISHELL_CreateInstance(pMe->a.m_pIShell, AEECLSID_MEDIAMP3, (void **)&(pMe->m_pMedia)); /* 创建pimedia对象,指定使用MP3文件 */
nRet=IMEDIA_SetMediaData(pMe->m_pMedia, &pMe->m_md); /* 设置音频信息 */
if(nRet == SUCCESS)
{ //注册回调函数
pMe->b_register = IMEDIA_RegisterNotify(pMe->m_pMedia, player_handler, pMe);
if(SUCCESS == pMe->b_register)
{
IMEDIA_GetTotalTime(pMe->m_pMedia);
}
}
}
//停止函数
void popmusic_player_stop(void* pMfp)
{
myfirstapp* pMe = (myfirstapp*)pMfp;
if(pMe->m_pMedia!=NULL)
{
IMEDIA_Stop(pMe->m_pMedia);
}
}