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

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

?? mp3.c

?? < VC++視頻音頻開發>> 這本書的源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*  @(#) mp3.c, last edit: 4/9/1998
 *  @(#) Copyright (C) 1998 Syntrillium Software (www.syntrillium.com)
 
	Cool Edit (and Cool Edit Pro) MP3 file reader based on MAPLAY by Jeff Tsay

	A bunch of convoluted code was added to this file filter in order to allow
	for the choice of volume level during decode, and format to decode to. 
	That's right, you can decode to 16-bit by truncation, or by dithering, or
	keep an entire 32-bit float for each sample for use in Cool Edit Pro.

    Versions Cool Edit that do not support 32-bit will still say "32-bit" when
	the file is loaded, but rest assured, it's only 16-bit.

	Most of the files for MAPLAY were left untouched, and many were not needed
	for this port, so only the files needed for the port are included here.

    Search for MAPLAY 1.2 or later for original source (and if the source gets
	updated, it should be trivial to add it to this build).  Very few of the 
	other files were modified, and when they were, they were bracketed by 
	"#ifdef COOLPRO" for easy location and such.

	The Obuffer class was modified to take in floats instead of ints for
	reading in with greater accuracy.  Since MPEG (which is similar to JPEG
	in this respect) doesn't try to encode the exact sample values, but 
	instead is psychoacoustic in nature, higher quality can be gained by
	encoding from a 32-bit source (I haven't found an encoder that can take
	floating point samples yet) and then decoding back to 32-bit.  Nothing
	in MPEG says it should be limited to 16-bit I believe (but don't quote
	me on this... I do not know much about the internals of the MPEG format).

	Some links to the binaries of ports of maplay are on Jeff's homepage at:
	http://www-inst.eecs.berkeley.edu/~ctsay/mp2win32.html


  Believe it or not, the speed is much faster than original ISO MPEG code,
  but still slower than Fraunhoffer.  Their Windows ACM codec is about
  twice as fast for reading.  But the good news is it that it's still fast
  enough for real time previewing (auto-play) on pretty much all Pentiums.

  If you purchase an ACM codec for writing Layer 3 MPEG, use the updated
  ACM Waveform format type found at http://www.syntrillium.com which allows
  for saving any ACM format as raw data thus allowing the saving directly
  to .mp3 files if you have the codec which can write MPEG .wav files.


 *
 *  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., 675 Mass Ave, Cambridge, MA 02139, USA.
 *


*/


#include <windows.h>
#include <math.h>
#include "filters.h"
#include "ceglue.h"
#include "resource.h"


// Hey!  Someone want a _real_ challenge?  Implement Layer 3 encoding as well!
    
typedef struct output_tag  // any special vars associated with output file
{	short nFile;         
	long lSize;
} MYOUTPUT;

typedef struct input_tag // any special vars associated with input file
{	short nFile;
	long lSize;
	long lSamprate;
	DWORD dwFormat;
	BOOL bOpenedMPEG;
	MPEG_INFO mpi;
	double fAttenuation;
	float fScaleBy;
	WORD wBitsPerSample;
	BOOL bDither;
	HANDLE h32bit;
	short * pi32bit;
} MYINPUT;

HANDLE myInstance=NULL;

BOOL WINAPI DllMain (HANDLE hModule, DWORD fdwReason, LPVOID lpReserved)
{
   switch (fdwReason)
   {
      case DLL_PROCESS_ATTACH:
        
		 myInstance=hModule;
    
         break;
 
      case DLL_THREAD_ATTACH:
         break;
 
      case DLL_THREAD_DETACH:
         break;
 
      case DLL_PROCESS_DETACH:
         myInstance=NULL;
         break;
   }
 
   return TRUE;   
}

// Fill COOLQUERY structure with information regarding this file filter

__declspec(dllexport) short FAR PASCAL QueryCoolFilter(COOLQUERY far * cq)
{   lstrcpy(cq->szName,"MPEG 3");         
	lstrcpy(cq->szCopyright,"MPEG (Layer 1,2,3) Decoder (GNU)");
	lstrcpy(cq->szExt,"MP3");
	lstrcpy(cq->szExt2,"MP2");
	lstrcpy(cq->szExt3,"MP1");
	cq->lChunkSize=16384; 
	cq->dwFlags=QF_RATEADJUSTABLE|QF_CANLOAD|QF_CANDO32BITFLOATS|QF_HASOPTIONSBOX;
	cq->Stereo8=0; 
	cq->Stereo16=R_32075|R_44100|R_48000;
	cq->Stereo24=0;
	cq->Stereo32=R_32075|R_44100|R_48000;
	cq->Mono8=0; 
	cq->Mono16=R_32075|R_44100|R_48000;
	cq->Mono24=0;
	cq->Mono32=R_32075|R_44100|R_48000;
	cq->Quad32=0;
	cq->Quad16=0;
	cq->Quad8=0;
	return C_VALIDLIBRARY;
}

// Just our little way of not including stdio.h to do float to string cvting
char * ftos(char *tmp, double d)
{	double dd;
	double mplier;
	short maxdecimal=9;
	char * otemp;
	
	otemp=tmp;
	
	if (d==0)
	{ *tmp='0';
	  tmp++;
	  *tmp=0x00;
	  return otemp;
	} 
	
	if (d<0)
	{	*tmp='-';
		tmp++;
		d=-d;
	}
	d=d+(1.0/65535.0/32768.0);
	dd=d;         
	mplier=1.0;
	while (dd>=1.0)
	{	dd/=10.0;
		mplier*=10.0;	
	}   
	mplier/=10.0;             
	while (mplier>=1.0)
	{	*tmp='0'+(short)(d/mplier);
		tmp++;
		d=d-mplier*(short)(d/mplier);
		mplier/=10.0;	
	}
    if (d!=0.0)
    {	short digit;
    	*tmp='.';
    	tmp++;
    	while ((d!=0.0) && (maxdecimal!=0))
    	{	d*=10.0;
    		digit=(short)d;
    		d-=(double)digit;
    		*tmp='0'+digit;
    		tmp++;
    		maxdecimal--;    	    	
    	}             
    	while (*(tmp-1)=='0')
    		tmp--;
    	if (*(tmp-1)=='.')
    		tmp--;
    }
                  
    *tmp=0x00;   
    
    return otemp;
}                                  

__declspec(dllexport) long FAR PASCAL FilterGetFileSize(HANDLE hInput)
{	
	long lSize=0L;
	if (hInput)
	{       MYINPUT *mi;
		mi=(MYINPUT *)GlobalLock(hInput);
		lSize=mi->lSize;
		GlobalUnlock(hInput);
	}
    return lSize;
}

__declspec(dllexport) BOOL FAR PASCAL FilterGetActualFormat(HANDLE hInput,DWORD dwOptions,long * plSamprate, WORD * pwChannels, WORD * pwBitsPerSample)
{   
	if (hInput)
	{	MYINPUT *mi;
		mi=(MYINPUT *)GlobalLock(hInput);
		
		*pwBitsPerSample=HIWORD(dwOptions)&0x00FF;

		GlobalUnlock(hInput);
	}
    return TRUE;
}


__declspec(dllexport) BOOL FAR PASCAL FilterUnderstandsFormat(LPSTR filename)
{	
	if ((lstrlen(filename)>4) && 
		((strcmpi(filename+lstrlen(filename)-4,".mp3")==0) ||
		 (strcmpi(filename+lstrlen(filename)-4,".mp2")==0) ||
		 (strcmpi(filename+lstrlen(filename)-4,".mp1")==0)		 
		 ))
	{	
  		return TRUE;
  	}
  	return FALSE;
}


__declspec(dllexport) BOOL FAR PASCAL DIALOGMsgProc(HWND hWndDlg, UINT Message, WPARAM wParam, LPARAM lParam)
{	switch(Message)
	{	case WM_INITDIALOG:
		{	 WORD wBitsPerSample;
			 double fAttenuation;
			 BOOL bDither;
			 char tmp[30];

         	 wBitsPerSample=HIWORD(lParam)&0x00FF;
			 bDither=(lParam&0x01000000)?TRUE:FALSE;
			 fAttenuation=(double)((DWORD)lParam&0xffff)/100.0-200.0;
             if (fAttenuation>200.0)
				 fAttenuation=0.0;

			 //wsprintf(tmp," Read MPEG As %d-bit ",wBitsPerSample);
			 //SetDlgItemText(hWndDlg,IDC_TEXT1,tmp);
             
			 if (wBitsPerSample==16)
	         {	CheckDlgButton(hWndDlg,IDC_RADIO1,TRUE);
	         }
	         else if (wBitsPerSample==32)
	         {  CheckDlgButton(hWndDlg,IDC_RADIO2,TRUE);
	         }
	         else
	         {	CheckDlgButton(hWndDlg,IDC_RADIO1,TRUE);
	         }
			 
			 CheckDlgButton(hWndDlg,IDC_CHECK1,bDither);
	         ftos(tmp,fAttenuation);
			 SetDlgItemText(hWndDlg,IDC_EDIT1,tmp);
			 EnableWindow(GetDlgItem(hWndDlg,IDC_CHECK1),IsDlgButtonChecked(hWndDlg,IDC_RADIO1)?TRUE:FALSE);
         }         
         break; 

		case WM_CLOSE:         
			 PostMessage(hWndDlg, WM_COMMAND, IDCANCEL, 0L);
			 break; 

		case WM_COMMAND:
		{	WORD wNotifyCode=HIWORD(wParam);
			wParam=(WPARAM)LOWORD(wParam);
			switch(wParam)
			{	
				case IDC_RADIO1:
				case IDC_RADIO2:
					EnableWindow(GetDlgItem(hWndDlg,IDC_CHECK1),IsDlgButtonChecked(hWndDlg,IDC_RADIO1)?TRUE:FALSE);
					break;
				
				case IDOK:
				{	long nDialogReturn=0;
            		char tmp[30];
					
					if (IsDlgButtonChecked(hWndDlg,IDC_RADIO2))
					{	nDialogReturn=32L<<16;
					}
					else
					{	nDialogReturn=16L<<16;
					}

					GetDlgItemText(hWndDlg,IDC_EDIT1,tmp,29);
					nDialogReturn|=(WORD)max(0,min(40000,(atof(tmp)+200.0)*100.0));
					if (IsDlgButtonChecked(hWndDlg,IDC_CHECK1))
						nDialogReturn|=0x01000000;

					EndDialog(hWndDlg, nDialogReturn);
				}
				break;

				case IDCANCEL:
					 EndDialog(hWndDlg, FALSE);
					 break;
			}
			break;
		}
		default:
			return FALSE;
	}
	return TRUE;
} 

__declspec(dllexport) DWORD FAR PASCAL FilterGetOptions(HWND hWnd, HINSTANCE hInst, long lSamprate, WORD wChannels, WORD wBitsPerSample, DWORD dwOptions) // return 0 if no options box
{	
	long nDialogReturn=0L;
	FARPROC lpfnDIALOGMsgProc;
	lpfnDIALOGMsgProc = GetProcAddress(hInst,(LPCSTR)MAKELONG(20,0));	
			
	if (dwOptions==0)
	{	
		nDialogReturn=GetPrivateProfileInt("MPEG Filter","InputFormat",0,"coolrw.ini");
		if (nDialogReturn==0)
			nDialogReturn=(WORD)max(0,min(40000,(100.0+200.0)*100.0));
	}
	else
		nDialogReturn=dwOptions;
	
	// These were to force the dialog to have _only_ 16 or 32... now we let user choose
	//nDialogReturn=(nDialogReturn&0xFF00FFFF)|(((DWORD)wBitsPerSample)<<8);	
	//nDialogReturn|=MAKELONG(nDialogReturn&0x0FF,wBitsPerSample);
	
	nDialogReturn = (long)DialogBoxParam((HINSTANCE)hInst,(LPCSTR)MAKEINTRESOURCE(IDD_COMPRESSION), (HWND)hWnd, (DLGPROC)lpfnDIALOGMsgProc,nDialogReturn);
	
	if (nDialogReturn)
	{	char m[30];
		wsprintf(m,"%d",nDialogReturn);
		WritePrivateProfileString("MPEG Filter","InputFormat",m,"coolrw.ini");
	}

	return nDialogReturn;
}          

__declspec(dllexport) DWORD FAR PASCAL FilterSetOptions2(HANDLE hInput, DWORD dwOptions, long * plSamprate, WORD * pwChannels, WORD * pwBitsPerSample)
{	
	DWORD dwOldOptions;
	MYINPUT *mi;
	mi=(MYINPUT *)GlobalLock(hInput);
		
	dwOldOptions=mi->dwFormat;

	if (!dwOptions)
	{	dwOptions=(DWORD)GetPrivateProfileInt("MPEG Filter","InputFormat",0,"coolrw.ini");
		if (!dwOptions)
			dwOptions=(WORD)max(0,min(40000,(200.0)*100.0))|(16L<<16);
	}
					
	mi->wBitsPerSample=HIWORD(dwOptions)&0x00FF;
	mi->fAttenuation=(double)((DWORD)dwOptions&0xffff)/100.0-200.0;
	mi->bDither=(dwOptions&0x01000000)?TRUE:FALSE;
			
    mi->dwFormat=dwOptions;

	if ((mi->fAttenuation<-199.0) || (mi->fAttenuation>200.0))
		mi->fAttenuation=0;

	if (mi->wBitsPerSample==16)
	{	*pwBitsPerSample=16;
		if (!mi->h32bit)
		{	mi->h32bit=GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,32768);
			mi->pi32bit=(short *)GlobalLock(mi->h32bit);
		}
	}
	else
	{	*pwBitsPerSample=32;		
	}
	mi->lSize=(int)(mi->mpi.fLengthInMilliseconds*(*plSamprate)/1000.0)*(*pwChannels)*(*pwBitsPerSample/8);
	mi->fScaleBy=(float)(32768.0*(pow(10.0,mi->fAttenuation/20.0)));
	
    GlobalUnlock(hInput);
    
    return dwOldOptions;
        
}

// Dummy, but must be here... FilterSetOptions2 is actually called instead if it exists
__declspec(dllexport) DWORD FAR PASCAL FilterSetOptions(HANDLE hInput, DWORD dwOptions, long lSamprate, WORD wChannels, WORD wBitsPerSample)
{	
	DWORD dwOldOptions;
	MYINPUT *mi;
	mi=(MYINPUT *)GlobalLock(hInput);
	
	dwOldOptions=mi->dwFormat;

    mi->dwFormat=dwOptions;
	mi->wBitsPerSample=HIWORD(dwOptions)&0x00FF;
	mi->fAttenuation=(double)((DWORD)dwOptions&0xffff)/100.0-200.0;
	mi->bDither=(dwOptions&0x01000000)?TRUE:FALSE;
	
	if ((mi->fAttenuation<-199.0) || (mi->fAttenuation>200.0))
		mi->fAttenuation=0;

	if (mi->wBitsPerSample==16)
	{	if (!mi->h32bit)
		{	mi->h32bit=GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,32768);
			mi->pi32bit=(short *)GlobalLock(mi->h32bit);
		}
	}

	mi->lSize=(int)(mi->mpi.fLengthInMilliseconds*(lSamprate)/1000.0)*(wChannels)*(wBitsPerSample/8);
	mi->fScaleBy=(float)(32768.0*(pow(10.0,mi->fAttenuation/20.0)));

    GlobalUnlock(hInput);
    
    return dwOldOptions;
}


__declspec(dllexport) DWORD FAR PASCAL FilterOptions(HANDLE hInput)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜精品成人在线| 欧美性大战xxxxx久久久| 99久久伊人精品| 欧美一区二区三区免费视频| 国产精品看片你懂得| 久久福利资源站| 欧美日韩国产大片| 日韩毛片在线免费观看| 精东粉嫩av免费一区二区三区| 色94色欧美sute亚洲线路一ni| 精品日韩在线一区| 天天综合网 天天综合色| 成人av在线资源| 久久婷婷成人综合色| 丝袜诱惑制服诱惑色一区在线观看| 不卡av在线免费观看| 国产视频一区不卡| 久久99精品网久久| 91麻豆精品国产91| 午夜精品影院在线观看| 99久久久国产精品免费蜜臀| 久久久久久免费| 国产一区欧美日韩| 欧美一二三区精品| 五月天国产精品| 欧洲av在线精品| 亚洲午夜精品在线| 色婷婷激情久久| 亚洲欧美日韩成人高清在线一区| 国产夫妻精品视频| 久久久综合九色合综国产精品| 日本不卡一区二区三区| 91精品麻豆日日躁夜夜躁| 天堂在线一区二区| 欧美剧情片在线观看| 亚洲在线视频网站| 欧美日韩在线不卡| 婷婷综合另类小说色区| 欧美日韩精品是欧美日韩精品| 亚洲自拍欧美精品| 欧美精选在线播放| 蜜臀精品一区二区三区在线观看| 91麻豆精品国产91久久久资源速度 | 欧美最猛性xxxxx直播| 亚洲日本在线看| 91福利资源站| 亚洲成人资源网| 欧美精品久久天天躁| 免费高清视频精品| 国产日韩欧美不卡在线| 成人小视频免费在线观看| 国产精品久久久久9999吃药| 99国产麻豆精品| 亚洲国产另类av| 日韩欧美一区二区视频| 国产一区三区三区| 亚洲三级在线免费| 欧美性感一区二区三区| 老司机精品视频一区二区三区| 国产女人18水真多18精品一级做 | 久久成人免费电影| 国产色婷婷亚洲99精品小说| 成人激情开心网| 亚洲精品免费电影| 精品国产a毛片| 91在线云播放| 久久99久久99小草精品免视看| 国产精品美女久久久久久久| 欧美日韩一级黄| 国产美女av一区二区三区| 亚洲视频一区在线| 久久影院午夜论| 欧美三级资源在线| 国产成人免费xxxxxxxx| 亚洲一线二线三线久久久| 精品国产污污免费网站入口| 99精品欧美一区二区蜜桃免费| 日本视频免费一区| 中文字幕日韩一区| 欧美精品一区二区高清在线观看| 99久久99久久免费精品蜜臀| 日韩精品亚洲一区| 亚洲三级在线观看| 国产网站一区二区| 在线播放中文一区| 一本一道波多野结衣一区二区| 久久国内精品自在自线400部| 一区二区三区中文字幕在线观看| 久久久天堂av| 精品久久国产老人久久综合| 色94色欧美sute亚洲线路一久| 国产精品亚洲а∨天堂免在线| 偷拍亚洲欧洲综合| 亚洲成人一区在线| 亚洲视频综合在线| 国产精品嫩草久久久久| 精品久久久三级丝袜| 欧美日韩午夜在线视频| 色婷婷亚洲一区二区三区| 国产精品一区二区男女羞羞无遮挡 | 亚洲激情图片一区| 国产精品网曝门| 久久久久久久久一| 久久综合九色综合欧美亚洲| 欧美视频在线一区| 在线免费精品视频| 色婷婷亚洲婷婷| 欧美亚洲禁片免费| 欧美无砖砖区免费| 欧洲激情一区二区| 欧美丝袜自拍制服另类| 在线观看视频91| 欧美性淫爽ww久久久久无| eeuss影院一区二区三区 | 6080日韩午夜伦伦午夜伦| 欧美丝袜第三区| 欧美日韩一区二区三区四区五区| 色婷婷av一区二区三区大白胸| 色婷婷激情综合| 欧美日韩在线三级| 精品久久久网站| 欧美经典一区二区三区| 国产精品第13页| 亚洲精品中文在线影院| 亚洲婷婷国产精品电影人久久| 一色屋精品亚洲香蕉网站| 国产精品嫩草久久久久| 亚洲人成网站精品片在线观看| 亚洲欧洲av在线| 亚洲综合色自拍一区| 午夜视频一区二区| 久久99国产精品久久99果冻传媒| 狠狠色综合日日| 成人一级片网址| 91福利国产成人精品照片| 欧美日韩久久久久久| 欧美一区二区三区在线观看| 精品日韩一区二区三区| 中文字幕精品在线不卡| 亚洲午夜av在线| 国产精品一区二区你懂的| 成人18视频日本| 欧美三级一区二区| 日韩欧美高清dvd碟片| 日本一区免费视频| 亚洲国产一区二区视频| 久久97超碰色| 色哟哟日韩精品| 久久影院午夜片一区| 一区二区三区在线播| 久久99精品国产.久久久久| 91视频.com| 久久午夜羞羞影院免费观看| 综合网在线视频| 精品亚洲国产成人av制服丝袜| 成人久久18免费网站麻豆| 欧美日韩电影在线| 国产精品国产三级国产有无不卡| 日韩高清在线一区| 91小视频在线免费看| 精品欧美一区二区在线观看| 亚洲蜜桃精久久久久久久| 久久99久久精品| 欧美卡1卡2卡| 亚洲精品免费视频| 国产91丝袜在线播放| 91精品一区二区三区在线观看| 亚洲天堂久久久久久久| 韩国av一区二区三区在线观看| 欧美日韩午夜在线| 亚洲精品欧美二区三区中文字幕| 国精产品一区一区三区mba视频| 欧美视频一区二区三区在线观看 | 国产xxx精品视频大全| 欧美夫妻性生活| 伊人色综合久久天天| 成人国产精品视频| 精品国产第一区二区三区观看体验| 亚洲大片一区二区三区| 一本久久a久久精品亚洲| 中文字幕免费在线观看视频一区| 精品一区二区三区在线播放视频 | 在线播放一区二区三区| 亚洲综合色成人| 在线视频你懂得一区二区三区| 国产精品免费观看视频| 国产精品18久久久| 欧美国产1区2区| 成人激情免费网站| 中文字幕亚洲成人| 91片在线免费观看| 亚洲欧美日韩国产中文在线| 99视频精品全部免费在线| 日本一区二区高清| 99精品一区二区三区| 国产精品日日摸夜夜摸av| 国产99久久久国产精品免费看| 国产午夜精品福利| 99精品视频一区| 一级中文字幕一区二区|