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

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

?? main.c

?? butterfly MP3源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
**	Resets the decoder and prepares it for a new stream of *	audio data. all setup params must be resent.**/void 	flush_decoder(char reset_type){	uint16 buf[2];		// reset VS1001 and set clock doubler	vs1001_reset(reset_type);	// send VS1001 settings	vs_1001_setvolume(pgm_read_byte(volume_val+gmusic_vol), pgm_read_byte(volume_val+gmusic_vol));	if (gbass_boost){		vs1001_read(0, 1, buf);		buf[1] |= SM_BASS;		buf[1] &= ~SM_MP12;		vs1001_write(0,1,buf);	}else{		vs1001_read(0, 1, buf);		buf[1] &= ~SM_BASS;		buf[1] &= ~SM_MP12;		vs1001_write(0,1,buf);	}}    /***	cue_file			*	@return		none	**	Gets file info for file pointed to by gFAT_entry*	and inits MP3 chip. Checks for MMC card as well.*  Reads ID3v2 tag for title and artist*	If successful then gFile_good is set**/void 	cue_file(void){	uint8 check;//	uint8 temp;   uint32 ID3index;	uint8 i;	uint16 j;	uint32 offset;	uint16 ID3_Bytes;	uint32 ID3_clusters;	uint16 ID3_sectors;	uint32 nextCluster=0;			// read file data and check gFAT_entry is aValid file entry.	check = FAT_readFile(gFAT_entry,FAT16_dir_first_cluster);	if (check) return;		if (FAT16_filetype == FILE_TYPE_DIR) return;/*	//skip or recurse Directories	if (FAT16_filetype == FILE_TYPE_DIR){		if (RECURSE_DIRECTORIES){			// scan a new directory....			// get lba from fat entry			gSector = FAT_scratch[13];			gSector <<= 8;			gSector += FAT_scratch[14];			gSector <<= 8;			gSector += FAT_scratch[15];			gSector <<= 8;			gSector += FAT_scratch[16];						// check for files and exit on no files(always 2 entries . and ..)			//if (open_Dir(gSector)<3) {			//	return;			//}						nextCluster = FAT_readFile(FAT16_entryMIN,FAT16_dir_first_cluster);					}else{			if (PLAY_NEXT_SONG){ // cue up next song and play it.				nextCluster = FAT_getNextSong(gFAT_entry,FAT16_dir_first_cluster);				if(nextCluster){// play next song					gFAT_entry = nextCluster;					gLCD_Refresh=TRUE;					gMode = MODE_PLAY;				}else if(PLAY_REPEAT_ALL){					gFAT_entry = FAT16_entryMIN;					gLCD_Refresh=TRUE;					gMode = MODE_PLAY;				}			}		}	}	*/	nextCluster=0;		// get first Cluster 	gSector = FAT_scratch[13];	gSector <<= 8;	gSector += FAT_scratch[14];	gSector <<= 8;	gSector += FAT_scratch[15];	gSector <<= 8;	gSector += FAT_scratch[16];	//get fileSize in whole sectors	gFileSectorSize = FAT_scratch[17];	gFileSectorSize <<= 8;	gFileSectorSize += FAT_scratch[18];	gFileSectorSize <<= 8;	gFileSectorSize += FAT_scratch[19];	cluster_pos = 0;	buff_pos = 0;	FAT_readCluster(gSector,0);		gFile_good = TRUE;	gFileSectorsPlayed = 0;		// Detect and Skip ID3 Info at start of file	// (we ignore tags at end of file)		// Version 1.x 	if (FAT_buffer[0] == 'T' && FAT_buffer[1] == 'A' && FAT_buffer[2]=='G') {		//PRINT("ID3 v1 TAG");EOL();		// jump to byte 128		buff_pos = 4; 	}else			// Version 2.x - now with very basic interpretation!	if (FAT_buffer[0] == 'I' && FAT_buffer[1] == 'D' 			  && FAT_buffer[2]=='3'){ 		//PRINT("ID3 v2.");		//UART_Printfu08(FAT_buffer[5]);		//UART_Printfu08(FAT_buffer[4]);		//PRINT(" TAG");      		/*		An ID3v2 tag can be detected with the following pattern:		$49 44 33 yy yy xx zz zz zz zz		Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80.		z = ID3 tag length.		 */				offset = 0;		for(i=6;i<10;i++){			offset <<= 7; // only shift by 7 as MSB is unused.			offset += FAT_buffer[i];		}      		offset += 10; //include length of header		//UART_Printfu32(offset);PRINT("B");EOL();      // offset is now equal to the the length of the TAG      ID3index = 10; // skip header      switch (FAT_buffer[3])      {         case 2:            // TODO: Skip extended header            // Search for song / artist frame and replace long filename with them            while ((ID3index < offset) && (ID3index < 512))            {               if (FAT_buffer[ID3index] == 'T' &&                   FAT_buffer[ID3index+1] == 'T' &&                   FAT_buffer[ID3index+2] == '2')               {                  //PRINT(" SONG");                            // For some reason, all strings have a Null at the front of the                   // name - I think this indicates the encoding type - we'll assume                  // its always 00, string! (this is what the -1 is for)                  // other -1 is for the null on the end of the string                  for (i=0; (i<FAT_buffer[ID3index+5]-1) && (i<LFN_TITLE_LENGTH-1); i++)                  {                     FAT16_longfilename[LFN_TITLE_INDEX+i] = FAT_buffer[ID3index+7+i];                   }                  FAT16_longfilename[LFN_TITLE_INDEX+i] = '\0';                  // Recalculate string length / add a blank                  FAT16_LFNTitleLen = strLen(FAT16_longfilename+LFN_TITLE_INDEX);                  // Indicate TITLE found                  FAT16_longfilename[LFN_TYPE_INDEX] |= LFN_TYPE_ID3_TITLE;               }               else if (FAT_buffer[ID3index] == 'T' &&                        FAT_buffer[ID3index+1] == 'P' &&                        FAT_buffer[ID3index+2] == '1')               {                  //PRINT(" ARTIST");                  for (i=0; (i<FAT_buffer[ID3index+5]-1) && (i<LFN_ARTIST_LENGTH-1); i++)                  {                     FAT16_longfilename[LFN_ARTIST_INDEX+i] = FAT_buffer[ID3index+7+i];                   }                  FAT16_longfilename[LFN_ARTIST_INDEX+i] = '\0';                  // Recalculate string length / add a blank                  FAT16_LFNArtistLen = strLen(FAT16_longfilename+LFN_ARTIST_INDEX);                  // Indicate ARTIST found                  FAT16_longfilename[LFN_TYPE_INDEX] |= LFN_TYPE_ID3_ARTIST;               }                              // Skip to next ID3 'frame'               ID3index += FAT_buffer[ID3index+5] + 6;               //PRINT(" I:");               //UART_Printfu08(ID3index);            }            break;                     case 3:         case 4:            // TODO: Skip extended header            // Search for song / artist frame and replace long filename with them            while ((ID3index < offset) && (ID3index < 512))            {               if (FAT_buffer[ID3index] == 'T' &&                   FAT_buffer[ID3index+1] == 'I' &&                   FAT_buffer[ID3index+2] == 'T' &&                   FAT_buffer[ID3index+3] == '2')               {                  //PRINT(" SONG");                            // For some reason, all strings have a Null at the front of the                   // name - I think this indicates the encoding type - we'll assume                  // its always 00, string! (this is what the -1 is for)                  // other -1 is for the null on the end of the string                  for (i=0; (i<FAT_buffer[ID3index+7]-1) && (i<LFN_TITLE_LENGTH-1); i++)                  {                     FAT16_longfilename[LFN_TITLE_INDEX+i] = FAT_buffer[ID3index+11+i];                   }                  FAT16_longfilename[LFN_TITLE_INDEX+i] = '\0';                  // Recalculate string length / add a blank                  FAT16_LFNTitleLen = strLen(FAT16_longfilename+LFN_TITLE_INDEX);                  // Indicate TITLE found                  FAT16_longfilename[LFN_TYPE_INDEX] |= LFN_TYPE_ID3_TITLE;               }               else if (FAT_buffer[ID3index] == 'T' &&                        FAT_buffer[ID3index+1] == 'P' &&                        FAT_buffer[ID3index+2] == 'E' &&                        FAT_buffer[ID3index+3] == '1')               {                  //PRINT(" ARTIST");                  for (i=0; (i<FAT_buffer[ID3index+7]-1) && (i<LFN_ARTIST_LENGTH-1); i++)                  {                     FAT16_longfilename[LFN_ARTIST_INDEX+i] = FAT_buffer[ID3index+11+i];                   }                  FAT16_longfilename[LFN_ARTIST_INDEX+i] = '\0';                  // Recalculate string length / add a blank                  FAT16_LFNArtistLen = strLen(FAT16_longfilename+LFN_ARTIST_INDEX);                  // Indicate ARTIST found                  FAT16_longfilename[LFN_TYPE_INDEX] |= LFN_TYPE_ID3_ARTIST;               }                              // Skip to next ID3 'frame'               ID3index += FAT_buffer[ID3index+7] + 10;               //PRINT(" I:");               //UART_Printfu08(ID3index);            }            break;         default:            ; // Unknown version, do nothing      }         		// skip through to end of ID3 		ID3_clusters = (offset/512) / FAT16_sectors_per_cluster;		ID3_sectors = (offset/512) % FAT16_sectors_per_cluster;		ID3_Bytes = offset % 512;				//UART_Printfu32(ID3_clusters);EOL();		//UART_Printfu16(ID3_sectors);EOL();		//UART_Printfu16(ID3_Bytes);EOL();				// find first cluster of actual song		for (j=0;j<ID3_clusters;j++){						nextCluster = FAT_NextCluster(gSector);		//	UART_Printfu16(j);UART_SendByte(0x09);		//	UART_Printfu32(nextCluster);EOL();			if (nextCluster == 0xffffffff){				gFile_good = FALSE;				PRINT("EOF: ID3 Tag @ Clstr ");				UART_Printfu32(gSector);				EOL();				return;			}			gSector = nextCluster;		}				// Adjust variables for new position.		gFileSectorsPlayed = (offset / 512);		buff_pos = (ID3_Bytes/32);		cluster_pos = ID3_sectors;		/*		while(FAT_readCluster(gSector,cluster_pos)){			MMC_Reset();			}		*/					/*PRINT("ID3 Tag skipped. First ten bytes of MP3 stream are ... ");		for (i=0;i<10;i++){			UART_Printfu08(FAT_buffer[i+ID3_Bytes]);		}		EOL();		*/		j=ID3_Bytes % 32;				//UART_Printfu08(j); PRINT(" bytes offset");EOL();				if (j){//we need to play(skip;) some bytes			buff_pos++;		}	}else{ //dump  first 10 bytes of file		/*		for (i=0;i<10;i++){			UART_Printfu08(FAT_buffer[i]);		}		EOL();		 */	}		// send params to vs1001k	flush_decoder(SOFT_RESET); 			//PRINT("Fle Q'd");EOL();		//reset play timer...	gPlayTimeSeconds = 0;	return;}/***	Data Streaming*	@return none**	Take care of feeding data to mp3 chip and reading *	mmc in free time. AKA playing.**/   void 	streaming (void){//	uint16 c;	uint8	abort=0;//	uint16 tmp=0;//	uint16 state[2];	uint32 nextfile;		if (!gFile_good) return; // only run if we have a valid file.		if (buff_pos>15) { // we need to get a new sector		gFileSectorsPlayed++;		if (cluster_pos>FAT16_sectors_per_cluster-1){ // need new cluster			cluster_pos=0;			gSector = FAT_NextCluster(gSector);		}				if (gSector == 0xffffffff) { // finished song. on to next ?						// Stop all playing and reset everything			gFile_good = FALSE;			gMode = MODE_STOP;			MMC_Reset();			flush_decoder(SOFT_RESET);						if (PLAY_NEXT_SONG){ // cue up next song and play it.				nextfile = FAT_getNextSong(gFAT_entry,FAT16_dir_first_cluster);				if(nextfile){// play next song					gFAT_entry = nextfile;					gLCD_Refresh=TRUE;					cue_file();					gMode = MODE_PLAY;				}else if(PLAY_REPEAT_ALL){					gFAT_entry = FAT16_entryMIN;					gLCD_Refresh=TRUE;					cue_file();					gMode = MODE_PLAY;				}			}			return;		}				// read sector from MMC up to 255 times		while (FAT_readCluster(gSector,cluster_pos)&& (--abort)){			MMC_Reset(); // reset if read failed.		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩视频在线一区二区| 国产成人精品三级麻豆| 欧美tickling挠脚心丨vk| 国产一区二区三区四区五区入口 | 国产高清精品久久久久| 久久精品亚洲一区二区三区浴池| 国产成人自拍网| 亚洲精品视频在线| 日韩亚洲欧美在线| 波多野结衣视频一区| 日韩精品一级中文字幕精品视频免费观看 | 夜夜精品浪潮av一区二区三区| 欧美一级一级性生活免费录像| 成人自拍视频在线| 亚洲欧洲精品天堂一级| 制服丝袜中文字幕亚洲| 国产自产视频一区二区三区| 中文字幕制服丝袜一区二区三区| 欧美精品久久久久久久多人混战| 懂色av一区二区三区免费看| 日本免费新一区视频| 亚洲女子a中天字幕| 欧美刺激午夜性久久久久久久 | 日产欧产美韩系列久久99| 国产精品理伦片| 欧美不卡一二三| 欧美最新大片在线看 | 精品国免费一区二区三区| 色av成人天堂桃色av| 国产一区二区伦理| 日韩高清不卡一区| 亚洲免费色视频| 国产亚洲福利社区一区| 91精品国产综合久久福利软件 | 美国精品在线观看| 亚洲大片精品永久免费| 亚洲免费观看高清完整版在线观看 | 亚洲尤物在线视频观看| 国产欧美精品一区二区三区四区| 欧美一区二区三区色| 在线观看日产精品| 99久久精品国产观看| 国产伦精品一区二区三区视频青涩 | 久久色.com| 欧美成人三级在线| 久久亚洲综合av| 在线播放91灌醉迷j高跟美女| 色综合 综合色| 成人精品电影在线观看| 国产乱码精品一区二区三区av | 床上的激情91.| 日韩精品1区2区3区| 亚洲综合一区二区三区| 国产人成亚洲第一网站在线播放| 精品欧美一区二区久久| 宅男噜噜噜66一区二区66| 日本道精品一区二区三区| 99久久伊人久久99| 成人av资源下载| 99re视频这里只有精品| 99久久夜色精品国产网站| 成人av动漫网站| www.亚洲激情.com| 色综合久久六月婷婷中文字幕| 北条麻妃国产九九精品视频| 成人avav影音| www.欧美色图| 国产成人av福利| 国产乱子伦视频一区二区三区| 国产精品资源在线| 国产1区2区3区精品美女| 国产成人99久久亚洲综合精品| 国产精品夜夜爽| 粉嫩一区二区三区性色av| jizz一区二区| 色94色欧美sute亚洲13| 欧美系列亚洲系列| 3d动漫精品啪啪| 精品国产污污免费网站入口| 精品免费视频一区二区| 久久毛片高清国产| 国产日韩视频一区二区三区| 亚洲人精品一区| 首页国产欧美日韩丝袜| 国产精品91一区二区| 色哟哟在线观看一区二区三区| 欧美久久久久免费| 26uuu久久综合| 亚洲精品视频在线观看网站| 免费人成精品欧美精品| 粉嫩av一区二区三区粉嫩| 欧美视频在线一区二区三区 | 日韩电影在线观看网站| 麻豆精品视频在线观看视频| 成人网在线播放| 欧美在线观看视频一区二区| 欧美一区二区三区视频在线| 中文字幕av一区二区三区| 一区二区高清在线| 国产一区二区精品久久| 色天使色偷偷av一区二区| 欧美一卡二卡三卡| 欧美激情一区二区三区蜜桃视频 | 精品国产1区二区| 国产精品久久久久桃色tv| 亚洲啪啪综合av一区二区三区| 日韩av午夜在线观看| 成人午夜精品在线| 欧美无砖专区一中文字| 26uuu亚洲婷婷狠狠天堂| 一区二区三区四区视频精品免费| 美腿丝袜亚洲三区| 色婷婷综合中文久久一本| 日韩精品专区在线影院重磅| √…a在线天堂一区| 久久精品国产77777蜜臀| av在线不卡电影| 精品久久久久久无| 日韩和欧美一区二区三区| 成人午夜免费av| 日韩女优av电影在线观看| 亚洲精品中文在线影院| 国产成人精品免费| 欧美一级视频精品观看| 亚洲精品日韩综合观看成人91| 狠狠色丁香婷综合久久| 91久久奴性调教| 中文字幕高清不卡| 精品夜夜嗨av一区二区三区| 91精品婷婷国产综合久久性色 | 国产精品高清亚洲| 九色综合狠狠综合久久| 91国偷自产一区二区使用方法| 国产校园另类小说区| 午夜精品久久久久久久蜜桃app| 92精品国产成人观看免费| 久久久久久久久久久久久久久99| 丝袜国产日韩另类美女| 欧美少妇性性性| 一级做a爱片久久| 99久久精品国产网站| 国产精品伦一区二区三级视频| 精品一区二区三区香蕉蜜桃| 7777精品伊人久久久大香线蕉 | 欧美浪妇xxxx高跟鞋交| 亚洲精品欧美综合四区| 91丨porny丨国产| 国产精品每日更新| 国产91高潮流白浆在线麻豆| 久久蜜桃av一区精品变态类天堂 | 美腿丝袜在线亚洲一区| 91精品国产综合久久久久| 亚洲成人av在线电影| 欧美三级一区二区| 一区二区三区不卡视频| 色综合久久久久综合体| 亚洲精品一二三四区| 欧美日韩在线亚洲一区蜜芽| 免费的成人av| 91精品国产91久久久久久一区二区 | 欧美日韩成人在线| 午夜精品久久久久久久久久久 | 精品国产伦一区二区三区观看体验 | 91麻豆精品国产91久久久久久| 丝袜美腿高跟呻吟高潮一区| 欧美一区二区三区四区高清| 美国欧美日韩国产在线播放| 2019国产精品| 成人a级免费电影| 国产精品网曝门| 91精品国产综合久久福利软件| 国产麻豆欧美日韩一区| 国产精品三级av在线播放| 欧美曰成人黄网| 日韩av在线发布| 国产日产欧产精品推荐色| 国内精品久久久久影院色| 国产亚洲一区二区三区在线观看 | 高清不卡一区二区| 亚洲视频 欧洲视频| 91精品国产麻豆| 亚洲人成电影网站色mp4| 日韩午夜中文字幕| 99久久精品免费| 日韩av网站在线观看| 国产精品美女久久久久久久久 | 日韩国产欧美在线视频| 日本一区二区视频在线| 91激情五月电影| 国产精品自拍毛片| 污片在线观看一区二区| 久久影音资源网| 欧美精品18+| 国产精品亚洲第一区在线暖暖韩国| 亚洲综合无码一区二区| 26uuu色噜噜精品一区| 色94色欧美sute亚洲线路二 | 欧美精品日韩一区| 99国产欧美久久久精品| 亚洲一级二级三级在线免费观看|