• 大小: 23.31MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-07-15
  • 语言: C/C++
  • 标签: C++  VC  wav  MP3  MFC  

资源简介

VS2010编译,可运行。基于8K 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 < loopSize; 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 < SIZE_FRM_HEADER)
{
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\MPEGAudioframe.cpp

     文件       6434  2015-08-11 15:18  WavToMp3\mpeg\MPEGAudioframe.h

     文件         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\link-cvtres.read.1.tlog

     文件          2  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link-cvtres.write.1.tlog

     文件          2  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.9828-cvtres.read.1.tlog

     文件          2  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.9828-cvtres.write.1.tlog

     文件          2  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.9828.read.1.tlog

     文件          2  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.9828.write.1.tlog

     文件       1762  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.command.1.tlog

     文件       5204  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.read.1.tlog

     文件       1056  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\link.write.1.tlog

     文件       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\MPEGAudioframe.cpp

     文件       6434  2015-08-11 15:18  WavToMp3\WavToMp3\Debug\mpeg\MPEGAudioframe.h

     文件         64  2015-08-31 19:40  WavToMp3\WavToMp3\Debug\mpeg\vssver.scc

     文件      24203  2018-03-30 16:50  WavToMp3\WavToMp3\Debug\MPEGAudioframe.obj

     文件        644  2018-04-02 09:59  WavToMp3\WavToMp3\Debug\mt.command.1.tlog

............此处省略60个文件信息

评论

共有 条评论