📄 chp_dl_media_midi.c
字号:
IOU_OUT(IMUSIC_SCORE_L,0); //dacyli 050623
}
}
IOU_OUT(IMUSIC_MUSIC_START,MIDI_PLAY);//start play midi ,set music start bit 1
break;
case IMUSIC_FILE_TYPE_MIDI_0:
//send score fifo full
while(p_media_midi_data->iMusic_file_count < p_media_midi_data->iMusic_file_size && i < (IMUSIC_SCORE_FIFO_COUNT/2) )
{
IOU_OUT( IMUSIC_SCORE_FIFO, p_media_midi_data->iMusic_file_pointer[p_media_midi_data->iMusic_file_count] );
p_media_midi_data->iMusic_file_count++;
i++;
}
//play loop
if(p_media_midi_data->iMusic_file_count >= p_media_midi_data->iMusic_file_size )
{
if(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_INFINITE)
p_media_midi_data->iMusic_file_count = 0;
else if (--p_media_midi_data->time_mode)
{
//ret = dl_media_midi_init();//added by tomybao ,deleted by zhaolin
p_media_midi_data->iMusic_file_count = 0;
}
else
{
p_media_midi_data->iMusic_play_status = IMUSIC_PLAY_STATUS_END;
IOU_OUT(IMUSIC_SCORE_L, 0x00);//dacyli 050623
}
}
IOU_OUT(IMUSIC_MUSIC_START,MIDI_PLAY);//start play midi ,set music start bit 1
break;
case IMUSIC_FILE_TYPE_MMD:
while(p_media_midi_data->iMusic_file_count < p_media_midi_data->iMusic_file_size)
{
IOU_IN(IMUSIC_FIFO_STATUS, val);
if(val&0x10) break;
IOU_OUT( IMUSIC_SCORE_FIFO, p_media_midi_data->iMusic_file_pointer[p_media_midi_data->iMusic_file_count] );
p_media_midi_data->iMusic_file_count++;
if(p_media_midi_data->iMusic_mmhd_head)
{
if(p_media_midi_data->iMusic_file_count == p_media_midi_data->iMusic_mmhd_size )
{
p_media_midi_data->iMusic_file_count = p_media_midi_data->iMusic_mmdd_start;
p_media_midi_data->iMusic_mmhd_head = 0;
}
}
}
//play loop
if(p_media_midi_data->iMusic_file_count >= p_media_midi_data->iMusic_file_size )
{
if(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_INFINITE)
{
p_media_midi_data->iMusic_file_count = 0;
p_media_midi_data->iMusic_mmhd_head=1;
}
else if (--p_media_midi_data->time_mode)
{
//ret = dl_media_midi_init();//added by tomybao ,deleted by zhaolin
p_media_midi_data->iMusic_file_count = 0;
p_media_midi_data->iMusic_mmhd_head=1;
}
else
{
p_media_midi_data->iMusic_play_status = IMUSIC_PLAY_STATUS_END;
IOU_OUT(IMUSIC_SCORE_L, 0x00);//dacyli 050623
}
}
IOU_OUT(IMUSIC_MUSIC_START,MIDI_PLAY);//start play MMD file ,set music start bit 1
//////////////////////////////////////////////////
// open tune
IOU_OUT( IMUSIC_EVENT_FIFO, 0xb0);
IOU_OUT( IMUSIC_EVENT_FIFO, 0x07);
IOU_OUT( IMUSIC_EVENT_FIFO, 0x7f);
//open 3D effect
IOU_OUT( IMUSIC_EVENT_FIFO, 0xb0);
IOU_OUT( IMUSIC_EVENT_FIFO, 0x5b);
IOU_OUT( IMUSIC_EVENT_FIFO, 0x7f);
//////////////////////////////////////////////////
break;
#ifdef MIDI_MMF_ENABLE
case IMUSIC_FILE_TYPE_MMF:
dl_media_MIDI_Mmf_Init(p_media_midi_data->iMusic_file_pointer);
while(p_media_midi_data->MIDI_mmf_end_flg!=1 && i < (IMUSIC_SCORE_FIFO_COUNT-IMUSIC_SCORE_INT_COUNT))
{
dl_media_MIDI_Mmf_Read_Data_To_Buffer();
dl_media_MIDI_Mmf_Write_Data_To_Fifo();
i+=IMUSIC_SCORE_INT_COUNT;
}
if(p_media_midi_data->MIDI_mmf_end_flg != 0 )
{
if(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_INFINITE)
dl_media_MIDI_Mmf_Init(p_media_midi_data->iMusic_file_pointer);
else if (--p_media_midi_data->time_mode)
{
//ret = dl_media_midi_init();//added by tomybao, deleted by zhaolin
dl_media_MIDI_Mmf_Init(p_media_midi_data->iMusic_file_pointer);
}else
{
p_media_midi_data->iMusic_play_status = IMUSIC_PLAY_STATUS_END;
IOU_OUT(IMUSIC_SCORE_L, 0x00);//dacyli 050623
}
}
IOU_OUT(IMUSIC_MUSIC_START,MIDI_PLAY);//start play midi ,set music start bit 1
break;
#endif
default:
return DL_MEDIA_RET_MIDI_FILE_FORMAT_ERR;
}
if ( play_mode == MIDI_ADPCM_PLAY_NORMAL )
{
if(dl_media_midi_read_data(IMUSIC_FIFO_STATUS) == MIDI_FIFO_EMPTY)
return DL_MEDIA_RET_FAIL;
dl_media_midi_midi_int_ena(); //enable score fifo interrupt
dl_media_interrupt_enable();
}
else if ( play_mode == MIDI_ADPCM_PLAY_BLOCK )
{
while(p_media_midi_data->iMusic_file_count <= p_media_midi_data->iMusic_file_size )//added by tomybao.
{
if(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_END)
break;
if((p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_PLAY)||
(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_PAUSE))
{
IOU_IN(IOU_INTER_STATUS,val);
if ( (val & IMUSIC_SCORE_EMPTY) )
dl_media_midi_input_midi_data();
}
}
dl_media_delay(120);//dacyli 050623
IOU_OUT(IMUSIC_MUSIC_START,0x00);
IOU_OUT(IMUSIC_FIFO_CLR, 0X02); // CLEAR SCORE FIFO
IOU_OUT(IMUSIC_FIFO_CLR, 0X00);
}
#ifdef DL_MEDIA_TIMER_MODE_ENABLE
else if(play_mode == MIDI_ADPCM_PLAY_TIMER)
{
//added by huangjie for timer mode
// if(dl_media_timer_set(10))
// return DL_MEDIA_RET_FAIL;
dl_media_midi_midi_int_ena(); //enable score fifo interrupt
if(dl_media_midi_read_data(IMUSIC_FIFO_STATUS) == MIDI_FIFO_EMPTY)
{
return DL_MEDIA_RET_FAIL;
}
}
#endif
return DL_MEDIA_RET_SUCCESS;
}
DL_MEDIA_RET_T dl_media_adpcm_start(MIDI_ADPCM_PLAY_MODE_T play_mode,UINT8 time_mode)
{
int i=0,ret;
DL_MEDIA_MIDI_DATA_T *p_media_midi_data=p_g_media_midi_data;
UINT16 val;
p_media_midi_data->time_mode = time_mode;
if(!p_media_midi_data->time_mode)
p_media_midi_data->adp_play_status = IMUSIC_PLAY_STATUS_INFINITE;
else
p_media_midi_data->adp_play_status = IMUSIC_PLAY_STATUS_PLAY;
p_media_midi_data->adp_file_count = 0;
while(p_media_midi_data->adp_file_count < p_media_midi_data->adp_file_size && i < IMUSIC_ADPCM_FIFO_COUNT)
{
IOU_OUT( IMUSIC_ADPCM_FIFO, p_media_midi_data->adp_file_pointer[p_media_midi_data->adp_file_count] );
p_media_midi_data->adp_file_count++;
i++;
}
//play loop
if(p_media_midi_data->adp_file_count >= p_media_midi_data->adp_file_size )
{
if(p_media_midi_data->adp_play_status == IMUSIC_PLAY_STATUS_INFINITE)
p_media_midi_data->adp_file_count = 0;
else if (--p_media_midi_data->time_mode)
{
ret = dl_media_midi_init();//added by tomybao.
p_media_midi_data->adp_file_count = 0;
}
else
{
p_media_midi_data->adp_play_status = IMUSIC_PLAY_STATUS_END;
IOU_OUT(IMUSIC_ADPCM_L,0x00);//dacyli 050623
}
}
IOU_OUT(IMUSIC_ADPCM_START,MIDI_PLAY);//start play ADPCM file ,set ADPCM start bit 1
if ( play_mode == MIDI_ADPCM_PLAY_NORMAL )
{
dl_media_interrupt_enable();
dl_media_midi_adp_int_ena(); //enable score fifo interrupt
if(dl_media_midi_read_data(IMUSIC_FIFO_STATUS) == MIDI_FIFO_EMPTY)
return DL_MEDIA_RET_FAIL;
}
else if ( play_mode == MIDI_ADPCM_PLAY_BLOCK )
{
while(p_media_midi_data->adp_file_count <= p_media_midi_data->adp_file_size)
{
if(p_media_midi_data->adp_play_status == IMUSIC_PLAY_STATUS_END)
{
IOU_OUT(IMUSIC_ADPCM_L,0x00);//dacyli 050623
break;
}
if((p_media_midi_data->adp_play_status == IMUSIC_PLAY_STATUS_PLAY)||
(p_media_midi_data->adp_play_status == IMUSIC_PLAY_STATUS_PAUSE))
{
IOU_IN(IOU_INTER_STATUS,val);
if ( (val & IMUSIC_ADPCM_EMPTY) )
dl_media_midi_input_adpcm_data();
}
}
dl_media_delay(120); //dacyli 050623
IOU_OUT(IMUSIC_MUSIC_START,0x00);
IOU_OUT(IMUSIC_FIFO_CLR, 0X02); // CLEAR SCORE FIFO
IOU_OUT(IMUSIC_FIFO_CLR, 0X00);
}
#ifdef DL_MEDIA_TIMER_MODE_ENABLE
else if(play_mode == MIDI_ADPCM_PLAY_TIMER)
{
//added by huangjie for timer mode
// if(dl_media_timer_set(10))
// return DL_MEDIA_RET_FAIL;
dl_media_midi_adp_int_ena();
if(dl_media_midi_read_data(IMUSIC_FIFO_STATUS) == MIDI_FIFO_EMPTY)
{
return DL_MEDIA_RET_FAIL;
}
}
#endif
return DL_MEDIA_RET_SUCCESS;
}
UINT8 dl_media_midi_input_adpcm_data (void)
{
UINT16 val,ret;
DL_MEDIA_MIDI_DATA_T *p_media_midi_data=p_g_media_midi_data;
//ADPCM
if ( p_media_midi_data->adp_play_status == IMUSIC_PLAY_STATUS_END )
{
// dl_media_interrupt_restore();
dl_media_midi_adp_int_disable();
dl_media_callback.adp_callback = NULL;
dl_media_callback.adp_para = NULL;
return ADPCM_PLAY_END;
}
else
{
IOU_IN(IOU_INTER_STATUS,val);
val &= ~IMUSIC_ADPCM_EMPTY;
IOU_OUT(IOU_INTER_STATUS,val);//clear int
while(p_media_midi_data->adp_file_count < p_media_midi_data->adp_file_size)
{
IOU_IN(IMUSIC_FIFO_STATUS, val);
if(val&0x08) break;
IOU_OUT( IMUSIC_ADPCM_FIFO, p_media_midi_data->adp_file_pointer[p_media_midi_data->adp_file_count] );
p_media_midi_data->adp_file_count++;
}
//play loop
if(p_media_midi_data->adp_file_count >= p_media_midi_data->adp_file_size )
{
if(p_media_midi_data->adp_play_status == IMUSIC_PLAY_STATUS_INFINITE)
p_media_midi_data->adp_file_count = 0;
else if (--p_media_midi_data->time_mode)
{
// ret = dl_media_midi_init();//added by tomybao.
p_media_midi_data->adp_file_count = 0;
}
else
{
p_media_midi_data->adp_play_status = IMUSIC_PLAY_STATUS_END;
sys_printf("Set adp end flag\n");
IOU_OUT(IMUSIC_ADPCM_L, 0);//dacyli 050623
}
}
return 0;
}
return 0;
}
UINT8 dl_media_midi_input_midi_data(void)
{
UINT16 val;
UINT32 i = 0,ret;
DL_MEDIA_MIDI_DATA_T *p_media_midi_data=p_g_media_midi_data;
UINT8 music_file_type = p_media_midi_data->iMusic_file_type;
//MIDI
if ( p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_END )
{
// dl_media_interrupt_restore();
dl_media_midi_midi_int_disable();
dl_media_callback.midi_callback = NULL;
dl_media_callback.midi_para = NULL;
return MIDI_PLAY_END;
}
else
{
IOU_IN(IOU_INTER_STATUS,val);
val &= ~IMUSIC_SCORE_EMPTY;
IOU_OUT(IOU_INTER_STATUS,val);//clear int
switch( music_file_type)
{
case IMUSIC_FILE_TYPE_MIDI_1:
if(p_media_midi_data->write_pointer!=p_media_midi_data->read_pointer )
{
// sys_printf("write_pointer=0x%x,read_pointer=0x%x\n",p_media_midi_data->write_pointer,p_media_midi_data->read_pointer);
dl_media_midi_format1_write_data(p_media_midi_data);
dl_media_midi_format1_read_data(p_media_midi_data);
}
//play loop
if(p_media_midi_data->track_end_bit == 0 )
{
if(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_INFINITE)
dl_media_midi_format1_init(p_media_midi_data->iMusic_file_pointer,p_media_midi_data);
else if (--p_media_midi_data->time_mode)
{
dl_media_midi_format1_init(p_media_midi_data->iMusic_file_pointer,p_media_midi_data);
}
else
{
p_media_midi_data->iMusic_play_status = IMUSIC_PLAY_STATUS_END;
IOU_OUT(IMUSIC_SCORE_L,0x00);//dacyli 050623
}
}
break;
case IMUSIC_FILE_TYPE_MIDI_0:
while(p_media_midi_data->iMusic_file_count < p_media_midi_data->iMusic_file_size)
{
IOU_IN(IMUSIC_FIFO_STATUS,val);
if( val & 0x10 )
break;
IOU_OUT( IMUSIC_SCORE_FIFO, p_media_midi_data->iMusic_file_pointer[p_media_midi_data->iMusic_file_count] );
p_media_midi_data->iMusic_file_count++;
}
//play loop
if(p_media_midi_data->iMusic_file_count >= p_media_midi_data->iMusic_file_size )
{
if(p_media_midi_data->iMusic_play_status == IMUSIC_PLAY_STATUS_INFINITE)
p_media_midi_data->iMusic_file_count = 0;
else if (--p_media_midi_data->time_mode)
{
p_media_midi_data->iMusic_file_count = 0;
}
else
{
p_media_midi_data->iMusic_play_status = IMUSIC_PLAY_STATUS_END;
IOU_OUT(IMUSIC_SCORE_L, 0x0); //dacyli 050623
// dl_media_delay(2000);
}
}
break;
case IMUSIC_FILE_TYPE_MMD:
while(p_media_midi_data->iMusic_file_count < p_media_midi_data->iMusic_file_size)
{
IOU_IN(IMUSIC_FIFO_STATUS, val);
if(val&0x10) break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -