本文共 2462 字,大约阅读时间需要 8 分钟。
Java播放audio,当播放完毕(EOM)后,尝试set audio time,此后若做get audio time的动作,读取到的仍然是EOM的时间,而非之前设置的时间。 该问题通常出现在一些audio test case中,该行为是我司原本的设计,若需要修改以配合test case的通过,可以参考如下方法。 修改"Jma_audio_player.c",请关注如下代码中//time begin…//end之间的修改。 1、 //time begin kal_uint64 last_set_media_time[JAVA_NO_OF_PLAYER]; //end 2、 jma_mvm_audio_player_open() ... if (audio_player->state == JAVA_MEDIA_STATE_NULL) { if (MMA_TYPE_MIDI == mma_type) { jma_midi_player_init(audio_player); if (NULL == data && NULL == filename) { audio_player->is_midi_device = KAL_TRUE; } } memset((kal_uint8 *)&(audio_player->player), 0, sizeof(mma_player_struct)); audio_player->player.handler = (med_handler) &jma_audio_event_hdlr; audio_player->player.media_type = mma_type; audio_player->player.repeats = 1; //time begin last_set_media_time[native_player] = -1; //end ... 3、 jma_mvm_audio_player_play() ... /* Reset play finish time for the play of this time */ audio_player->play_finish_time = 0; //time begin last_set_media_time[native_player] = -1; //end ... 4、 jma_mvm_audio_player_close() ... if (native_player != INVALID_NPLAYER_ID) { audio_player = &mma_audio_player[native_player]; kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_NPLAYER_STATE, native_player, audio_player->state); jma_deregister_device(audio_player->device_type, vm_id, audio_player->id); //time begin last_set_media_time[native_player] = -1; //end ... 5、 jma_mvm_audio_player_set_media_time() ... /* seek time should be bound in duration */ if (audio_player->duration != -1 && now > audio_player->duration) { now = audio_player->duration; } //time begin if(audio_player->state == JAVA_MEDIA_STATE_READY) { last_set_media_time[native_player] = now; } //end ... 6、 jma_mvm_audio_player_get_media_time() ... /* If not at Playing state, return kept-value */ if (audio_player->state == JAVA_MEDIA_STATE_PLAYING) { current_time = media_mma_aud_get_current_time(JMA_MOD_ID, audio_player->handle, (kal_uint8) mma_type); audio_player->current_time = current_time; } //time begin else if ((audio_player->play_finish_time != 0) && (audio_player->state == JAVA_MEDIA_STATE_READY)) { if (last_set_media_time[native_player] != -1)//time has been set { current_time = last_set_media_time[native_player]; } else//time has not been set { current_time = audio_player->play_finish_time; } } //end else if (audio_player->play_finish_time != 0) /* for play finish */ { current_time = audio_player->play_finish_time; } else { current_time = audio_player->current_time; } ...转载地址:http://msgdi.baihongyu.com/