資源簡介
VS2010編譯,可運行?;?K 16BIT轉換的! 需要其他頻率更改下參數就行!
代碼片段和文件信息
#include?“StdAfx.h“
#include?“MPEGAudioframe.h“
CMPEGAudioframe::CMPEGAudioframe(void)
{
memset(&m_MpegInfo?0?sizeof(m_MpegInfo));
}
CMPEGAudioframe::~CMPEGAudioframe(void)
{
}
int?CMPEGAudioframe::calDuration(unsigned?char?*?buf?int?bufSize)
{
unsigned?char?*?pDataHead; //音頻數據頭
DWORD?dwDataSize; //音頻數據長度
//查找數據幀的位置
MPEGAudioRet?ret?=?findMpegAudioframeFirst(buf?bufSize);
if?(ret.mErrCode?==?MPEG_AUDIO_OK)
{
pDataHead?=?buf?+?ret.mNextPos;
dwDataSize?=?bufSize?-?ret.mNextPos;
}
else
{
pDataHead?=?buf;
dwDataSize?=?bufSize;
}
//查找第一個幀的位置
ret?=?findMpegAudioframePos(pDataHead?dwDataSize?true);
return?ret.mErrCode?==?MPEG_AUDIO_OK???m_MpegInfo.mDuration?:?0;
}
MPEGAudioRet?CMPEGAudioframe::findMpegAudioframeFirst(unsigned?char?*?buf?int?bufSize)
{
ASSERT(buf?!=?NULL?&&?bufSize?>?0);
MPEGAudioRet?ret;
ret.mErrCode?=?MPEG_AUDIO_NEED_MORE;
ret.mNextPos?=?0;
//為了減少搜索ID3的時間,如果能確定搜索范圍,時間更少
int?seeklen?=?1000000;
if?(seeklen?>?bufSize)
{
seeklen?=?bufSize;
}
ID3V2?*?id3v2?=?(ID3V2?*)_memstr(buf?seeklen?“ID3“);
if?(id3v2?==?NULL)
{
ret.mErrCode?=?MPEG_AUDIO_ERR;
return?ret;
}
if?(id3v2->Ver?!=?2?&&?id3v2->Ver?!=?3?&&?id3v2->Ver?!=?4)
{
ret.mErrCode?=?MPEG_AUDIO_ERR;
return?ret;
}
if?(id3v2->Revision?!=?0)
{
ret.mErrCode?=?MPEG_AUDIO_ERR;
return?ret;
}
int?ID3V2_frame_size?=??(int)(id3v2->Size[0]?&?0x7F)?<21?|
(int)(id3v2->Size[1]?&?0x7F)?<14?|
(int)(id3v2->Size[2]?&?0x7F)?<7?|
(int)(id3v2->Size[3]?&?0x7F)?+?10;
ret.mErrCode?=?MPEG_AUDIO_OK;
ret.mNextPos?=?ID3V2_frame_size;
return?ret;
}
MPEGAudioRet?CMPEGAudioframe::findMpegAudioframePos(?unsigned?char?*?buf?int?bufSize?bool?firstframe?)
{
ASSERT(buf?!=?NULL);
ASSERT(bufSize?>?0);
m_dwMpegDataSize?=?bufSize;
MPEGAudioRet?ret;
ret.mErrCode?=?MPEG_AUDIO_NEED_MORE;
ret.mNextPos?=?0;
if?(buf?==?NULL?||?bufSize?<=?0)
{
ret.mErrCode?=?MPEG_AUDIO_ERR;
return?ret;
}
MPEGAudioframeInfo?*?pframeInfo?=?&m_MpegInfo;
int?loopSize?=?bufSize?-?1;
int?i?=?0;
for?(i?=?0;?i? {
//?幀同步標識:?1111?1111?111x?xxxxb
if?(buf[i]?==?0xff?&&?(buf[i+1]&0xe0)?==?0xe0)
{
memset(pframeInfo?0?sizeof(*pframeInfo));
ret.mErrCode?=?_parseMpegframeHdr(buf+i?bufSize-i?pframeInfo?firstframe);
if(?MPEG_AUDIO_OK?==?ret.mErrCode?||?MPEG_AUDIO_NEED_MORE?==?ret.mErrCode)
{
break;
}
}
else?if?(i?==?loopSize-1?&&?buf[i+1]?!=?0xff)
{
i++;
}
}
ret.mNextPos?=?i;
if?(i?>?0?&&?ret.mErrCode?!=?MPEG_AUDIO_OK)
{
memset(pframeInfo?0?sizeof(MPEGAudioframeInfo));
}
return?ret;
}
int?CMPEGAudioframe::_parseMpegframeHdr(?unsigned?char?*?hdrBuf?int?bufSize?MPEGAudioframeInfo?*?info?bool?firstframe?)
{
if(bufSize? {
return?MPEG_AUDIO_NEED_MORE;
}
FHEADER?*?pFrmHdr?=?(FHEADER?*)hdrBuf;
//
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????196608??2018-04-02?09:59??WavToMp3\Debug\WavToMp3.exe
?????文件????1318764??2018-04-02?09:59??WavToMp3\Debug\WavToMp3.ilk
?????文件????5270528??2018-04-02?09:59??WavToMp3\Debug\WavToMp3.pdb
?????文件???????7931??2013-02-05?18:37??WavToMp3\mpeg\BladeMP3EncDLL.h
?????文件??????50174??2012-10-15?11:03??WavToMp3\mpeg\lame.h
?????文件?????210432??2012-03-23?14:39??WavToMp3\mpeg\lame_enc.dll
?????文件??????14137??2015-08-27?12:53??WavToMp3\mpeg\MPEGAudiofr
?????文件???????6434??2015-08-11?15:18??WavToMp3\mpeg\MPEGAudiofr
?????文件?????????64??2015-08-31?19:40??WavToMp3\mpeg\vssver.scc
?????文件???????3440??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\cl.command.1.tlog
?????文件??????60946??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\CL.read.1.tlog
?????文件???????3070??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\CL.write.1.tlog
?????文件??????21985??2018-03-30?16:59??WavToMp3\WavToMp3\Debug\Lame_WavToMp3.obj
?????文件??????????2??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件??????????2??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件??????????2??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件??????????2??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件??????????2??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件??????????2??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件???????1762??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件???????5204??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件???????1056??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\li
?????文件???????7931??2013-02-05?18:37??WavToMp3\WavToMp3\Debug\mpeg\BladeMP3EncDLL.h
?????文件??????50174??2012-10-15?11:03??WavToMp3\WavToMp3\Debug\mpeg\lame.h
?????文件?????210432??2012-03-23?14:39??WavToMp3\WavToMp3\Debug\mpeg\lame_enc.dll
?????文件??????14137??2015-08-27?12:53??WavToMp3\WavToMp3\Debug\mpeg\MPEGAudiofr
?????文件???????6434??2015-08-11?15:18??WavToMp3\WavToMp3\Debug\mpeg\MPEGAudiofr
?????文件?????????64??2015-08-31?19:40??WavToMp3\WavToMp3\Debug\mpeg\vssver.scc
?????文件??????24203??2018-03-30?16:50??WavToMp3\WavToMp3\Debug\MPEGAudiofr
?????文件????????644??2018-04-02?09:59??WavToMp3\WavToMp3\Debug\mt.command.1.tlog
............此處省略60個文件信息
評論
共有 條評論