资源简介
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\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个文件信息
相关资源
- 顾卫刚手把手教你学DSP基于2812
- Learning C++ by Creating Games with UE4 无水印
- 《C++游戏开发》笔记十二 战争迷雾的
- 《MFC游戏开发》笔记九 碰撞检测 怪物
- C++ GUI Qt 4编程第二版 经典教材适合
- 图书管理系统c++与SQL数据库+课程设计
- Scientific and Engineering C++
- VC++游戏编程基础有书签
- 钱能C++程序设计教程第二版pdf高清带
- C++并发编程实战 美威廉姆斯著 高清扫
- 源代码——MFC的WebBrowser控件 C++与ja
- C++编程风格(PDF 英汉对照 The Element
- 精通Visual C++数字图像处理典型算法及
- vc++企业员工考勤系统源码
- MFC c++ 实现简易电话簿
- VC助手 VA_X_2074 破解版支持VC6~VS2015
- 钱能C++程序设计教程第二版&高清版
- VC++图像处理程序设计
- c++ 2017_vc_redist.x64
- 数据结构-胡学钢C++描述
- visual c++ 自绘控件 菜单 MFC界面 资源
- [C++程序设计基础第5版上][周霭如林伟
- RabbitMQ client c++封装类 c++工程 (没有
- 无线通信系统仿真--C++实用模型包含源
- Hopfield神经网络解决TSP问题C++程序
-
exceptional C++ st
yle 英文版 chm pdf 和 - SUSE 12 gcc-c++ 离线安装
- c++ 用opencv比较两张人脸照片是否相似
- 数据结构第二版王红梅课后习题解析
- vc++之mfc屏幕监控系统源代码
评论
共有 条评论