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

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

?? wavreader.cpp

?? wav文件讀取插件
?? CPP
字號:
// WAVReader.cpp: implementation of the WAVReader class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "URLMon.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////


WAVReader::WAVReader()
{

// Init data members

    m_pwfmt = NULL;
    m_hmmio = NULL;
    m_nBlockAlign= 0;
    m_nAvgDataRate = 0;
    m_InDataSize = 0;
	m_OutDataSize = 0;
    m_nBytesPlayed = 0;

    memset (&m_mmckiRiff, 0, sizeof (MMCKINFO));
    memset (&m_mmckiFmt, 0, sizeof (MMCKINFO));
    memset (&m_mmckiData, 0, sizeof (MMCKINFO));

	m_Buffer			= NULL;
	m_BufferSize		= 0;
	m_BufferDataRead	= 0;

	m_InDataCursor = 0;

	m_IsPcm = FALSE;
	m_pHas  = NULL;

	ZeroMemory(&m_Ash,sizeof(m_Ash));
	m_SubFileMem = NULL;
}

WAVReader::~WAVReader()
{

    
    // Close file
    if (m_hmmio)
        mmioClose (m_hmmio, 0);
    
	if (!m_IsPcm) 
	{
		if(m_pHas)
			acmStreamUnprepareHeader(m_pHas, &m_Ash, 0);
		delete [] m_Ash.pbDst;
		delete [] m_Ash.pbSrc;
        if(m_pHas)
			acmStreamClose( m_pHas, 0);
		
	}
	else
		delete [] m_Buffer;
	
	if (m_pwfmt)
        GlobalFree (m_pwfmt);

}

CKERROR WAVReader::ReadMemory(void* memory, int size) {
	if(!memory || !size)
		return -1;
	
	BOOL fRtn = CK_OK;    // assume success 
		
	MMIOINFO mminfo;
	memset(&mminfo,0,sizeof(MMIOINFO));
	
	mminfo.pchBuffer = (char*) memory;
    mminfo.cchBuffer = size;
	mminfo.fccIOProc = FOURCC_MEM;

	// Open the requested file
    if ((m_hmmio = mmioOpen(NULL, &mminfo, MMIO_ALLOCBUF | MMIO_READ)) == NULL)
    {
        m_mmr = MMIOERR_CANNOTOPEN;
        goto OPEN_ERROR;
    }
    
	return DoMMio();

OPEN_ERROR:
    // Handle all errors here
    fRtn = -1;
    if (m_hmmio)
    {
        // Close file
        mmioClose (m_hmmio, 0);
        m_hmmio = NULL;
    }

    if (m_pwfmt)
    {
        // UNDONE: Change here if using malloc
        // Free memory
        GlobalFree (m_pwfmt);
        m_pwfmt = NULL;
    }

	return -1;

}

// Opens a file
CKERROR WAVReader::OpenFile(char *file)
{

	WORD cbExtra = 0;
    
    BOOL fRtn = CK_OK;    // assume success
    
	char* CacheName= file;
/*	[MAX_PATH];


	if(VxURLDownloadToCacheFile(NULL,file,CacheName,_MAX_PATH,0,&wavbsc) != S_OK)
		return -1;
*/
	if (!CacheName) return -1;
	if(strlen(CacheName) == 0)
		return -1;

    // Open the requested file
    if ((m_hmmio = mmioOpen (CacheName, NULL, MMIO_ALLOCBUF | MMIO_READ)) == NULL)
    {
        m_mmr = MMIOERR_CANNOTOPEN;
        goto OPEN_ERROR;
    }
    
	return DoMMio();

OPEN_ERROR:
    // Handle all errors here
    fRtn = -1;
    if (m_hmmio)
    {
        // Close file
        mmioClose (m_hmmio, 0);
        m_hmmio = NULL;
    }

    if (m_pwfmt)
    {
        // UNDONE: Change here if using malloc
        // Free memory
        GlobalFree (m_pwfmt);
        m_pwfmt = NULL;
    }

	return -1;

}


CKERROR WAVReader::DoMMio(){
	WORD cbExtra = 0;   
    BOOL fRtn = CK_OK;    // assume success
 
    // Descend into initial chunk ('RIFF')
    if (m_mmr = mmioDescend (m_hmmio, &m_mmckiRiff, NULL, 0))
    {
        goto OPEN_ERROR;
    }
    
    // Validate that it's a WAVE file
    if ((m_mmckiRiff.ckid != FOURCC_RIFF) || (m_mmckiRiff.fccType != mmioFOURCC('W', 'A', 'V', 'E')))
    {
        m_mmr = MMIOERR_INVALIDFILE;
        goto OPEN_ERROR;
    }
    
    // Find format chunk ('fmt '), allocate and fill WAVEFORMATEX structure
    m_mmckiFmt.ckid = mmioFOURCC('f', 'm', 't', ' ');
    if (m_mmr = mmioDescend (m_hmmio, &m_mmckiFmt, &m_mmckiRiff, MMIO_FINDCHUNK))
    {
        goto OPEN_ERROR;
    }
    
    // Read the format chunk into temporary structure
    PCMWAVEFORMAT pcmwf;
    if (mmioRead (m_hmmio, (CHAR *) &pcmwf, sizeof(PCMWAVEFORMAT)) != sizeof(PCMWAVEFORMAT))
    {
        m_mmr = MMIOERR_CANNOTREAD;
        goto OPEN_ERROR;
    }

    // If format is not PCM, then there are extra bytes appended to WAVEFORMATEX
    if (pcmwf.wf.wFormatTag != WAVE_FORMAT_PCM)
    {
        // Read WORD specifying number of extra bytes
        if (mmioRead (m_hmmio, (LPSTR) &cbExtra, sizeof (cbExtra)) != sizeof(cbExtra))
        {
            m_mmr = MMIOERR_CANNOTREAD;
            goto OPEN_ERROR;
        }
    }

    // Allocate memory for WAVEFORMATEX structure + extra bytes
    // UNDONE: GMEM_FIXED???? use malloc?
    if (m_pwfmt = (WAVEFORMATEX *) GlobalAlloc (GMEM_FIXED, sizeof(WAVEFORMATEX)+cbExtra))
    {
        // Copy bytes from temporary format structure
        memcpy (m_pwfmt, &pcmwf, sizeof(pcmwf));
        m_pwfmt->cbSize = cbExtra;
        
        // Read those extra bytes, append to WAVEFORMATEX structure
        if (cbExtra != 0)
        {
            if ((m_mmr = mmioRead (m_hmmio, (LPSTR) ((BYTE *)(m_pwfmt) + sizeof (WAVEFORMATEX)), cbExtra)) != cbExtra)
            {
                // Error reading extra bytes
                m_mmr = MMIOERR_CANNOTREAD;
                goto OPEN_ERROR;
            }
        }
    }
    else
    {
        // Error allocating memory
        m_mmr = MMIOERR_OUTOFMEMORY;
        goto OPEN_ERROR;
    }
    
            
    // Init some member data from format chunk
    m_nBlockAlign = m_pwfmt->nBlockAlign;
    m_nAvgDataRate = m_pwfmt->nAvgBytesPerSec;

    // Ascend out of format chunk
    if (m_mmr = mmioAscend (m_hmmio, &m_mmckiFmt, 0))
    {
        goto OPEN_ERROR;
    }

    // Cue for streaming
    Cue();
    
    // Init some member data from data chunk
    m_InDataSize = m_mmckiData.cksize;
    
    // Successful open!
    goto OPEN_DONE;
    
OPEN_ERROR:
    // Handle all errors here
    fRtn = -1;
    if (m_hmmio)
    {
        // Close file
        mmioClose (m_hmmio, 0);
        m_hmmio = NULL;
    }

    if (m_pwfmt)
    {
        // UNDONE: Change here if using malloc
        // Free memory
        GlobalFree (m_pwfmt);
        m_pwfmt = NULL;
    }

	return -1;

OPEN_DONE:

	// Create Decode Buffer
	
	m_IsPcm = (m_pwfmt->wFormatTag	== WAVE_FORMAT_PCM); 

	if(m_IsPcm)
	{
		m_BufferSize = min(m_pwfmt->nAvgBytesPerSec / 8, m_InDataSize);
		m_Buffer = new BYTE[m_BufferSize ];
		
		m_Wfe = *m_pwfmt;

		m_OutDataSize = m_InDataSize; // Equal if PCM
		
	}
	else
	{

		m_Wfe.cbSize = 0;
		m_Wfe.wFormatTag = WAVE_FORMAT_PCM;

		m_Wfe.nChannels = m_pwfmt->nChannels; 
		m_Wfe.nSamplesPerSec = m_pwfmt->nSamplesPerSec; 
		m_Wfe.wBitsPerSample = 16;
	   
		m_Wfe.nBlockAlign		= m_Wfe.nChannels * m_Wfe.wBitsPerSample / 8; 
		m_Wfe.nAvgBytesPerSec	= m_Wfe.nSamplesPerSec * m_Wfe.nBlockAlign; 		

		HRESULT res = acmStreamOpen( &m_pHas, NULL, m_pwfmt, &m_Wfe, NULL, NULL, NULL,ACM_STREAMOPENF_NONREALTIME);

		if (!res) 
		{

			unsigned long outsize,insize = m_pwfmt->nAvgBytesPerSec;
			acmStreamSize(m_pHas, insize, &outsize, ACM_STREAMSIZEF_SOURCE);

			LPBYTE inbuf=new BYTE[insize];
			LPBYTE outbuf=new BYTE[outsize];

			m_Ash.cbStruct= sizeof(ACMSTREAMHEADER); 
			m_Ash.fdwStatus= 0; 
			m_Ash.dwUser= 0; 
			m_Ash.pbSrc= inbuf; 
			m_Ash.cbSrcLength= insize; 
			m_Ash.cbSrcLengthUsed= 0; 
			m_Ash.dwSrcUser= insize; 
			m_Ash.pbDst= outbuf; 
			m_Ash.cbDstLength= outsize; 
			m_Ash.cbDstLengthUsed= 0; 
			m_Ash.dwDstUser= outsize; 

			res=acmStreamPrepareHeader( m_pHas, &m_Ash, 0);

			if (res==0)
				acmStreamSize(m_pHas, m_InDataSize, &m_OutDataSize, ACM_STREAMSIZEF_SOURCE);
			else return -1;
		} else return -1;
	}
	return CK_OK;
}

// Decodes next chunk of data, use get data buffer to get decoded data
CKERROR WAVReader::Decode() 
{
	if(m_IsPcm)
	{
		m_BufferDataRead  = ReadPCM(m_Buffer,m_BufferSize);
		if(m_BufferDataRead > 0)
			return CK_OK;
		else
			return CKSOUND_READER_EOF;
	}
	else
	{

		MMRESULT res = -1;

		if(m_InDataCursor >= m_InDataSize)
			return CKSOUND_READER_EOF;
		
		if(m_InDataCursor == 0)
		{
			m_Ash.cbSrcLength		= DataRead(0, m_Ash.dwSrcUser, (char*)m_Ash.pbSrc);
			m_Ash.cbDstLengthUsed	= 0; 

			res = acmStreamConvert( m_pHas, &m_Ash, ACM_STREAMCONVERTF_START|ACM_STREAMCONVERTF_BLOCKALIGN);
			if(!m_Ash.cbSrcLengthUsed)
				res = acmStreamConvert( m_pHas, &m_Ash, ACM_STREAMCONVERTF_START);			
		}
		else
		{
			m_Ash.cbSrcLength		= DataRead(m_InDataCursor, m_Ash.dwSrcUser, (char*)m_Ash.pbSrc);;
			m_Ash.cbDstLengthUsed	= 0; 
			res = acmStreamConvert( m_pHas, &m_Ash,ACM_STREAMCONVERTF_BLOCKALIGN );
			if(!m_Ash.cbSrcLengthUsed)
				res = acmStreamConvert( m_pHas, &m_Ash,ACM_STREAMCONVERTF_END);			
		}

		
		switch(res)
		{
			case 0:
			{
				m_InDataCursor += m_Ash.cbSrcLengthUsed;// ? m_Ash.cbSrcLengthUsed : m_Ash.cbSrcLength;
				return CK_OK;
			}
			break;

		}
	}

	
	return CKSOUND_READER_GENERICERR;

}


int WAVReader::DataRead(int count, char* buf) 
{	
	int r=mmioRead(m_hmmio,(HPSTR) buf, count);
	return r;
}

int WAVReader::DataRead(long pos, int count, char* buf) {
	return (DataSeek(pos)!=-1) ? DataRead(count, buf) : -1;
}

int WAVReader::DataSeek(long pos) {
	int p=-1;
	
	MMRESULT error = mmioAscend(m_hmmio, &m_mmckiFmt,0);
	if (error!=0) 
		return -1;
	
	m_mmckiData.ckid = mmioFOURCC('d','a','t','a');
	error=mmioDescend(m_hmmio, &m_mmckiData, &m_mmckiRiff, MMIO_FINDCHUNK);
	if (error!=0) 
		return -1;
	
	p=mmioSeek(m_hmmio,pos,SEEK_CUR); 
	if (p==-1)
		return -1;

	return p;	
}



// Gets the last decoded buffer
CKERROR WAVReader::GetDataBuffer(BYTE **buf, int *size)
{
	if(m_IsPcm)
	{
		*buf = m_Buffer;
		*size = (int) m_BufferDataRead;
	}
	else
	{
		*buf = m_Ash.pbDst;
		*size = m_Ash.cbDstLengthUsed;
	}

	return CK_OK;
}
	
// Gets the wave format of decoded datas
CKERROR WAVReader::GetWaveFormat(CKWaveFormat *wfe)
{
	memcpy(wfe,&m_Wfe,sizeof(CKWaveFormat));
	return CK_OK;
}

// Gets whole decoded data size
int WAVReader::GetDataSize()
{
	return (int) m_OutDataSize;
}
	
// Gets the play time length
int WAVReader::GetDuration()
{
	return (int)(((float)m_OutDataSize * 1000.0f ) / (float)m_Wfe.nAvgBytesPerSec);
}


CKERROR WAVReader::Seek(int pos)
{
	int p=-1;

	MMRESULT error = mmioAscend(m_hmmio, &m_mmckiFmt,0);
	if (error!=0) 
		return -1;
	
	m_mmckiData.ckid = mmioFOURCC('d','a','t','a');
	error=mmioDescend(m_hmmio, &m_mmckiData, &m_mmckiRiff, MMIO_FINDCHUNK);
	if (error!=0) 
		return -1;
	
	p=mmioSeek(m_hmmio,pos,SEEK_CUR); 
	if (p==-1)
		return CKSOUND_READER_GENERICERR;
	if(pos == 0)
		m_InDataCursor = 0;
	else
		m_InDataCursor = p;


	return CK_OK;
}

// Play
CKERROR WAVReader::Play()
{
	return CK_OK;
}

// Stop
CKERROR WAVReader::Stop()
{
	return CK_OK;
}



// Cue
//

BOOL WAVReader::Cue (void)
{
    BOOL fRtn = CK_OK;    // assume success

    
    // Seek to 'data' chunk from beginning of file
    if (mmioSeek (m_hmmio, m_mmckiRiff.dwDataOffset + sizeof(FOURCC), SEEK_SET) != -1)
    {
        // Descend into 'data' chunk
        m_mmckiData.ckid = mmioFOURCC('d', 'a', 't', 'a');
        if ((m_mmr = mmioDescend (m_hmmio, &m_mmckiData, &m_mmckiRiff, MMIO_FINDCHUNK)) == MMSYSERR_NOERROR)
        {
            // Reset byte counter
            m_nBytesPlayed = 0;
        }
        else
        {
            // UNDONE: set m_mmr
            fRtn = -1;
        }
    }
    else
    {
        // mmioSeek error
        m_mmr = MMIOERR_CANNOTSEEK;
        fRtn = -1;
    }
	
    return fRtn;
}


// Read
//
// Returns number of bytes actually read.
// On error, returns 0, MMIO error code in m_mmr.
//
UINT WAVReader::ReadPCM(BYTE * pbDest, UINT cbSize)
{
    MMIOINFO mmioinfo;
    UINT cb;

    
    // Use direct buffer access for reads to maximize performance
    if (m_mmr = mmioGetInfo (m_hmmio, &mmioinfo, 0))
    {
        goto READ_ERROR;
    }
                
    // Limit read size to chunk size
    cbSize = (cbSize > m_mmckiData.cksize) ? m_mmckiData.cksize : cbSize;

    // Adjust chunk size
    m_mmckiData.cksize -= cbSize;

    // Copy bytes from MMIO buffer
    for (cb = 0; cb < cbSize; cb++)
    {
        // Advance buffer if necessary
        if (mmioinfo.pchNext == mmioinfo.pchEndRead)
        {
            if (m_mmr = mmioAdvance (m_hmmio, &mmioinfo, MMIO_READ))
            {
                goto READ_ERROR;
            }
            
            if (mmioinfo.pchNext == mmioinfo.pchEndRead)
            {
                m_mmr = MMIOERR_CANNOTREAD;
                goto READ_ERROR;
            }
        }
            
        // Actual copy
//      *((BYTE*)pbDest+cb) = *((BYTE*)mmioinfo.pchNext)++;
        *(pbDest+cb) = *(mmioinfo.pchNext)++;
    }

    // End direct buffer access
    if (m_mmr = mmioSetInfo (m_hmmio, &mmioinfo, 0))
    {
        goto READ_ERROR;
    }

    // Successful read, keep running total of number of data bytes read
    m_nBytesPlayed += cbSize;
    goto READ_DONE;
    
READ_ERROR:
    cbSize = 0;

READ_DONE:
    return (cbSize);
}

void WAVReader::Release()
{
	delete this;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩激情一区二区三区| 久久夜色精品一区| 日韩午夜电影在线观看| 国产欧美日韩另类视频免费观看| 一区二区三区日韩精品视频| 国产美女精品在线| 欧美一级免费大片| 亚洲激情校园春色| 国产91高潮流白浆在线麻豆 | 亚洲图片自拍偷拍| 国产aⅴ综合色| 精品久久久久久久久久久久包黑料 | 欧洲精品中文字幕| 精品国产乱码91久久久久久网站| 亚洲二区在线观看| 93久久精品日日躁夜夜躁欧美| 精品区一区二区| 日韩成人免费电影| 91成人国产精品| 中文字幕在线观看不卡| 国产成人啪免费观看软件| 日韩亚洲电影在线| 日韩1区2区3区| 欧美日产国产精品| 亚洲成人av电影在线| 色猫猫国产区一区二在线视频| 国产欧美一区二区精品性色| 精品无码三级在线观看视频| 欧美一级片在线看| 另类小说图片综合网| 日韩女优视频免费观看| 日本欧美一区二区在线观看| 欧美日韩国产精品成人| 午夜久久久影院| 欧美精三区欧美精三区| 天堂va蜜桃一区二区三区漫画版| 欧美日韩中文一区| 亚洲一区二区三区四区不卡| 欧美日韩一区二区三区在线 | 国产女人aaa级久久久级 | 中文字幕一区二区三区四区不卡 | 日韩一区在线免费观看| 91视频观看免费| 夜夜夜精品看看| 欧美午夜影院一区| 日韩国产欧美三级| 日韩欧美国产高清| 国产精品一区二区久久精品爱涩 | 视频在线观看一区| 日韩欧美123| 国产suv精品一区二区三区| 国产午夜精品在线观看| 丁香五精品蜜臀久久久久99网站 | 精品一区二区久久久| 久久久影院官网| 99精品视频一区二区| 亚洲综合色噜噜狠狠| 日韩无一区二区| 成人黄色小视频在线观看| 亚洲精品网站在线观看| 91精品国产综合久久小美女| 国产呦萝稀缺另类资源| 国产精品精品国产色婷婷| 欧美中文字幕一区二区三区亚洲| 日日骚欧美日韩| 国产欧美一二三区| 欧美日韩在线一区二区| 国产一区激情在线| 亚洲欧美另类图片小说| 欧美一区二区黄色| 99久久综合国产精品| 亚洲成a天堂v人片| 久久伊99综合婷婷久久伊| 欧洲视频一区二区| 国产.欧美.日韩| 五月天精品一区二区三区| 欧美激情综合五月色丁香| 欧美乱妇一区二区三区不卡视频| 国产一区二区三区av电影| 一区二区三区欧美亚洲| 国产三区在线成人av| 欧美精品日韩一区| 99热99精品| 国产精品一二三在| 另类综合日韩欧美亚洲| 亚洲午夜精品17c| 国产精品视频一二| 日韩精品一区二区三区视频| 日本伦理一区二区| 成人综合激情网| 另类的小说在线视频另类成人小视频在线| 亚洲啪啪综合av一区二区三区| 精品国产乱码久久久久久久久| 欧美日韩电影在线| 91老师国产黑色丝袜在线| 国产精品自产自拍| 青青草精品视频| 五月天久久比比资源色| 亚洲午夜久久久久久久久电影院 | 久久精品99国产精品| 亚洲国产精品麻豆| 亚洲精品美国一| 成人欧美一区二区三区在线播放| 久久亚洲免费视频| 精品欧美一区二区在线观看| 91精品国产一区二区三区蜜臀 | av资源网一区| 国产91在线|亚洲| 国产毛片精品视频| 久久国产尿小便嘘嘘尿| 精久久久久久久久久久| 美女视频免费一区| 久久精品国产秦先生| 日本在线不卡一区| 免费人成在线不卡| 奇米888四色在线精品| 日韩精品乱码免费| 奇米亚洲午夜久久精品| 男女男精品网站| 久久99热99| 国产麻豆一精品一av一免费| 丁香婷婷综合网| 99精品视频一区| 欧美亚洲国产bt| 欧美精品欧美精品系列| 91精品在线一区二区| 欧美成人a视频| 国产女同互慰高潮91漫画| 日韩一区在线看| 亚洲成人一二三| 久久99精品视频| 成人美女视频在线观看| 91伊人久久大香线蕉| 欧洲色大大久久| 日韩欧美精品三级| 欧美激情一区二区三区全黄 | 色婷婷久久综合| 欧美色综合网站| 欧美岛国在线观看| 国产色91在线| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲国产成人tv| 国产永久精品大片wwwapp| 不卡区在线中文字幕| 欧美日韩在线亚洲一区蜜芽| 精品国产成人系列| 中文字幕一区二区三区蜜月| 亚洲成人三级小说| 国产一区二区美女| 日本高清不卡视频| 日韩欧美电影一二三| 中文字幕一区二区5566日韩| 亚洲福利一区二区| 国产不卡一区视频| 欧美日韩国产高清一区| 久久这里只精品最新地址| 亚洲一区二区三区四区五区中文 | 奇米影视一区二区三区| 成人蜜臀av电影| 日韩欧美国产电影| 亚洲精品免费看| 国产乱码精品一区二区三区忘忧草| av色综合久久天堂av综合| 日韩一区二区视频在线观看| 国产精品毛片大码女人| 日韩精品免费专区| 日本伦理一区二区| 国产丝袜在线精品| 日本视频一区二区三区| 色中色一区二区| 国产视频视频一区| 裸体歌舞表演一区二区| 欧美午夜一区二区三区免费大片| 国产亚洲精品资源在线26u| 日韩二区三区四区| 在线影视一区二区三区| 中文字幕精品一区| 九色综合狠狠综合久久| 欧美日韩国产综合一区二区三区| 国产精品天美传媒| 久热成人在线视频| 欧美精品777| 亚洲欧美日韩成人高清在线一区| 高清国产一区二区三区| 日韩精品在线看片z| 日韩福利视频导航| 欧美高清性hdvideosex| 尤物在线观看一区| 色999日韩国产欧美一区二区| 国产精品免费观看视频| 国产丶欧美丶日本不卡视频| 日韩美女在线视频| 免费观看一级欧美片| 欧美一区二区三区视频免费| 亚洲自拍都市欧美小说| 色999日韩国产欧美一区二区| 亚洲激情av在线| 色欧美88888久久久久久影院| 中文字幕一区二| 91国产视频在线观看|