switch(channel[ch].bank_msb)
{
case 0: /* Normal */
- midi_drumpart_change(ch, 0);
- channel[ch].mapID = XG_NORMAL_MAP;
+ if(ch == 9 && channel[ch].bank_lsb == 127 && channel[ch].mapID == XG_DRUM_MAP) {
+ /* FIXME: Why this part is drum? Is this correct? */
+ ;
+ } else {
+ midi_drumpart_change(ch, 0);
+ channel[ch].mapID = XG_NORMAL_MAP;
+ }
break;
case 64: /* SFX voice */
midi_drumpart_change(ch, 0);
channel[ch].altassign = drumset[0]->alt;
else
channel[ch].altassign = drumset[prog]->alt;
+ ctl_mode_event(CTLE_DRUMPART, 1, ch, 1);
}
else
{
newbank = special_tonebank;
channel[ch].bank = newbank;
channel[ch].altassign = NULL;
+ ctl_mode_event(CTLE_DRUMPART, 1, ch, 0);
}
if(!dr && default_program[ch] == SPECIAL_PROGRAM)
/* Auto voice reduce implementation by Masanao Izumo */
if(reduce_voice_threshold &&
(play_mode->flag & PF_CAN_TRACE) &&
- !aq_fill_buffer_flag)
+ !aq_fill_buffer_flag &&
+ aq_get_dev_queuesize() > 0)
{
/* Reduce voices if there is not enough audio device buffer */
return rc;
skip_to(midi_restart_time);
+
+ if(midi_restart_time > 0) { /* Need to update interface display */
+ int i;
+ for(i = 0; i < MAX_CHANNELS; i++)
+ redraw_controllers(i);
+ }
rc = RC_NONE;
for(;;)
{
free(event);
if(rc == RC_RELOAD)
goto play_reload;
+
if(rc == RC_ERROR)
{
if(current_file_info->file_type == IS_OTHER_FILE)