⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w32g_subwin3.c

📁 linux上播放midi音乐,但是要一些设置.可网上查找. 软件名称: TiMidity++-2.13.0.tar
💻 C
📖 第 1 页 / 共 5 页
字号:
	rc.right = (rc.right - rc.left) - (rc2.right - rc2.left) + w32g_tracer_wnd.width;	rc.bottom = (rc.bottom - rc.top) - (rc2.bottom - rc2.top) + w32g_tracer_wnd.height;	MoveWindow ( hTracerWnd, rc.left, rc.top, rc.right, rc.bottom, TRUE);	MoveWindow(w32g_tracer_wnd.hwnd,0,0,w32g_tracer_wnd.width,w32g_tracer_wnd.height,TRUE);	ShowWindow(w32g_tracer_wnd.hwnd,SW_SHOW);	UpdateWindow(w32g_tracer_wnd.hwnd);	UpdateWindow(hTracerWnd);	INILoadTracerWnd();	TracerWndInfoApply();}static int notes_view_generate ( int lockflag ){	int i;	if ( lockflag ) TRACER_LOCK ();	for(i=0;i<12;i++) {		BitBlt ( tracer_bmp.hmdc, tracer_bmp.rc_note[i].left, tracer_bmp.rc_note[i].top, tracer_bmp.rc_note[i].right - tracer_bmp.rc_note[i].left, tracer_bmp.rc_note[i].bottom - tracer_bmp.rc_note[i].top,			tracer_bmp.hmdc, tracer_bmp.rc_notes_mask[i].left, tracer_bmp.rc_notes_mask[i].top, SRCINVERT );		BitBlt ( tracer_bmp.hmdc, tracer_bmp.rc_note[i].left, tracer_bmp.rc_note[i].top, tracer_bmp.rc_note[i].right - tracer_bmp.rc_note[i].left, tracer_bmp.rc_note[i].bottom - tracer_bmp.rc_note[i].top,			tracer_bmp.hmdc, tracer_bmp.rc_notes.left, tracer_bmp.rc_notes.top, SRCPAINT );		BitBlt ( tracer_bmp.hmdc, tracer_bmp.rc_note_on[i].left, tracer_bmp.rc_note_on[i].top, tracer_bmp.rc_note_on[i].right - tracer_bmp.rc_note_on[i].left, tracer_bmp.rc_note_on[i].bottom - tracer_bmp.rc_note_on[i].top,			tracer_bmp.hmdc, tracer_bmp.rc_notes_mask[i].left, tracer_bmp.rc_notes_mask[i].top, SRCINVERT );		BitBlt ( tracer_bmp.hmdc, tracer_bmp.rc_note_on[i].left, tracer_bmp.rc_note_on[i].top, tracer_bmp.rc_note_on[i].right - tracer_bmp.rc_note_on[i].left, tracer_bmp.rc_note_on[i].bottom - tracer_bmp.rc_note_on[i].top,			tracer_bmp.hmdc, tracer_bmp.rc_notes_on.left, tracer_bmp.rc_notes_on.top, SRCPAINT );		BitBlt ( tracer_bmp.hmdc, tracer_bmp.rc_note_sustain[i].left, tracer_bmp.rc_note_sustain[i].top, tracer_bmp.rc_note_sustain[i].right - tracer_bmp.rc_note_sustain[i].left, tracer_bmp.rc_note_sustain[i].bottom - tracer_bmp.rc_note_sustain[i].top,			tracer_bmp.hmdc, tracer_bmp.rc_notes_mask[i].left, tracer_bmp.rc_notes_mask[i].top, SRCINVERT );		BitBlt ( tracer_bmp.hmdc, tracer_bmp.rc_note_sustain[i].left, tracer_bmp.rc_note_sustain[i].top, tracer_bmp.rc_note_sustain[i].right - tracer_bmp.rc_note_sustain[i].left, tracer_bmp.rc_note_sustain[i].bottom - tracer_bmp.rc_note_sustain[i].top,			tracer_bmp.hmdc, tracer_bmp.rc_notes_sustain.left, tracer_bmp.rc_notes_sustain.top, SRCPAINT );	}	if ( lockflag ) TRACER_UNLOCK ();	return 0;}#define TRACER_BMP_SIZE_X 316#define TRACER_BMP_SIZE_Y 269#define TRACER_CANVAS_SIZE_X 316#define TRACER_CANVAS_SIZE_Y 451static int init_tracer_bmp ( HDC hdc ){	int i, j;	static int init = 1;	HBITMAP hbmp;	HDC hmdc;	if ( init ) {		tracer_bmp.hbmp = NULL;		tracer_bmp.hmdc = NULL;		init = 0;	}	TRACER_LOCK ();	if ( tracer_bmp.hmdc != NULL )		DeleteDC ( tracer_bmp.hmdc );	if ( tracer_bmp.hbmp != NULL )		DeleteObject ( (HGDIOBJ) tracer_bmp.hbmp );	tracer_bmp.hbmp = CreateCompatibleBitmap ( hdc, TRACER_CANVAS_SIZE_X, TRACER_CANVAS_SIZE_Y );	tracer_bmp.hmdc = CreateCompatibleDC ( hdc );	SelectObject ( tracer_bmp.hmdc, w32g_tracer_wnd.hNullBrush ); /* 昁梫側偄偐傕偟傟側偄偑 */	SelectObject ( tracer_bmp.hmdc, w32g_tracer_wnd.hNullPen ); /* 昁梫側偄偐傕偟傟側偄偑 */	SelectObject ( tracer_bmp.hmdc, tracer_bmp.hbmp );	hbmp = LoadBitmap ( hInst, MAKEINTRESOURCE(IDB_BITMAP_TRACER) );	hmdc = CreateCompatibleDC ( hdc );	SelectObject ( hmdc, hbmp );	BitBlt ( tracer_bmp.hmdc, 0, 0, TRACER_CANVAS_SIZE_X, TRACER_CANVAS_SIZE_Y, hmdc, 0, 0, WHITENESS );	BitBlt ( tracer_bmp.hmdc, 0, 0, TRACER_BMP_SIZE_X, TRACER_BMP_SIZE_Y, hmdc, 0, 0, SRCCOPY );	DeleteDC(hmdc);	DeleteObject(hbmp);	TRACER_UNLOCK ();	SetRect ( &tracer_bmp.rc_volume, 8, 16, 28, 195 );	SetRect ( &tracer_bmp.rc_expression, 32, 16, 52, 195 );	SetRect ( &tracer_bmp.rc_pan, 56, 16, 76, 195 );	SetRect ( &tracer_bmp.rc_sustain, 80, 16, 100, 195 );	SetRect ( &tracer_bmp.rc_pitch_bend, 104, 16, 124, 195 );	SetRect ( &tracer_bmp.rc_mod_wheel, 128, 16, 148, 195 );	SetRect ( &tracer_bmp.rc_chorus_effect, 152, 16, 172, 195 );	SetRect ( &tracer_bmp.rc_reverb_effect, 176, 16, 196, 195 );	SetRect ( &tracer_bmp.rc_velocity[0], 200, 16, 230, 215 );	SetRect ( &tracer_bmp.rc_velocity[1], 231, 16, 261, 215 );	SetRect ( &tracer_bmp.rc_notes, 16, 59, 58, 78 );	SetRect ( &tracer_bmp.rc_notes_sustain, 202, 59, 244, 78 );	SetRect ( &tracer_bmp.rc_notes_on, 156, 59, 198, 78 );	for(i=0;i<6;i++) {		SetRect ( &tracer_bmp.rc_notes_mask[i], 16 + i * 46, 107, 58 + i * 46, 126);		SetRect ( &tracer_bmp.rc_note[i], 16 + i * 46, 271, 58 + i * 46, 290);		SetRect ( &tracer_bmp.rc_note_on[i], 16 + i * 46, 319, 58 + i * 46, 338);		SetRect ( &tracer_bmp.rc_note_sustain[i], 16 + i * 46, 367, 58 + i * 46, 386);	}	for(i=0;i<6;i++) {		SetRect ( &tracer_bmp.rc_notes_mask[i + 6], 16 + i * 46, 131, 58 + i * 46, 150);		SetRect ( &tracer_bmp.rc_note[i + 6], 16 + i * 46, 295, 58 + i * 46, 314);		SetRect ( &tracer_bmp.rc_note_on[i + 6], 16 + i * 46, 343, 58 + i * 46, 362);		SetRect ( &tracer_bmp.rc_note_sustain[i + 6], 16 + i * 46, 391, 58 + i * 46, 410);	}	notes_view_generate(TRUE);	SetRect ( &tracer_bmp.rc_gm_on, 64, 59, 88, 78 );	SetRect ( &tracer_bmp.rc_gm_off, 64, 83, 88, 102 );	SetRect ( &tracer_bmp.rc_gs_on, 96, 59, 120, 78 );	SetRect ( &tracer_bmp.rc_gs_off, 96, 83, 120, 102 );	SetRect ( &tracer_bmp.rc_xg_on, 128, 59, 152, 78 );	SetRect ( &tracer_bmp.rc_xg_off, 128, 83, 152, 102 );	for (i = 0; i < 4; i++)		for (j = 0; j < 8; j++)			SetRect(&tracer_bmp.rc_temper_keysig[i * 8 + j],					16 + j * 37, 155 + i * 23, 49 + j * 37, 174 + i * 23);	for (i = 0; i < 8; i++)		SetRect(&tracer_bmp.rc_temper_type[i],				16 + i * 23, 247, 35 + i * 23, 266);	return 0;}void TracerWndReset(void){	int i, j;	strcpy ( w32g_tracer_wnd.titlename, "" );	strcpy ( w32g_tracer_wnd.filename, "" );#if 0	sprintf ( w32g_tracer_wnd.current_time, "00:00:00" );	w32g_tracer_wnd.current_time_sec = 0;	w32g_tracer_wnd.tempo = 0;	w32g_tracer_wnd.master_volume = 0;	w32g_tracer_wnd.maxvoices = 0;#endif	for ( i = 0; i < TRACER_CHANNELS; i ++ ) {		strcpy ( w32g_tracer_wnd.instrument[i],"  ----" );		w32g_tracer_wnd.mapID[i] = INST_NO_MAP;		w32g_tracer_wnd.bank[i] = 0;		w32g_tracer_wnd.program[i] = 0;		w32g_tracer_wnd.velocity[i] = 0;		w32g_tracer_wnd.volume[i] = 0;		w32g_tracer_wnd.expression[i] = 0;		w32g_tracer_wnd.panning[i] = 64;		w32g_tracer_wnd.sustain[i] = 0;		w32g_tracer_wnd.pitch_bend[i] = 0x2000;		w32g_tracer_wnd.mod_wheel[i] = 0;		w32g_tracer_wnd.chorus_effect[i] = 0;		w32g_tracer_wnd.reverb_effect[i] = 0;		w32g_tracer_wnd.tt[i] = 0;		for ( j = 0; j < 256; j ++ ) {			w32g_tracer_wnd.notes[i][j] = -1;		}	}	w32g_tracer_wnd.play_system_mode = play_system_mode;	w32g_tracer_wnd.quietchannels = quietchannels;	w32g_tracer_wnd.channel_mute = channel_mute;	InvalidateRect(w32g_tracer_wnd.hwnd,NULL, FALSE);}void TracerWndReset2(void){	int i, j;	for ( i = 0; i < TRACER_CHANNELS; i ++ ) {		w32g_tracer_wnd.velocity[i] = 0;		for ( j = 0; j < 128; j ++ ) {			w32g_tracer_wnd.notes[i][j] = -1;		}	}	TRACER_LOCK();	for ( i = 0; i < TRACER_CHANNELS; i ++ ) {		for ( j = 0; j < 128; j ++ ) {			RECT rc;			if ( get_ch_rc ( i, &rc, &w32g_tracer_wnd.rc_notes ) == 0 )				notes_view_draw ( &rc, j, w32g_tracer_wnd.notes[i][j], TRUE, FALSE );		}	}	TRACER_UNLOCK();}// 夋柺徚嫀void TracerWndClear(int lockflag){	HPEN hPen;	HBRUSH hBrush;	HGDIOBJ hgdiobj_hpen, hgdiobj_hbrush;	RECT rc;	if ( lockflag ) TRACER_LOCK();	hPen = CreatePen(PS_SOLID,1,C_BACK);	hBrush = CreateSolidBrush(C_BACK);	hgdiobj_hpen = SelectObject(w32g_tracer_wnd.hmdc, hPen);	hgdiobj_hbrush = SelectObject(w32g_tracer_wnd.hmdc, hBrush);	GetClientRect(w32g_tracer_wnd.hwnd,&rc);	Rectangle(w32g_tracer_wnd.hmdc,rc.left,rc.top,rc.right,rc.bottom);	InvalidateRect( w32g_tracer_wnd.hwnd, NULL, FALSE );	SelectObject(w32g_tracer_wnd.hmdc, hgdiobj_hpen);	DeleteObject(hPen);	SelectObject(w32g_tracer_wnd.hmdc, hgdiobj_hbrush);	DeleteObject(hBrush);	if ( lockflag ) TRACER_UNLOCK();}#define TRACER_VOICE_OFF -1#define TRACER_VOICE_SUSTAINED -2void w32_tracer_ctl_event(CtlEvent *e){	RECT rc;	int v1, v2;    switch ( e->type ) {	case CTLE_NOW_LOADING:	{		char * title;		TracerWndReset ();		TracerWndPaintAll (TRUE);		strncpy ( w32g_tracer_wnd.filename, (char *)e->v1, 1000 );		w32g_tracer_wnd.filename[1000] = '\0';		title = get_midi_title(w32g_tracer_wnd.filename);		if ( title == NULL ) title = w32g_tracer_wnd.filename;		strcpy ( w32g_tracer_wnd.titlename, "  " );		strncat ( w32g_tracer_wnd.titlename, title, 1000 );		w32g_tracer_wnd.titlename[1000] = '\0';		get_head_rc ( &rc, &w32g_tracer_wnd.rc_head_rest );		cheap_string_view_draw ( &rc, w32g_tracer_wnd.titlename, C_TEXT_FORE, C_TEXT_BACK, CSV_LEFT, TRUE );	}		break;	case CTLE_LOADING_DONE:		break;	case CTLE_PLAY_START:#if 0		{		int i;		for ( i = 0; i < TRACER_CHANNELS; i++ ) {//			tracer_ch_program_draw ( i, -1, -1, (char *)-1, -1 );			w32g_tracer_wnd.volume[i] = channel[i].volume;			w32g_tracer_wnd.expression[i] = channel[i].expression;			w32g_tracer_wnd.panning[i] = channel[i].panning;			w32g_tracer_wnd.sustain[i] = channel[i].sustain;			w32g_tracer_wnd.pitch_bend[i] = channel[i].pitchbend;			w32g_tracer_wnd.mod_wheel[i] = channel[i].mod.val;			w32g_tracer_wnd.chorus_effect[i] = channel[i].chorus_level;			w32g_tracer_wnd.reverb_effect[i] = channel[i].reverb_level;		}#endif		break;	case CTLE_PLAY_END:		break;	case CTLE_TEMPO:#if 0		{		char buff[64];		w32g_tracer_wnd.tempo = (int)e->v1;		sprintf ( buff, "%08ld", w32g_tracer_wnd.current_time);		cheap_string_view_draw ( &w32g_tracer_wnd.rc_tempo, buff, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, TRUE );		}#endif		break;	case CTLE_METRONOME:		break;	case CTLE_CURRENT_TIME:#if 0		{		int sec, min, hour;		if(midi_trace.flush_flag)			return;		if(ctl->trace_playing)			sec = (int)e->v1;		else {			sec = current_trace_samples();			if(sec < 0)				sec = (int)e->v1;			else				sec = sec / play_mode->rate;		}		min = sec / 60; sec %= 60;		hour = min / 60; min %= 60;		sprintf ( w32g_tracer_wnd.current_time, "%02d:%02d:%02d", hour, min, sec );		w32g_tracer_wnd.current_time_sec = sec;		cheap_string_view_draw ( &w32g_tracer_wnd.rc_current_time, w32g_tracer_wnd.current_time, C_TEXT_FORE, C_TEXT_BACK, CSV_CENTER, TRUE );		cheap_volume_view_draw ( &w32g_tracer_wnd.rc_maxvoices, (int)e->v2, voices, C_BAR_FORE, C_BAR_BACK, CVV_TYPE_LEFT, TRUE );	}#endif		break;	case CTLE_NOTE:		{		int vel = 0, vel_old = w32g_tracer_wnd.velocity[(int)e->v2];		switch ( (int)e->v1 ) {		case VOICE_ON:			w32g_tracer_wnd.velocity[(int)e->v2] += (int)e->v4;			break;		case VOICE_SUSTAINED:			vel = TRACER_VOICE_SUSTAINED;			break;		case VOICE_DIE:		case VOICE_FREE:		case VOICE_OFF:			w32g_tracer_wnd.velocity[(int)e->v2] -= (int)e->v4;			vel = TRACER_VOICE_OFF;			break;		}		if ( w32g_tracer_wnd.velocity[(int)e->v2]  < 0 )			w32g_tracer_wnd.velocity[(int)e->v2]  = 0;		if ( get_ch_rc ( (int)e->v2, &rc, &w32g_tracer_wnd.rc_notes ) == 0 )			notes_view_draw ( &rc, (int)e->v3, vel, FALSE, TRUE );		w32g_tracer_wnd.notes[(int)e->v2][(int)e->v3] = vel;		if ( get_ch_rc ( (int)e->v2, &rc, &w32g_tracer_wnd.rc_velocity ) == 0 )			tracer_velocity_draw_ex ( &rc, w32g_tracer_wnd.velocity[(int)e->v2], vel_old, VEL_MAX, TRUE );		}		break;	case CTLE_MASTER_VOLUME://		ctl_master_volume((int)e->v1);#if 0		w32g_tracer_wnd.master_volume = (int)e->v1;		cheap_volume_view_draw ( &w32g_tracer_wnd.rc_master_volume, w32g_tracer_wnd.master_volume, 256, C_BAR_FORE, C_BAR_BACK, CVV_TYPE_LEFT, TRUE );#endif		break;	case CTLE_MUTE:		tracer_ch_number_draw((int) e->v1, (int) e->v2, TRUE);		break;	case CTLE_PROGRAM:		v1 = (int)e->v1; v2 = (int)e->v2;		tracer_ch_program_draw ( v1, -1, v2, (char *)e->v3, -1, TRUE );		break;	case CTLE_DRUMPART:		break;	case CTLE_VOLUME:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.volume[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_volume ) == 0 )				tracer_volume_draw ( &rc, v2, 128, TRUE );		w32g_tracer_wnd.volume[v1] = v2;		break;	case CTLE_EXPRESSION:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.expression[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_expression ) == 0 )				tracer_expression_draw ( &rc, v2, 128, TRUE );		w32g_tracer_wnd.expression[v1] = v2;		break;	case CTLE_PANNING:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.panning[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_panning ) == 0 )				tracer_pan_draw ( &rc, v2, 128, TRUE );		w32g_tracer_wnd.panning[v1] = v2;		break;	case CTLE_SUSTAIN:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.sustain[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_sustain ) == 0 )				tracer_sustain_draw ( &rc, v2, TRUE );		w32g_tracer_wnd.sustain[v1] = v2;		break;	case CTLE_PITCH_BEND:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.pitch_bend[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_pitch_bend ) == 0 )				tracer_pitch_bend_draw ( &rc, v2, 0x4000, TRUE );		w32g_tracer_wnd.pitch_bend[v1] = v2;		break;	case CTLE_MOD_WHEEL:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.mod_wheel[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_mod_wheel ) == 0 )				tracer_mod_wheel_draw ( &rc, v2, 32, TRUE );		w32g_tracer_wnd.mod_wheel[v1] = v2;		break;	case CTLE_CHORUS_EFFECT:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.chorus_effect[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_chorus_effect ) == 0 )				tracer_chorus_effect_draw ( &rc, v2, 128, TRUE );		w32g_tracer_wnd.chorus_effect[v1] = v2;		break;	case CTLE_REVERB_EFFECT:		v1 = (int)e->v1; v2 = (int)e->v2;		if ( w32g_tracer_wnd.reverb_effect[v1] != v2 )			if ( get_ch_rc ( v1, &rc, &w32g_tracer_wnd.rc_reverb_effect ) == 0 )				tracer_reverb_effect_draw ( &rc, v2, 128, TRUE );		w32g_tracer_wnd.reverb_effect[v1] = v2;		break;	case CTLE_KEY_OFFSET:		get_head_rc(&rc, &w32g_tracer_wnd.rc_temper_keysig);		tracer_temper_keysig_draw(&rc, CTL_STATUS_UPDATE, (int) e->v1, TRUE);		break;	case CTLE_TEMPER_KEYSIG:		get_head_rc(&rc, &w32g_tracer_wnd.rc_temper_keysig);		tracer_temper_keysig_draw(&rc, (int8) e->v1, CTL_STATUS_UPDATE, TRUE);		break;	case CTLE_TEMPER_TYPE:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -