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

📄 mac_dlog.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 2 页
字号:
/*     TiMidity++ -- MIDI to WAVE converter and player    Copyright (C) 1999-2002 Masanao Izumo <mo@goice.co.jp>    Copyright (C) 1995 Tuukka Toivonen <tt@cgs.fi>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA	Macintosh interface for TiMidity	by T.Nogami	<t-nogami@happy.email.ne.jp>	    mac_dlog.c    Preference dialog*/#ifdef HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#include	<stdio.h>#include	<stdlib.h>#include	<string.h>#include	"timidity.h"#include	"instrum.h"#include	"playmidi.h"#include	"output.h"#include	"readmidi.h"#include	"reverb.h"#include	"mac_main.h"#include	"mac_util.h"extern int effect_lr_mode;void mac_DefaultOption(){	play_mode->rate=DEFAULT_RATE;	play_mode->encoding &= ~PE_MONO;	/*stereo*/	/*play_mode->encoding |= PE_MONO;*/	/*mono*/		antialiasing_allowed=0;	fast_decay=0;	adjust_panning_immediately=0;	free_instruments_afterwards=1;	/*option -U*/		voices=DEFAULT_VOICES;	control_ratio = play_mode->rate/CONTROLS_PER_SECOND;	gSilentSec=3.0;	mac_LogWindow.show=mac_ListWindow.show=true;	mac_WrdWindow.show=mac_DocWindow.show=		mac_SpecWindow.show=mac_TraceWindow.show=false;	gShuffle=false;	opt_modulation_wheel = 1;	opt_portamento = 1;	opt_nrpn_vibrato = 1;#ifdef REVERB_CONTROL_ALLOW	opt_reverb_control = 1;#else	opt_reverb_control = 0;#endif#ifdef CHORUS_CONTROL_ALLOW	opt_chorus_control = 1;#else	opt_chorus_control = 0;#endif	opt_surround_chorus = 0;	opt_channel_pressure = 0;	opt_trace_text_meta_event = 0;	opt_overlap_voice_allow = 1;		effect_lr_mode=-1; //no effect	modify_release=0;	opt_default_mid=0x7e; //GM		readmidi_wrd_mode=1;		evil_level=EVIL_NORMAL;	do_initial_filling=0;	reduce_voice_threshold = 0;	auto_reduce_polyphony = 0;}enum{iOK=1, iCancel=2, iDefault=3, iRate=5, iMono=6, iStereo=7,			iFreeInstr=8, iAntiali=9, iFastDecay=10, iAdjustPanning=11,			iVoices=13, iControlRaio=15, iSilent=18,			iModulation_wheel = 21,			iPortamento = 22,			iNrpn_vibrato = 23,						iReverb = 24,			iReverb_setlevel = 38,			iReverb_level = 39,			iReverb_level_hint = 42,									iChorus = 25,			iChorus_setlevel = 40,			iChorus_level = 41,			iChorus_level_hint = 43,						iChannel_pressure = 26,			iText_meta_event = 27,			iOverlap_voice = 28,			/*iPReverb = 29,*/						iModify_release=31,			iModify_release_ms=37,			iModify_release_ms_hint1=30,						iModify_release_ms_hint2=44,			iModify_release_ms_hint3=45,						iPresence_balance=32,			iManufacture=33,			iEvil_level=34,			/*iDo_initial_filling=35,*/			iShuffle= 36			};// ******************************************static void mac_AdjustDialog( DialogRef dialog ){	//reverb	if( GetDialogItemValue(dialog, iReverb)==2 ){		SetDialogItemHilite(dialog, iReverb_setlevel, kControlNoPart);	}else{		SetDialogItemHilite(dialog, iReverb_setlevel, kControlInactivePart);		SetDialogItemValue(dialog, iReverb_setlevel, 0);	}	if( GetDialogItemValue(dialog, iReverb_setlevel) )	{		ShowDialogItem(dialog, iReverb_level);		ShowDialogItem(dialog, iReverb_level_hint);							}else{		HideDialogItem(dialog, iReverb_level);		HideDialogItem(dialog, iReverb_level_hint);							}	//chorus	if( GetDialogItemValue(dialog, iChorus)==2 ){		// activate		SetDialogItemHilite(dialog, iChorus_setlevel, kControlNoPart);		mySetDialogItemText(dialog, iChorus_level_hint, "\p(1..127)");	}else if( GetDialogItemValue(dialog, iChorus)==3 ){		// activate		SetDialogItemHilite(dialog, iChorus_setlevel, kControlNoPart);		mySetDialogItemText(dialog, iChorus_level_hint, "\p(1..63)");	}else{	// inactivate		SetDialogItemHilite(dialog, iChorus_setlevel, kControlInactivePart);		SetDialogItemValue(dialog, iChorus_setlevel, 0);	}		if( GetDialogItemValue(dialog, iChorus_setlevel) )	{		ShowDialogItem(dialog, iChorus_level);		ShowDialogItem(dialog, iChorus_level_hint);	}else{		HideDialogItem(dialog, iChorus_level);		HideDialogItem(dialog, iChorus_level_hint);	}		// modify release	if( GetDialogItemValue(dialog, iModify_release) )	{		ShowDialogItem(dialog, iModify_release_ms);		ShowDialogItem(dialog, iModify_release_ms_hint1);		ShowDialogItem(dialog, iModify_release_ms_hint2);		ShowDialogItem(dialog, iModify_release_ms_hint3);	}else{		HideDialogItem(dialog, iModify_release_ms);		HideDialogItem(dialog, iModify_release_ms_hint1);		HideDialogItem(dialog, iModify_release_ms_hint2);		HideDialogItem(dialog, iModify_release_ms_hint3);	}}// ***************************************************static void SetDialogValue(DialogRef theDialog){#define BUFSIZE 80	short	value;	char	buf[BUFSIZE];	Str255		s;		SetDialogItemValue(theDialog, iStereo, !(play_mode->encoding & PE_MONO));	SetDialogItemValue(theDialog, iMono, play_mode->encoding & PE_MONO);	value=(play_mode->rate==11025? 1:(play_mode->rate==44100? 3:2));	SetDialogItemValue(theDialog, iRate, value);	SetDialogItemValue(theDialog, iFreeInstr, free_instruments_afterwards);	SetDialogItemValue(theDialog, iAntiali, antialiasing_allowed);	SetDialogItemValue(theDialog, iFastDecay, fast_decay);	SetDialogItemValue(theDialog, iAdjustPanning, adjust_panning_immediately);	NumToString(voices, s);	mySetDialogItemText(theDialog, iVoices, s);	SelectDialogItemText(theDialog, iVoices, 0, 32000);	NumToString(control_ratio, s);	mySetDialogItemText(theDialog, iControlRaio, s);	snprintf(buf, BUFSIZE, "%g",gSilentSec); /*use s as C string*/	mySetDialogItemText(theDialog, iSilent, c2pstr(buf));	SetDialogItemValue(theDialog, iFastDecay, fast_decay);	SetDialogItemValue(theDialog, iModulation_wheel, opt_modulation_wheel);	SetDialogItemValue(theDialog, iPortamento, opt_portamento);	SetDialogItemValue(theDialog, iNrpn_vibrato, opt_nrpn_vibrato);	SetDialogItemValue(theDialog, iChannel_pressure, opt_channel_pressure);	SetDialogItemValue(theDialog, iText_meta_event, opt_trace_text_meta_event);	SetDialogItemValue(theDialog, iOverlap_voice, opt_overlap_voice_allow);		/*-----reverb-----*/	if( opt_reverb_control<0 ){ //Enabel		SetDialogItemValue(theDialog, iReverb, 2);		SetDialogItemValue(theDialog, iReverb_setlevel, 1);		SetDialogItemHilite(theDialog, iReverb_setlevel, kControlNoPart);		SetDialogTEValue(theDialog, iReverb_level, -opt_reverb_control);			}else if( opt_reverb_control==0 || opt_reverb_control==2 ){ //Non or global		SetDialogItemValue(theDialog, iReverb, opt_reverb_control+1);		SetDialogItemValue(theDialog, iReverb_setlevel, 1);		SetDialogItemHilite(theDialog, iReverb_setlevel, kControlInactivePart);	}else{	// opt_reverb_control==1, no level		SetDialogItemValue(theDialog, iReverb, 2);		SetDialogItemValue(theDialog, iReverb_setlevel, 0);		SetDialogItemHilite(theDialog, iReverb_setlevel, kControlNoPart);	}		/*-----chorus-----*/	if( opt_surround_chorus ){		SetDialogItemValue(theDialog, iChorus, 3); //surround	}else if( opt_chorus_control<0 || opt_chorus_control==1 ){		SetDialogItemValue(theDialog, iChorus, 2); //Enable		SetDialogItemHilite(theDialog, iChorus_setlevel, kControlNoPart);	}else{		SetDialogItemValue(theDialog, iChorus, 1); //Non		SetDialogItemHilite(theDialog, iChorus_setlevel, kControlInactivePart);	}		if( opt_chorus_control<0 ){		SetDialogItemHilite(theDialog, iChorus_setlevel, kControlNoPart);		SetDialogItemValue(theDialog, iChorus_setlevel, 1);		SetDialogTEValue(theDialog, iChorus_level, -opt_chorus_control);	}else{		SetDialogItemValue(theDialog, iChorus_setlevel, 0);	}		/*-----modify_release-----*/	SetDialogItemValue(theDialog, iModify_release,  (modify_release!=0) );	SetDialogTEValue(theDialog, iModify_release_ms, modify_release);		SetDialogItemValue(theDialog, iPresence_balance, effect_lr_mode+2);	value= (	opt_default_mid==0x41? 1:           //GS				opt_default_mid==0x43? 2:3	);		//XG:GM	SetDialogItemValue(theDialog, iManufacture, value);	SetDialogItemValue(theDialog, iEvil_level, evil_level);	//SetDialogItemValue(theDialog, iDo_initial_filling, do_initial_filling);	SetDialogItemValue(theDialog, iShuffle, gShuffle);		mac_AdjustDialog( theDialog );}static int mac_limit_params(int var, int min_limit, int max_limit){	if( var < min_limit ) var = min_limit;	if( var > max_limit ) var = max_limit;	return var;}// *******************************************//	mac_SetPlayOption// *******************************************OSErr mac_SetPlayOption(){	Boolean		more=false;	short		item, value;	long		i;	DialogRef	dialog, theDialog;	EventRecord	event;	Str255		s;		theDialog=GetNewDialog(201,0,(WindowRef)-1);		if( !theDialog ) return 1;	else	{		SetDialogDefaultItem(theDialog, iOK);		SetDialogCancelItem(theDialog, iCancel);				SetDialogValue(theDialog);		ShowWindow(GetDialogWindow(theDialog));				for(;;)		{			WaitNextEvent(everyEvent, &event, 1,0);			/*if( event.what==mouseDown ){				short		part;				WindowRef	window;				part = FindWindow(event.where, &window);				if( part==inDrag ){					DragWindow(window, event.where, &qd.screenBits.bounds);					continue;				}			}else if(event.what==)			*/			if( IsDialogEvent( &event ) )			{				if( StdFilterProc(dialog, &event, &item) ) /**/;					else DialogSelect(&event, &dialog, &item);								if( theDialog!=dialog ) continue;				switch(item)				{				case iOK:					myGetDialogItemText(dialog, iVoices, s);					StringToNum(s,&i);					if( i<=0 ) i=1;					max_voices=MAX_SAFE_MALLOC_SIZE / sizeof(Voice);					if ( i<max_voices ) max_voices=i;					voices=max_voices;											myGetDialogItemText(dialog, iControlRaio, s);					StringToNum(s,&i);					if( i<=0 ) i=22; /*i=1 cause ploblem*/					if( MAX_CONTROL_RATIO<i ) i=MAX_CONTROL_RATIO;					control_ratio=i;										myGetDialogItemText(dialog, iSilent, s);					gSilentSec=atof(p2cstr(s));					if( gSilentSec<0 ) gSilentSec=0;					if( gSilentSec>10 ) gSilentSec=10;										if( GetDialogItemValue(dialog, iMono) )						play_mode->encoding |= PE_MONO;					else play_mode->encoding &= ~PE_MONO;										if( (value=GetDialogItemValue(dialog, iRate))==1 )	play_mode->rate=11025;					else if( value==2 ) play_mode->rate=22050;					else if( value==3 ) play_mode->rate=44100;					else play_mode->rate=22050;										free_instruments_afterwards=GetDialogItemValue(dialog, iFreeInstr)? 1:0;					antialiasing_allowed=		GetDialogItemValue(dialog, iAntiali)? 1:0;					fast_decay=					GetDialogItemValue(dialog, iFastDecay)? 1:0;					adjust_panning_immediately=	GetDialogItemValue(dialog, iAdjustPanning)? 1:0;					opt_modulation_wheel=		GetDialogItemValue(dialog, iModulation_wheel)? 1:0;					opt_portamento=				GetDialogItemValue(dialog, iPortamento)? 1:0;					opt_nrpn_vibrato=			GetDialogItemValue(dialog, iNrpn_vibrato)? 1:0;					opt_channel_pressure=		GetDialogItemValue(dialog, iChannel_pressure)? 1:0;					opt_trace_text_meta_event=	GetDialogItemValue(dialog, iText_meta_event)? 1:0;					opt_overlap_voice_allow=	GetDialogItemValue(dialog, iOverlap_voice)? 1:0;

⌨️ 快捷键说明

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