Пример #1
0
void music_resume()
{
    //al_resume_duh(tmplayer);
    zcmusic_pause(zcmusic, ZCM_RESUME);
    midi_resume();
    set_midi_paused(false);
}
Пример #2
0
// int 8 (timer)
void interrupt_handler() {
	switch (command) {
	case 1:
		midi_stop();
		midi_buffer_hi = parameter;
		break;
	case 2:
		midi_stop();
		midi_buffer_lo = parameter;
		break;
	case 3:
		midi_buffer_size = parameter;
		break;
	case 4:
		midi_resume();
		break;
	case 5:
		midi_fadeout_and_stop();
		break;
	case 6:
		midi_pause();
		eak;
	case 7:
		voices[parameter & 0xFF].volume = parameter >> 8;
		break;
	case 8:
		midi_fade_in_flag = parameter != 0;
		break;
	case 9:
		midi_fade_out_flag = parameter != 0;
		break;
	case 10:
		midi_volume = parameter;
		break;
	case 11:
		reset_hw_timer();
		ADLIB_mute_voices();
		set_interrupt_handler(8, old_interrupt_handler);
		break;
	case 12:
		parameter = driver_status;
		break;
	case 13:
		midi_fade_volume_change_rate = parameter & 0xFF;
		fadeout_volume_cur = 0;
		fadein_volume_cur = 0;
		break;
	case 14:
		parameter = midi_volume;
		break;
	case 15:
		parameter = midi_fade_in_flag;
		break;
	case 16:
		parameter = midi_fade_out_flag;
		break;
	case 17:
		midi_tempo = parameter & 0xFF;
		midi_set_tempo();
		break;
	case 18:
		parameter = midi_tempo;
		break;
	case 19:
		parameter = midi_fade_volume_change_rate;
		break;
	case 20:
		midi_loop = parameter != 0;
		break;
	case 21:
		parameter = midi_loop;
		break;
	case 22:
		parameter = 0xF0;	// version??
		break;
	case 23:
		parameter = 1;		// version??
		break;
	case 24:
		voices[parameter & 0xFF].program = parameter >> 8;
		break;
	case 25:
		parameter = voices[parameter & 0xFF].program;
		break;
	}
	
	command = 0;
	midi_driver();
	interrupt_cycles++;
	if (interrupt_cycles >= interrupt_ratio) {
		old_interrupt_handler();
		interrupt_cycles = 0;
	}
}
Пример #3
0
 virtual void resume() {
   midi_resume();
 }
Пример #4
0
int main(int argc, char *argv[])
{
   MIDI *the_music;
   int length, pos;
   int beats, beat;
   int x, y, tw, th;
   int background_color;
   int text_color;
   int paused = 0;
   int done = 0;

   if (allegro_init() != 0)
      return 1;

   if (argc != 2) {
      allegro_message("Usage: 'exmidi filename.mid'\n");
      return 1;
   }

   install_keyboard(); 
   install_timer();

   /* install a MIDI sound driver */
   if (install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) != 0) {
      allegro_message("Error initialising sound system\n%s\n", allegro_error);
      return 1;
   }

   /* read in the MIDI file */
   the_music = load_midi(argv[1]);
   if (!the_music) {
      allegro_message("Error reading MIDI file '%s'\n", argv[1]);
      return 1;
   }
   length = get_midi_length(the_music);
   beats = -midi_pos; /* get_midi_length updates midi_pos to the negative
                         number of beats (quarter notes) in the midi. */

   if (set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0) {
      if (set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0) {
	 set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
	 allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
	 return 1;
      }
   }
   
   /* try to continue in the background */
   if (set_display_switch_mode(SWITCH_BACKGROUND))
      set_display_switch_mode(SWITCH_BACKAMNESIA);

   set_palette(desktop_palette);
   background_color = makecol(255, 255, 255);
   text_color = makecol(0, 0, 0);
   clear_to_color(screen, background_color);
   th = text_height(font);
   x = SCREEN_W / 2;

   textprintf_centre_ex(screen, font, x, SCREEN_H / 3, text_color, -1,
			"Driver: %s", midi_driver->name);
   textprintf_centre_ex(screen, font, x, SCREEN_H / 2, text_color, -1,
			"Playing %s", get_filename(argv[1]));

   /* start up the MIDI file */
   play_midi(the_music, TRUE);

   y = 2 * SCREEN_H / 3;
   tw = text_length(font, "0000:00 / 0000:00");
   /* wait for a key press */
   while (!done) {
       /* P key pauses/resumes, any other key exits. */
      while (keypressed()) {
	 int k = readkey() & 255;
	 if (k == 'p') {
	    paused = !paused;
	    if (paused) {
	       midi_pause();
	       textprintf_centre_ex(screen, font, x, y + th * 3,
		  text_color, -1, "P A U S E D");
	    }
	    else {
	       midi_resume();
	       rectfill(screen, x - tw / 2, y + th * 3, x + tw / 2,
		  y + th * 4, background_color);
	    }
	 }
	 else
	    done = 1;
      }
      pos = midi_time;
      beat = midi_pos;
      rectfill(screen, x - tw / 2, y, x + tw / 2, y + th * 2, background_color);
      textprintf_centre_ex(screen, font, x, y, text_color, -1,
	 "%d:%02d / %d:%02d", pos / 60, pos % 60, length / 60, length % 60);
      textprintf_centre_ex(screen, font, x, y + th, text_color, -1,
	 "beat %d / %d", beat, beats);
      /* We have nothing else to do. */
      rest(100);
   }

   /* destroy the MIDI file */
   destroy_midi(the_music);

   return 0;
}