我移植了一个小游戏,进入游戏的时候有背景音乐,而且背景音乐循环播放;点右软件的时候返回菜单的时候停止背景音乐播放!
回调函数:void Music_Play_CallBack(happyFamily* pMe,AEEMediaCmdNotify * pCmdNotify)
{
if (MM_STATUS_DONE == pCmdNotify->nStatus)
{
IMEDIA_Play(pMe->pMedia);
}
}
这里可以实现循环播放。
点右软件的时候返回菜单的时候停止背景音乐播放:
void HF_StopSound(happyFamily * pMe)
{
IMEDIA_RegisterNotify(pMe->pMedia,(PFNMEDIANOTIFY)NULL,NULL);
if(SUCCESS != IMedia_Stop(pMe->pMedia)){
return;
}
}
这里不使用回调函数的时候确实可以停止,使用了回调就不能停止了,我SDK下了IMedia_Stop()函数发现这个函数有副作用:“这些事件将在注册回调中返回。 请参阅 AEEMediaCmdNotify 文档。 此函数将导致 MM_STATUS_DONE 或 MM_RESUME_ABORT 状态。 ”SDK的原话。原来IMedia_Stop()这个函数在回调函数里面返回的状态是MM_STATUS_DONE,和回调函数里面截获的播放完音乐的消息是一个消息。
这里请教高手我该怎么实现?上面的功能.音乐播放完和IMedia_Stop()音乐是一个状态?
谁做过类似的例子指教下,谢谢高手们、谢谢好心人、好心人长命万岁,嘿嘿!
------解决方案--------------------------------------------------------
播放完毕而停止与Stop()停止都产生同一个状态,从IMedia本身机制加以区分似乎不容易,而从外部加以区分则很简单,增加一个标志位,HF_StopSound()中设置此标志位,在MM_STATUS_DONE中根据此标志位决定是否重放。