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

📄 gogo_a.c

📁 MIDI解码程序(用VC编写)
💻 C
📖 第 1 页 / 共 3 页
字号:
  }}static void set_gogo_opts(void){	if(gogo_opts.optENCODEMODE>=0)		MPGE_setConfigure(MC_ENCODEMODE,(UPARAM)gogo_opts.optENCODEMODE,(UPARAM)0);	if(gogo_opts.optINPFREQ>=0)		MPGE_setConfigure(MC_INPFREQ,(UPARAM)gogo_opts.optINPFREQ,(UPARAM)0);	if(gogo_opts.optOUTFREQ>=0)		MPGE_setConfigure(MC_OUTFREQ,(UPARAM)gogo_opts.optOUTFREQ,(UPARAM)0);	if(gogo_opts.optSTARTOFFSET>=0)		MPGE_setConfigure(MC_STARTOFFSET,(UPARAM)gogo_opts.optSTARTOFFSET,(UPARAM)0);	if(gogo_opts.optUSEPSY>=0)		MPGE_setConfigure(MC_USEPSY,(UPARAM)gogo_opts.optUSEPSY,(UPARAM)0);	if(gogo_opts.optUSELPF16>=0)		MPGE_setConfigure(MC_USELPF16,(UPARAM)gogo_opts.optUSELPF16,(UPARAM)0);	if(gogo_opts.optUSEMMX>=0)		MPGE_setConfigure(MC_USEMMX,(UPARAM)gogo_opts.optUSEMMX,(UPARAM)0);	if(gogo_opts.optUSE3DNOW>=0)		MPGE_setConfigure(MC_USE3DNOW,(UPARAM)gogo_opts.optUSE3DNOW,(UPARAM)0);	if(gogo_opts.optUSEKNI>=0)		MPGE_setConfigure(MC_USEKNI,(UPARAM)gogo_opts.optUSEKNI,(UPARAM)0);	if(gogo_opts.optUSEE3DNOW>=0)		MPGE_setConfigure(MC_USEE3DNOW,(UPARAM)gogo_opts.optUSEE3DNOW,(UPARAM)0);	if(gogo_opts.optUSESSE>=0)		MPGE_setConfigure(MC_USESSE,(UPARAM)gogo_opts.optUSESSE,(UPARAM)0);	if(gogo_opts.optUSECMOV>=0)		MPGE_setConfigure(MC_USECMOV,(UPARAM)gogo_opts.optUSECMOV,(UPARAM)0);	if(gogo_opts.optUSEEMMX>=0)		MPGE_setConfigure(MC_USEEMMX,(UPARAM)gogo_opts.optUSEEMMX,(UPARAM)0);	if(gogo_opts.optUSESSE2>=0)		MPGE_setConfigure(MC_USESSE2,(UPARAM)gogo_opts.optUSESSE2,(UPARAM)0);	if(gogo_opts.optADDTAGnum>=0){		int i;		for(i=0;i<gogo_opts.optADDTAGnum;i++)			MPGE_setConfigure(MC_ADDTAG,(UPARAM)gogo_opts.optADDTAG_len[i],(UPARAM)gogo_opts.optADDTAG_buf[i]);	}	if(gogo_opts.optEMPHASIS>=0)		MPGE_setConfigure(MC_EMPHASIS,(UPARAM)gogo_opts.optEMPHASIS,(UPARAM)0);	if(gogo_opts.optVBR>=0)		MPGE_setConfigure(MC_VBR,(UPARAM)gogo_opts.optVBR,(UPARAM)0);	if(gogo_opts.optCPU>=0)		MPGE_setConfigure(MC_CPU,(UPARAM)gogo_opts.optCPU,(UPARAM)0);	if(gogo_opts.optBYTE_SWAP>=0)		MPGE_setConfigure(MC_BYTE_SWAP,(UPARAM)gogo_opts.optBYTE_SWAP,(UPARAM)0);	if(gogo_opts.opt8BIT_PCM>=0)		MPGE_setConfigure(MC_8BIT_PCM,(UPARAM)gogo_opts.opt8BIT_PCM,(UPARAM)0);	if(gogo_opts.optMONO_PCM>=0)		MPGE_setConfigure(MC_MONO_PCM,(UPARAM)gogo_opts.optMONO_PCM,(UPARAM)0);	if(gogo_opts.optTOWNS_SND>=0)		MPGE_setConfigure(MC_TOWNS_SND,(UPARAM)gogo_opts.optTOWNS_SND,(UPARAM)0);	if(gogo_opts.optTHREAD_PRIORITY!=-10000)		MPGE_setConfigure(MC_THREAD_PRIORITY,(UPARAM)gogo_opts.optTHREAD_PRIORITY,(UPARAM)0);	if(gogo_opts.optREADTHREAD_PRIORITY!=-10000)		MPGE_setConfigure(MC_READTHREAD_PRIORITY,(UPARAM)gogo_opts.optREADTHREAD_PRIORITY,(UPARAM)0);	if(gogo_opts.optOUTPUT_FORMAT>=0)		MPGE_setConfigure(MC_OUTPUT_FORMAT,(UPARAM)gogo_opts.optOUTPUT_FORMAT,(UPARAM)0);	if(gogo_opts.optENHANCEDFILTER_A>=0 && gogo_opts.optENHANCEDFILTER_B>=0)		MPGE_setConfigure(MC_ENHANCEDFILTER,(UPARAM)gogo_opts.optENHANCEDFILTER_A,(UPARAM)gogo_opts.optENHANCEDFILTER_B);	if(gogo_opts.optVBRBITRATE_low>=0 && gogo_opts.optVBRBITRATE_high>=0)		MPGE_setConfigure(MC_VBRBITRATE,(UPARAM)gogo_opts.optVBRBITRATE_low,(UPARAM)gogo_opts.optVBRBITRATE_high);	if(gogo_opts.optMSTHRESHOLD_threshold>=0 && gogo_opts.optMSTHRESHOLD_mspower>=0)		MPGE_setConfigure(MC_MSTHRESHOLD,(UPARAM)gogo_opts.optMSTHRESHOLD_threshold,(UPARAM)gogo_opts.optMSTHRESHOLD_mspower);	if(gogo_opts.optVERIFY>=0)		MPGE_setConfigure(MC_VERIFY,(UPARAM)gogo_opts.optVERIFY,(UPARAM)0);	if(gogo_opts.optOUTPUTDIR[0]!='\0')		MPGE_setConfigure(MC_OUTPUTDIR,(UPARAM)gogo_opts.optOUTPUTDIR,(UPARAM)0);	if(strcmp((char *)gogo_opts.output_name,"-")==0){		MPGE_setConfigure(MC_OUTPUTFILE,(UPARAM)MC_OUTDEV_STDOUT,(UPARAM)0);	} else {		MPGE_setConfigure(MC_OUTPUTFILE,(UPARAM)MC_OUTDEV_FILE,(UPARAM)gogo_opts.output_name);	}	if(dpm.rate>=32000){		if(gogo_opts.optBITRATE1>=0)			MPGE_setConfigure(MC_BITRATE,(UPARAM)gogo_opts.optBITRATE1,(UPARAM)0);	} else {		if(gogo_opts.optBITRATE2>=0)			MPGE_setConfigure(MC_BITRATE,(UPARAM)gogo_opts.optBITRATE2,(UPARAM)0);	}}static int id3_to_buffer(mp3_id3_tag_t *id3_tag, char *buffer){	memset(buffer,0x20,128);#if 0	memcpy(buffer+0,id3_tag->tag);#else	memcpy(buffer+0,"TAG",3); //ID3 Tag v1#endif	memcpy(buffer+3,id3_tag->title,30);	memcpy(buffer+33,id3_tag->artist,30);	memcpy(buffer+63,id3_tag->album,30);	memcpy(buffer+93,id3_tag->year,4);	memcpy(buffer+97,id3_tag->comment,30);	buffer[127] = id3_tag->genre;	return 0;}static char *id3_tag_strncpy(char *dst, const char *src, int num){	// NULL廔抂傪晅壛偟偰偼側傜側偄	int len = strlen(src);	return memcpy (dst, src, (len <= num) ? len : num);}int gogo_opts_id3_tag(const char *title, const char *artist, const char *album, const char *year, const char *comment, int genre){	mp3_id3_tag_t id3_tag;	char *buffer;	buffer = (char *)safe_malloc(128);	if(buffer==NULL)		return -1;	memset(&id3_tag,0x20,128); // TAG慡懱傪嬻敀暥帤偱fill	if(title){		id3_tag_strncpy(id3_tag.title,title,30);	}	if(artist){		id3_tag_strncpy(id3_tag.artist,artist,30);	}	if(album){		id3_tag_strncpy(id3_tag.album,album,30);	}	if(year){		id3_tag_strncpy(id3_tag.year,year,4);	}	if(comment){		id3_tag_strncpy(id3_tag.comment,comment,30);	}	if(genre>=0)		id3_tag.genre = (unsigned char)(genre & 0xff);	else // 僕儍儞儖枹愝掕		id3_tag.genre = (unsigned char)0xff;	id3_to_buffer(&id3_tag,buffer);	gogo_opts.optADDTAGnum++;	gogo_opts.optADDTAG_len[gogo_opts.optADDTAGnum-1] = 128;	gogo_opts.optADDTAG_buf[gogo_opts.optADDTAGnum-1] = buffer;//	MPGE_setConfigure(MC_ADDTAG,(UPARAM)128,(UPARAM)buffer);	return 0;}// 僐儅儞僪儔僀儞傪揥奐偡傞int commandline_to_argc_argv(char *commandline, int *argc, char ***argv){	char *p1, *p2, *p3;	int argc_max = 0;	*argc = 0;	*argv = NULL;	p1 = commandline;	for(;;){		int quot = 0;		while(isspace(*p1))			p1++;		if(*p1=='"')			quot = 1;		else if(*p1=='\'')			quot = 2;		if(*p1=='\0')			return 0;		p2 = p1+1;		while((quot==1&&*p2=='"') || (quot==2&&*p2=='\'') || *p2=='\0')			p2++;		while(!isspace(*p2) || *p2=='\0')			p2++;		if(*p2!='\0'){			p3 = p2+1;			while(isspace(*p3))				p3++;		} else{			p3 = NULL;		}		(*argc)++;		if(*argc>argc_max)			argc_max += 100;		*argv = (char **)safe_realloc(*argv,sizeof(char*)*argc_max);		if(*argv==NULL)			return -1;		*argv[*argc-1] = (char *)safe_malloc(sizeof(char)*(p2-p1));		if(*argv[*argc-1]==NULL){			(*argc)--;			return 0;		}		strncpy(*argv[*argc-1],p1,p2-p1);		*argv[*argc-1][p2-p1] = '\0';		if(p3==NULL)			return 0;		p1 = p3;	}}void free_argv(char **argv, int argc){	if(argv!=NULL){		int i;		for(i=0;i<argc;i++)			if(argv[i]!=NULL)				free(argv[i]);		free(argv);	}}	volatile char *gogo_commandline_options = NULL;volatile int use_gogo_commandline_options = 0;void set_gogo_opts_use_commandline_options(char *commandline){	int argc;	char **argv;	int num;	if(commandline_to_argc_argv(commandline,&argc,&argv)){		return;	}	for(num = 0;num<argc;){		// output bitrate		// -b kbps        //     input PCM is higher than 32kHz [ 32,40,48,56,64,80,96,112,128,160,192,224,256,320 ]        //     input PCM is lower than 32kHz   [ 8,16,24,32,40,48,56,64,80,96,112,128,144,160 ]		if(strcasecmp("-b",argv[num])==0){			if(num+1>=argc) break;			gogo_opts.optBITRATE1 = gogo_opts.optBITRATE2 = atoi(argv[num+1]);			num += 2;			continue;		}		// output bitrate for VBR		// -br low_kbps high_kbps        //     [ 32,40,48,56,64,80,96,112,128,160,192,224,256,320 ]		if(strcasecmp("-br",argv[num])==0){			if(num+2>=argc) break;			if(gogo_opts.optVBR==-1)				gogo_opts.optVBR = 9;			gogo_opts.optVBRBITRATE_low = atoi(argv[num+1]);			gogo_opts.optVBRBITRATE_high = atoi(argv[num+2]);			num += 3;			continue;		}		// low pass filter		// -lpf on : 16kHz low pass filter ON		// -lpf off : 16kHz low pass filter OFF		// -lpf para1 para2 :  enhanced low pass filter		//     para1 (0-100)   para2 (0-100)		if(strcasecmp("-lpf",argv[num])==0){			if(num+1>=argc) break;			if(strcasecmp("on",argv[num+1])==0){				gogo_opts.optENHANCEDFILTER_A = -1;				gogo_opts.optENHANCEDFILTER_B = -1;				gogo_opts.optUSELPF16 = 1;				num += 2;				continue;			} else if(strcasecmp("off",argv[num+1])==0){				gogo_opts.optENHANCEDFILTER_A = -1;				gogo_opts.optENHANCEDFILTER_B = -1;				gogo_opts.optUSELPF16 = 0;				num += 2;				continue;			}			if(num+2>=argc) break;			gogo_opts.optENHANCEDFILTER_A = atoi(argv[num+1]);			gogo_opts.optENHANCEDFILTER_B = atoi(argv[num+2]);			num += 3;			continue;		}		// encodemode		// -m m : monoral		// -m s : stereo		// -m j : joint stereo		// -m f : mid/side stereo		// -m d : dual channel		if(strcasecmp("-m",argv[num])==0){			if(num+1>=argc) break;			if(strcasecmp("m",argv[num+1])==0){				gogo_opts.optENCODEMODE = MC_MODE_MONO;			} else if(strcasecmp("s",argv[num+1])==0){				gogo_opts.optENCODEMODE = MC_MODE_STEREO;			} else if(strcasecmp("j",argv[num+1])==0){				gogo_opts.optENCODEMODE = MC_MODE_JOINT;			} else if(strcasecmp("f",argv[num+1])==0){				gogo_opts.optENCODEMODE = MC_MODE_MSSTEREO;			} else if(strcasecmp("d",argv[num+1])==0){				gogo_opts.optENCODEMODE = MC_MODE_DUALCHANNEL;			}			num += 2;			continue;		}		// -psy		// -nopsy		if(strcasecmp("-psy",argv[num])==0){			gogo_opts.optUSEPSY = 1;			num += 1;			continue;		}		if(strcasecmp("-nopsy",argv[num])==0){			gogo_opts.optUSEPSY = 0;			num += 1;			continue;		}		// -on 3dn		// -on mmx		// -on sse		// -on kni		// -on e3dn		// -on sse		// -on cmov		// -on emmx		// -on sse2		if(strcasecmp("-on",argv[num])==0){			if(num+1>=argc) break;			if(strcasecmp("3dn",argv[num+1])==0){				gogo_opts.optUSE3DNOW = 1;			} else if(strcasecmp("mmx",argv[num+1])==0){				gogo_opts.optUSEMMX = 1;			} else if(strcasecmp("sse",argv[num+1])==0 || strcasecmp("kni",argv[num+1])==0){				gogo_opts.optUSEKNI = 1;			} else if(strcasecmp("e3dn",argv[num+1])==0){				gogo_opts.optUSEE3DNOW = 1;			} else if(strcasecmp("sse",argv[num+1])==0){				gogo_opts.optUSESSE = 1;			} else if(strcasecmp("cmov",argv[num+1])==0){				gogo_opts.optUSECMOV = 1;			} else if(strcasecmp("emmx",argv[num+1])==0){				gogo_opts.optUSEEMMX = 1;			} else if(strcasecmp("sse2",argv[num+1])==0){				gogo_opts.optUSESSE2 = 1;			}			num += 2;			continue;		}		// -off 3dn		// -off mmx		// -off sse		// -off kni		// -off e3dn		// -off sse		// -off cmov		// -off emmx		// -off sse2		if(strcasecmp("-on",argv[num])==0){			if(num+1>=argc) break;			if(strcasecmp("3dn",argv[num+1])==0){				gogo_opts.optUSE3DNOW = 0;			} else if(strcasecmp("mmx",argv[num+1])==0){				gogo_opts.optUSEMMX = 0;			} else if(strcasecmp("sse",argv[num+1])==0 || strcasecmp("kni",argv[num+1])==0){				gogo_opts.optUSEKNI = 0;			} else if(strcasecmp("e3dn",argv[num+1])==0){				gogo_opts.optUSEE3DNOW = 0;			} else if(strcasecmp("sse",argv[num+1])==0){				gogo_opts.optUSESSE = 0;			} else if(strcasecmp("cmov",argv[num+1])==0){				gogo_opts.optUSECMOV = 0;			} else if(strcasecmp("emmx",argv[num+1])==0){				gogo_opts.optUSEEMMX = 0;			} else if(strcasecmp("sse2",argv[num+1])==0){				gogo_opts.optUSESSE2 = 0;			}			num += 2;			continue;		}		// emphasis type		// -emp n : none		// -emp 5 : 50/15ms (normal CD-DA emphasis)		// -emp c : CCITT		if(strcasecmp("-emp",argv[num])==0){			if(num+1>=argc) break;			if(strcasecmp("n",argv[num+1])==0){				gogo_opts.optEMPHASIS = MC_EMP_NONE;			} else if(strcasecmp("5",argv[num+1])==0){				gogo_opts.optEMPHASIS = MC_EMP_5015MS;			} else if(strcasecmp("c",argv[num+1])==0){				gogo_opts.optEMPHASIS = MC_EMP_CCITT;			}			num += 2;			continue;		}		// -cpu num		if(strcasecmp("-cpu",argv[num])==0){			if(num+1>=argc) break;			gogo_opts.optCPU = atoi(argv[num+1]);			num += 2;			continue;		}		// -v 0..9 (low compression - high compression)		if(strcasecmp("-v",argv[num])==0){			if(num+1>=argc) break;			gogo_opts.optVBR = atoi(argv[num+1]);			num += 2;			continue;		}		// -d freq : output MP3 frequency(kHz) 		if(strcasecmp("-d",argv[num])==0){			if(num+1>=argc) break;			gogo_opts.optOUTFREQ = (int)(atof(argv[num+1])*1000);			num += 2;			continue;		}#if 0   // Do not use it.		// -mono		// -stereo		// -8bit		// -16bit		// -bswap		// -bswap-  (not bitswap)		// -tos       (snd file for TonwsOS)		// -tos-      (not snd file for TonwsOS		if(strcasecmp("-mono",argv[num])==0){			gogo_opts.optMONO_PCM = 1;			num += 1;			continue;		}		if(strcasecmp("-stereo",argv[num])==0){			gogo_opts.optMONO_PCM = 0;			num += 1;			continue;		}		if(strcasecmp("-8bit",argv[num])==0){			gogo_opts.opt8BIT_PCM = 1;			num += 1;			continue;		}		if(strcasecmp("-16bit",argv[num])==0){			gogo_opts.opt8BIT_PCM = 0;			num += 1;			continue;		}		if(strcasecmp("-bswap",argv[num])==0){			gogo_opts.optBYTE_SWAP = 1;			num += 1;			continue;		}		if(strcasecmp("-bswap-",argv[num])==0){			gogo_opts.optBYTE_SWAP = 0;			num += 1;			continue;		}		if(strcasecmp("-ts",argv[num])==0){			gogo_opts.optTOWNS_SND = 1;			num += 1;			continue;		}		if(strcasecmp("-ts-",argv[num])==0){			gogo_opts.optTOWNS_SND = 1;			num += 1;			continue;		}		// -s freq  :  input PCM freqency(kHz)		if(strcasecmp("-s",argv[num])==0){			if(num+1>=argc) break;			gogo_opts.optINPFREQ = (int)(atof(argv[num+1])*1000);			num += 2;			continue;		}		//  -offset byte   :  jump byte bytes from head.		if(strcasecmp("-offset",argv[num])==0){			if(num+1>=argc) break;			gogo_opts.optSTARTOFFSET = atol(argv[num+1]);			num += 2;			continue;		}#endif		// -th threshold mspower		if(strcasecmp("-th",argv[num])==0){			if(num+2>=argc) break;			gogo_opts.optMSTHRESHOLD_threshold = atoi(argv[num+1]);			gogo_opts.optMSTHRESHOLD_mspower = atoi(argv[num+2]);

⌨️ 快捷键说明

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