Cosmos Music Player播放wav文件会有杂音,File Manager中播放正常
0赞[DESCRIPTION]
– 进Music Player播放WAV杂音IC问题,与OnMdiCallback中updateDuration,setPreciseDuration的调用位置有关
[SOLUTION]
1.VfxBool VappMusicPlayerCtrlPlayback::open(VfxWChar* fullPath)
{
kal_prompt_trace(MOD_MMI_MEDIA_APP, "[MUSICPLY] VappMusicPlayerCtrlPlayback::open()");
if (fullPath == NULL)
{
return VFX_FALSE;
}
m_duration = 0;//添加此行
。。。。。。。。。。。。。
。。。。。。。。。。。
。。。。。。。。。。
setPlayState(PB_STATE_OPEN);
m_filePath.loadFromMem(fullPath);
updateDuration();//添加此行
// interrupt callback
if (m_isRegsterIntrCallback)
{
mdi_audio_clear_interrupt_callback();
}
}
2.添加如下函数:
void VappMusicPlayerCtrlPlayback::updateDuration()
{
if (m_isPreciseDuration)
{
mdi_result ret = mdi_audio_mma_get_updated_duration(m_mdiHandle, &m_duration);
}
else
{
mdi_result ret = mdi_audio_mma_get_estimated_duration(m_mdiHandle, &m_duration);
}
}
3.VfxU32 VappMusicPlayerCtrlPlayback::getDuration()
{
VfxU32 duration = 0;
if (m_interruptInfo.isInterrupted)
{
duration = m_interruptInfo.totalDuration;
}
else if (m_playState != PB_STATE_NONE && m_playState != PB_STATE_CLOSE)
{
//修改以下
duration = m_duration;
}
return duration;
}
4.void VappMusicPlayerCtrlPlayback::onMDICallback(kal_int32 handle, kal_int32 result, void* user_data)
{
kal_prompt_trace(MOD_MMI_MEDIA_APP, "[MUSICPLY] VappMusicPlayerCtrlPlayback::onMDICallback(),
result: %d", result);
VappMusicPlayerCtrlPlayback *pThis = reinterpret_cast(user_data);
if (!pThis->isValid())
{
return;
}
//添加以下
if (result == MDI_AUDIO_DUR_UPDATED)
{
pThis->setPreciseDuration();
pThis->updateDuration();
}
//添加以上
pThis->m_signalMDICallback.emit(result);
switch (result)
{
case MDI_AUDIO_BUFFER_INSUFFICIENT:
// MDI will pause the playback
pThis->m_pdlBufferPercent = 0;
pThis->m_pdlTimer->start();
pThis->m_signalMDICallback.emit(VAPP_MUSICPLY_PDL_BUFFERING_START);
break;
default:
break;
};
}
5.在class VappMusicPlayerCtrlPlayback : public VfxObject加入
// duration of current song
VfxU32 m_duration;
// update current duration
void updateDuration();
6.修改如下
void VappMusicPlayerPlayerBase::MDICallbackHandler(kal_int32 cb)
{
switch (cb)
{
case MDI_AUDIO_DUR_UPDATED:
//注释以下
if (m_ctrlPlayback)
{
m_ctrlPlayback->setPreciseDuration();
}
//注释以上
updateDuration();
break;
case AUD_SEEK_REASON_DONE:
seek(m_seekTime);
play(NULL, VFX_TRUE);
break;
case AUD_SEEK_REASON_TERMINATED:
break;
case AUD_SEEK_REASON_FAIL:
break;
};
来自半导体社区
