亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mp3play.c

?? mp3解碼源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
			"errno=%d\n", mps->dec_frequency, errno);		exit(1);	}	/* Check if data stream is stereo, otherwise must play mono. */	stereo = (mps->channels == 1) ? 0 : playstereo;	if (ioctl(fd, SNDCTL_DSP_STEREO, &stereo) < 0) {		fprintf(stderr, "ERROR: Unable to set stereo to %d, "			"errno=%d\n", stereo, errno);		exit(1);	}#if __BYTE_ORDER == __LITTLE_ENDIAN	bits = (playbits == 16) ? AFMT_S16_LE : AFMT_U8;#elif __BYTE_ORDER == __BIG_ENDIAN	bits = (playbits == 16) ? AFMT_S16_BE : AFMT_U8;#else#error "I don't know what endian your machine is??"#endif	if (ioctl(fd, SNDCTL_DSP_SAMPLESIZE, &bits) < 0) {		fprintf(stderr, "ERROR: Unable to set sample size to "			"%d, errno=%d\n", bits, errno);		exit(1);	}}/****************************************************************************//* *	Generate a tone instead of PCM output. This is purely for *	testing purposes. */int writetone(int fd, INT16 *pcm[2], int count){	static int	ramp = 0;	unsigned char	*pbufbp;	unsigned short	*pbufwp;	int		i;	if (count <= 0)		return(count);	if (stereo) {		if (bits == 8) {			/* 8bit stereo */			pbufbp = (unsigned char *) rawbuf;			for (i = 0; (i < count); i++) {				*pbufbp++ = ramp;				*pbufbp++ = ramp;				ramp = (ramp + 0x80) & 0x7ff;			}			i = count * 2 * sizeof(unsigned char);		} else {			/* 16bit stereo */			pbufwp = (unsigned short *) rawbuf;			for (i = 0; (i < count); i++) {				*pbufwp++ = ramp;				*pbufwp++ = ramp;				ramp = (ramp + 0x80) & 0x7ff;			}			i = count * 2 * sizeof(unsigned short);		}	} else {		if (bits == 8) {			/* 8bit mono */			pbufbp = (unsigned char *) rawbuf;			for (i = 0; (i < count); i++) {				*pbufbp++ = ramp;				ramp = (ramp + 0x80) & 0x7ff;			}			i = count * sizeof(unsigned char);		} else {			/* 16bit mono */			pbufwp = (unsigned short *) rawbuf;			for (i = 0; (i < count); i++) {				*pbufwp++ = ramp;				ramp = (ramp + 0x80) & 0x7ff;			}			i = count * sizeof(unsigned short);		}	}	write(fd, rawbuf, i);	return(i);}/****************************************************************************//* *	Write out the PCM data to the file descriptor, translating to *	the specified data format. */int writepcm(int fd, INT16 *pcm[2], int count){	unsigned short	*pcm0, *pcm1;	unsigned char	*pbufbp;	unsigned short	*pbufwp;	char		*buf;	int		i;	if (count <= 0)		return(count);	if (testtone)		return(writetone(fd, pcm, count));	buf = rawbuf;	if (stereo) {		if (bits == 8) {			/* 8bit stereo */			pcm0 = pcm[0];			pcm1 = pcm[1];			pbufbp = (unsigned char *) buf;			for (i = 0; (i < count); i++) {				*pbufbp++ = (*pcm0++ ^ 0x8000) >> 8;				*pbufbp++ = (*pcm1++ ^ 0x8000) >> 8;			}			i = count * 2 * sizeof(unsigned char);		} else {			/* 16bit stereo */			pcm0 = pcm[0];			pcm1 = pcm[1];			pbufwp = (unsigned short *) buf;			for (i = 0; (i < count); i++) {				*pbufwp++ = *pcm0++;				*pbufwp++ = *pcm1++;			}			i = count * 2 * sizeof(unsigned short);		}	} else {		if (bits == 8) {			/* 8bit mono */			pcm0 = pcm[0];			pbufbp = (unsigned char *) buf;			for (i = 0; (i < count); i++)				*pbufbp++ = (*pcm0++ ^ 0x8000) >> 8;			i = count * sizeof(unsigned char);		} else {			/* 16bit mono, no translation required! */			i = count * sizeof(unsigned short);			buf = (char *) pcm[0];		}	}	if (prebufnow) {		memcpy(&prebuffer[prebufcnt], buf, i);		prebufcnt += i;		if (prebufcnt > prebufnow) {			write(fd, &prebuffer[0], prebufcnt);			prebufnow = prebufcnt = 0;		}	} else {		write(fd, buf, i);	}	return(i);}/****************************************************************************//* *	Flush out any remaining buffered PCM data. This is really to allow *	for prebuffing of files smaller than the prebuffer. */void flushpcm(int fd){	if (prebufnow) {		write(fd, &prebuffer[0], prebufcnt);		prebufnow = prebufcnt = 0;	}}/****************************************************************************/void usage(int rc){	printf("usage: mp3play [-hmvqz8RPTZ] [-g <quality>] [-s <time>] "		"[-d <device>] [-w <filename>] [-B <prebuf>] "		"[-l <line> [-t]] mp3-files...\n\n"		"\t\t-h            this help\n"		"\t\t-v            verbose stdout output\n"		"\t\t-q            quiet (don't print title)\n"		"\t\t-m            mix both channels (mono)\n"		"\t\t-8            play 8 bit samples\n"		"\t\t-R            repeat tracks forever\n"		"\t\t-z            shuffle tracks\n"		"\t\t-Z            psuedo-random tracks (implicit -R)\n"		"\t\t-P            print time to decode/play\n"		"\t\t-T            do decode, but output test tone\n"		"\t\t-g <quality>  decode quality (0,1,2)\n"		"\t\t-s <time>     sleep between playing tracks\n"		"\t\t-d <device>   audio device for playback\n"		"\t\t-w <filename> write output to file\n"		"\t\t-l <line>     display title on LCD line (0,1,2) (0 = no title)\n"		"\t\t-t <line>     display time on LCD line (1,2)\n"		"\t\t-B <prebuf>   size of pre-buffer\n");	exit(rc);}/****************************************************************************/int main(int argc, char *argv[]){	unsigned long	us;	INT16		*pcm[MPEGDEC_MAX_CHANNELS];	int		pcmcount, rawcount;	int		c, i, j, dspfd, dsphw, slptime;	int		playbits, playstereo, repeat, printtime; 	int		argnr, startargnr, rand, shuffle;	char		*device, *argvtmp;	time_t		sttime;	verbose = 0;	quiet = 0;	playstereo = 1;	playbits = 16;	quality = 2;	shuffle = 0;	rand = 0;	repeat = 0;	printtime = 0;	slptime = 0;	prebuflimit = 64000;	device = "/dev/dsp";	dsphw = 1;	while ((c = getopt(argc, argv, "?hmvqzt:8RZPTg:s:d:w:l:B:")) >= 0) {		switch (c) {		case 'v':			verbose++;			break;		case 'q':			verbose = 0;			quiet++;			break;		case 'm':			playstereo = 0;			break;		case '8':			playbits = 8;			break;		case 'R':			repeat++;			break;		case 'z':			shuffle++;			break;		case 'Z':			rand++;			repeat++;			break;		case 'P':			printtime++;			break;		case 'T':			testtone++;			break;		case 'g':			quality = atoi(optarg);			if ((quality < 0) || (quality > 2)) {				fprintf(stderr, "ERROR: valid quality 0, 1 "					"and 2\n");				exit(1);			}			break;		case 's':			slptime = atoi(optarg);			break;		case 'd':			device = optarg;			break;		case 'w':			device = optarg;			dsphw = 0;			break;		case 'l':			lcd_line = atoi(optarg);			break;		case 't':			lcd_time = atoi(optarg);			break;		case 'B':			prebuflimit = atoi(optarg);			if ((prebuflimit < 0) || (prebuflimit > (1*1024*1024))){				fprintf(stderr, "ERROR: valid pre-buffer range "					"0 to 1000000 bytes\n");				exit(1);			}			break;		case 'h':		case '?':			usage(0);			break;		}	}	argnr = optind;	if (argnr >= argc)		usage(1);	startargnr = argnr;	mp3_buffer = (INT8 *) malloc(MP3_BUF_SIZE);	if (!mp3_buffer) {		fprintf(stderr, "ERROR: Can't allocate MPEG buffer\n");		exit(0);	}	for (i = 0; (i < MPEGDEC_MAX_CHANNELS); i++) {		pcm[i] = malloc(MPEGDEC_PCM_SIZE * sizeof(INT16));		if (!pcm[i]) {			fprintf(stderr, "ERROR: Can't allocate PCM buffers\n");			exit(1);		}	}	if ((rawbuf = malloc(MPEGDEC_PCM_SIZE * sizeof(short) * 2)) == NULL) {		fprintf(stderr, "ERROR: Can't allocate raw buffers\n");		exit(1);	}	if (prebuflimit) {		prebufsize = prebuflimit + (MPEGDEC_PCM_SIZE*sizeof(short)*2);		if ((prebuffer = malloc(prebufsize)) == NULL) {			fprintf(stderr, "ERROR: Can't allocate pre-buffer\n");			exit(1);		}	}	/* Make ourselves the top priority process! */	setpriority(PRIO_PROCESS, 0, -20);	srandom(time(NULL));	/* Open the audio playback device */	if ((dspfd = open(device, (O_WRONLY | O_CREAT | O_TRUNC), 0660)) < 0) {		fprintf(stderr, "ERROR: Can't open output device '%s', "			"errno=%d\n", device, errno);		exit(0);	}	/* Open LCD device if we are going to use it */	if ((lcd_line > 0) || (lcd_time > 0)) {		lcdfd = open("/dev/lcdtxt", O_WRONLY);		if (lcdfd < 0) {			lcd_time = 0;			lcd_line = 0;		}	}nextall:	/* Shuffle tracks if slected */	if (shuffle) {		for (c = 0; (c < 10000); c++) {			i = (((unsigned int) random()) % (argc - startargnr)) +				startargnr;			j = (((unsigned int) random()) % (argc - startargnr)) +				startargnr;			argvtmp = argv[i];			argv[i] = argv[j];			argv[j] = argvtmp;		}	}nextfile:	if (rand) {		argnr = (((unsigned int) random()) % (argc - startargnr)) +			startargnr;	}	mpa_ctrl = mpa_defctrl;	mpa_ctrl.bs_access = &bs_access;	if (playstereo == 0)		mpa_ctrl.layer_3.force_mono = 1;	mpa_ctrl.layer_3.mono.quality = quality;	mpa_ctrl.layer_3.stereo.quality = quality;	mp3_buffer_offset = 0;	mp3_buffer_next_block = 0;	mp3_filename = argv[argnr];	/* Open file or stream to mp3 data */	if (strncmp(mp3_filename, "http://", 7) == 0) {		mp3_stream_size = 0; /*HACK*/		mp3_fd = openhttp(mp3_filename);	} else {		mp3_stream_size = getstreamsize();		mp3_fd = open(mp3_filename, O_RDONLY);	}	if (mp3_fd < 0) {		fprintf(stderr, "ERROR: Unable to open '%s', errno=%d\n",			mp3_filename, errno);		http_streaming = 0;		goto badfile;	}	getmp3taginfo();	/* Get first part of the stream into a ram buffer */	getnextbuffer();mp3_restream:	mps = MPEGDEC_open(mp3_filename, &mpa_ctrl);	if (!mps) {		fprintf(stderr, "ERROR: Unable to open MP3 Audio "			"stream '%s'\n", mp3_filename);		http_streaming = 0;		goto badfile;	}#ifdef CONFIG_KEY	if ((i = getdriverkey(&key, sizeof(key))) > 0)		MPEGDEC_setkey(mps, &key, i);#endif	printmp3info();	if (dsphw)		setdsp(dspfd, playstereo, playbits);	if (lcd_line)		lcdtitle();	gettimeofday(&tvstart, NULL);	sttime = time(NULL);	/* Restart pre-buffering for next track */	prebufnow = prebuflimit;	prebufcnt = 0;	/* We are all set, decode the file and play it */	while ((pcmcount = MPEGDEC_decode_frame(mps, pcm)) >= 0) {		writepcm(dspfd, pcm, pcmcount);		if (gotsigusr1) {			gotsigusr1 = 0;			if (lcd_line)				lcdtitle();		}		if (lcd_time)			lcdtime(sttime);	}	/* Flush out any remaining buffer PCM data */	flushpcm(dspfd); 	gettimeofday(&tvend, NULL);	if (printtime) {		us = ((tvend.tv_sec - tvstart.tv_sec) * 1000000) +		    (tvend.tv_usec - tvstart.tv_usec);		printf("Total time = %d.%06d seconds\n",			(us / 1000000), (us % 1000000));	}badfile:	if (slptime)		sleep(slptime);	close(mp3_fd);	MPEGDEC_close(mps);	mps = NULL;	if (++argnr < argc)		goto nextfile;	if (repeat) {		argnr = startargnr;		goto nextall;	}	close(dspfd);	if (lcdfd >= 0)		close(lcdfd);	exit(0);}/****************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩av在线发布| 91在线精品一区二区三区| 国产白丝精品91爽爽久久| 91在线云播放| www精品美女久久久tv| 亚洲高清免费观看| 成人免费毛片嘿嘿连载视频| 日韩欧美卡一卡二| 亚洲国产乱码最新视频| 波多野结衣亚洲| 精品福利一二区| 蜜芽一区二区三区| 欧美精品丝袜中出| 一区二区三区高清| 99精品偷自拍| 亚洲欧洲日韩av| 国产经典欧美精品| 一区二区三区在线视频观看| 欧美视频精品在线| 亚洲卡通欧美制服中文| 99久久精品国产网站| 久久久久国色av免费看影院| 久久精品av麻豆的观看方式| 91精品国产乱| 日本中文在线一区| 欧美一级高清大全免费观看| 日本v片在线高清不卡在线观看| 欧美午夜在线一二页| 亚洲综合色婷婷| 欧美在线制服丝袜| 五月婷婷久久丁香| 欧美精品高清视频| 麻豆91精品91久久久的内涵| 日韩欧美中文字幕制服| 蜜桃传媒麻豆第一区在线观看| 欧美精品18+| 久久狠狠亚洲综合| 精品国产一区二区三区忘忧草| 久久99九九99精品| 久久色在线视频| 国产成人免费在线| 亚洲欧洲国产日本综合| 色激情天天射综合网| 亚洲精品乱码久久久久久| 精品1区2区3区| 日本aⅴ亚洲精品中文乱码| 精品久久久影院| 成人动漫一区二区| 亚洲一区在线观看免费观看电影高清 | 99国产精品久久| 亚洲黄色小说网站| 91福利在线播放| 免费一级片91| 国产精品福利一区二区| 欧美特级限制片免费在线观看| 人妖欧美一区二区| 国产无人区一区二区三区| 一本色道久久加勒比精品| 日韩av一级电影| 国产午夜亚洲精品不卡| 在线这里只有精品| 久久精品99国产精品日本| 中文在线资源观看网站视频免费不卡 | 成人丝袜视频网| 五月激情六月综合| 国产色婷婷亚洲99精品小说| 在线免费亚洲电影| 国产精品亚洲一区二区三区妖精| 亚洲人成亚洲人成在线观看图片| 欧美二区三区的天堂| 成人精品免费看| 日日夜夜一区二区| 亚洲欧美aⅴ...| 久久久久九九视频| 欧美男女性生活在线直播观看| 激情欧美日韩一区二区| 欧美成va人片在线观看| 91福利精品第一导航| 日韩国产一二三区| 自拍偷拍亚洲激情| 国产精品国产三级国产普通话99 | 欧美一区二区在线免费播放| 高清国产一区二区三区| 天堂成人国产精品一区| 亚洲人亚洲人成电影网站色| 精品国产乱码久久久久久影片| 色综合久久中文综合久久牛| 国产麻豆一精品一av一免费 | 欧美96一区二区免费视频| 亚洲丝袜精品丝袜在线| 亚洲国产高清不卡| 精品少妇一区二区三区视频免付费| 91久久精品网| 成人黄色免费短视频| 国产伦精品一区二区三区免费迷 | 日韩中文字幕亚洲一区二区va在线 | 久久这里只有精品视频网| 欧美日韩视频专区在线播放| 99久久精品国产毛片| 成人一区在线观看| 国产成人免费视| 国产精品综合视频| 国产一区二区三区| 国产一区二区三区四区在线观看| 奇米影视一区二区三区| 天天免费综合色| 亚洲第一成年网| 午夜免费久久看| 午夜久久久影院| 日韩一区欧美二区| 日本最新不卡在线| 蜜桃精品在线观看| 久久99深爱久久99精品| 国产一区二区三区国产| 国产成人综合精品三级| 国产成人精品在线看| 岛国精品在线播放| 成人av影视在线观看| www.视频一区| 91成人国产精品| 欧美美女一区二区| 日韩美女视频一区二区在线观看| 欧美一区二区三区免费观看视频| 欧美高清dvd| 精品国产91亚洲一区二区三区婷婷 | 国产乱子轮精品视频| 懂色av一区二区三区蜜臀| 成人午夜av在线| 色综合色狠狠天天综合色| 91福利精品第一导航| 欧美一区二区三区在线| 久久综合狠狠综合久久综合88| 国产清纯在线一区二区www| 亚洲欧洲性图库| 日韩国产高清影视| 国产伦精品一区二区三区在线观看| 成a人片亚洲日本久久| 欧美偷拍一区二区| 欧美电影免费观看高清完整版在| 国产视频不卡一区| 亚洲国产精品久久人人爱蜜臀 | 精品剧情v国产在线观看在线| 国产欧美一区二区精品性色超碰| 亚洲人午夜精品天堂一二香蕉| 香蕉久久夜色精品国产使用方法| 久久福利资源站| 99精品久久99久久久久| 7777精品伊人久久久大香线蕉| 久久香蕉国产线看观看99| 亚洲欧美成人一区二区三区| 美女精品自拍一二三四| 99精品欧美一区| 欧美xxxx在线观看| 一个色妞综合视频在线观看| 麻豆国产欧美一区二区三区| 99麻豆久久久国产精品免费| 欧美精品亚洲二区| 亚洲欧洲日产国码二区| 久久疯狂做爰流白浆xx| 欧美性高清videossexo| 久久精品人人爽人人爽| 琪琪一区二区三区| 日本久久一区二区| 欧美激情一区二区三区在线| 日韩影视精彩在线| 色老汉一区二区三区| 国产情人综合久久777777| 免费成人性网站| 欧美写真视频网站| 中文字幕一区不卡| 紧缚捆绑精品一区二区| 91麻豆精品国产91久久久资源速度| 中文字幕欧美日本乱码一线二线| 日韩成人午夜电影| 欧美日韩亚洲丝袜制服| 国产精品久久久久天堂| 国内精品伊人久久久久av影院| 欧洲亚洲精品在线| 亚洲女人小视频在线观看| 成人免费毛片a| 久久久久九九视频| 国产一区二区免费看| 精品国产电影一区二区| 蜜臀av一区二区在线免费观看| 欧美日韩卡一卡二| 亚洲自拍偷拍图区| 欧美视频一区二区三区在线观看| 国产女同性恋一区二区| 麻豆国产精品777777在线| 欧美日本免费一区二区三区| 有码一区二区三区| 日本国产一区二区| 亚洲色大成网站www久久九九| 成人激情视频网站| 国产日韩欧美一区二区三区综合| 国产精品资源网| 国产亚洲成aⅴ人片在线观看| 国产**成人网毛片九色 | 欧美成人精精品一区二区频| 日本视频中文字幕一区二区三区|