#include #include #include #include #include #include #include #include #include #include #include /*** (^_^;) Bug Recovery of SGI Media Library --> Original MIDI Defines !! (^_^;) ***/ #define MES(x) ( (x[0]).mm.msgbuf ) #define midi_get_status(x) ( ( ( ( MES(x) & 0xf0000000 ) == 0x60000000 ) || ( ( MES(x) & 0xf0000000 ) == 0x40000000 ) ) ? ( ( MES(x) & 0x00f00000 ) >> 16 ) : 0 ) /* Port #2 */ #define midi_get_channel(x) ( ( MES(x) & 0x000f0000 ) >> 16 ) /* 1 - 16 channel Only ! */ #define midi_get_keyno(x) ( ( MES(x) & 0x00007f00 ) >> 8 ) /* device ID : #1 Only ! */ #define midi_get_velocity(x) ( ( MES(x) & 0x0000007f ) ) #define SCREEN_X_MAXSIZE 950 #define SCREEN_Y_MAXSIZE 700 /* #define SCREEN_X_MAXSIZE 1200 #define SCREEN_Y_MAXSIZE 900 */ #define R 500.0 #define XYMAX 50 #define XZMAX 50 #define PI 3.1415926535 #define DEL 0.01 float now[XYMAX][XZMAX][4][3],next[XYMAX][XZMAX][4][3]; int nowc[XYMAX][XZMAX][3],nextc[XYMAX][XZMAX][3],count=1,cg_param[20],cg_cnt; open_window(){ prefposition(100,SCREEN_X_MAXSIZE,100,SCREEN_Y_MAXSIZE); winopen("CG and Sound [Y.Nagashima] : with [Morph y.yura 1996]"); RGBmode(); RGBcolor(0,0,0); clear(); doublebuffer(); qdevice(ESCKEY); gconfig(); blendfunction(BF_ONE, BF_MDC); doublebuffer(); mmode(MVIEWING); perspective(900,1.33,-100,0); } draw_plane(float pos[XYMAX][XZMAX][4][3], int col[XYMAX][XZMAX][3]){ int i,j,k; float global_size; global_size = (float)cg_param[0] / 100.0; scale(global_size,global_size,global_size); pushmatrix(); for(i=0; i 0 ){ status = midi_get_status( midi ); channel = midi_get_channel( midi ); keyno = midi_get_keyno( midi ); if( status == 0xd0 ){ switch(channel) { case 0x00: cg_param[0] = keyno + 5; break; case 0x01: cg_param[1] = (128-keyno) * 9; break; case 0x02: cg_param[2] = keyno + 1; break; case 0x03: cg_param[3] = keyno/6 + 2; cg_change_now(); break; case 0x04: cg_param[4] = keyno/6 + 2; cg_change_now(); break; case 0x05: cg_param[5] = keyno * 2; break; case 0x06: cg_param[6] = keyno * 2; break; case 0x0e: sound_play(keyno); break; case 0x0f: if( keyno != cg_cnt ){ cg_cnt = keyno; cg_change_next(); morph( cg_cnt ); } break; } } } else if( cg_cnt > 7 ){ switch(cg_cnt){ case 8: cg8(now, nowc); break; case 9: cg9(now, nowc); break; case 10: cg10(now, nowc); break; } } RGBcolor(0,0,0); clear(); pushmatrix(); yota(); draw_plane(now, nowc); popmatrix(); count ++; swapbuffers(); } MIclose( midi_port ); MIfreeport( midi_port ); gexit(); return 0; }