自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shwneo的专栏

C++/MFC爱好者

  • 博客(13)
  • 资源 (1)
  • 收藏
  • 关注

原创 3.4 “滤波器”回调函数filter

libmad为我们开放了一个神奇的窗口,让我们有机会对MP3数据做一些神奇的事......

2010-06-27 12:59:00 1634

原创 3.3帧解码和错误处理

解码是libmad最主要的任务,libmad将MP3编码进行子带复合、哈夫曼解码、逆MDCT变换后还原成PCM编码,当然这个PCM跟输入编码器时相比是损失了很多细节信息的。本文带你了解MP3数据在libmad里是如何表示的以及libmad如何处理这些数据...

2010-06-27 12:36:00 3866

原创 3.2 “头部”回调函数header()

之所以要加上引号的原因是这个函数从名字上看是用于处理MP3帧头的,实际情况是真正的帧头解码是在mad_header_decode函数中进行的,mad_header_decode函数负责填充struct mad_header结构://file:libmad-1.05b/frame.c;line:364~375/* begin processing */ stream->this_fra

2010-03-17 17:47:00 1739 2

原创 Madlib及其之外

从开始写Madlib源码分析时算起到现在,差不多有半年了。Madlib系列一直断断续续,至今没有完结。自知亏欠很多,只得在闲暇的时间弥补这半年的心不在焉。对Madlib的源码分析里还有N多没有涉及到的东西尤其是Mp3解码算法核心的东西,实在由于本人水平有限不能在文中给出解释。今天得以闲下来,对我这半年来的经历和收获做一总结,有关于Madlib的,也有一些关于FML的牢骚话,只能请列位看官笑纳了。M

2010-03-05 22:02:00 3124 1

原创 MFC透明位图显示函数

研究好久才弄好,注释的比较详细,不明白的函数可以参考MSDN  bool TransparentDIB(CBitmap * dib, /*要绘制的位图*/ CDC * pDC, /*目标DC*/ CRect * rct, /*目标矩形*/ COLORREF transColor, /*透明色*/ bool bStretch /*是否拉伸位图以适应

2010-02-25 17:21:00 3714 4

原创 3.1 输入函数 input

Shwneo原创首发CSDN技术专栏,转载请注明出处在压缩包里提供的minimad.c示例参考中给出的input回调函数如下:/* * This is the input callback. The purpose of this callback is to (re)fill * the stream buffer which is to be decoded.

2009-06-28 14:19:00 1528 2

原创 三 回调函数

所谓回调函数(call-back),就是不被程序员调用而是被其他函数或过程调用的函数。通常利用函数指针实现。回调函数一般都具有指定的参数表格式以便正确地分配地址。madlib开放给用户的唯一接口就是6个回调函数,这6个回调函数都是以enum mad_flow为返回值。enum mad_flow ,这个枚举在头文件decode.h和mad.h中均有定义:enum mad_flow {

2009-06-28 10:22:00 1199

原创 关键数据结构之 解码器对象mad_decoder

mad_decoder可以看作是整个解码器的“核心”结构。它用c语言有限的对象机制实现了面向对象语言的部分功能。decoder封装了一次解码过程中的所有必要成分,包括用户定义的消息、6个回调函数和相应的选项。mad_decoder结构在decoder.h头文件中定义:struct mad_decoder { enum mad_decoder_mode mode; int opt

2009-06-23 18:08:00 2269

原创 关键数据结构之 输入与输出:mad_stream和mad_synth

在2.1-数据流向中我们总结出:一个mp3文件首先被嵌入到一个“输入流结构”中,在解码之后的PCM流存入“输出结构”中,这两个结构对应于mad_stream和mad_synth两个结构,前者用于mp3文件的输入和解码流程的控制,后者用于存放输出数据。这两个结构分别定义在stream.h和synth.h头文件中。它们在整个解码过程中起到最重要的作用: struct mad_stream {

2009-06-21 20:04:00 1965

原创 关键数据结构之帧结构:mad_herder和mad_frame

一个MP3帧由帧头和帧数据构成。Madlib分别填充mad_herder和mad_frame这两个结构,然后进行解码。mad_herder里包含mp3数据的描述信息,这个结构在frame.h头文件中定义:struct mad_header { enum mad_layer layer; /* audio layer (1, 2, or 3) */ enum mad_mode

2009-06-19 19:34:00 1992

原创 二 关键数据结构之数据流向

根据使用平台的不同,你可以使用各种方法打开一个MP3文件,minimad.c中给出的是在UNIX下打开示例文件的方法,改写成Windows的也不难:CFile file;if(!file.Open("E://A.mp3",CFile::modeRead|CFile::shareDenyRead,NULL)){         cout"can not open file!"endl

2009-05-30 23:14:00 1667 1

原创 一、MadLib基本工作过程

1.1同步方式和异步方式MadLib是以帧为单位解码mp3文件的,所谓同步方式是指解码函数在解码完一帧后才返回并带回出错信息,异步方式是指解码函数在调用后立即返回,通过消息传递解码状态信息。1.2 Mad API 的调用顺序1、mad_decoder_init()【decoder.h】Minimad.c中给出了一个函数调用过程的实例。首先定义一个mad_decoder变量(解码器对

2009-05-30 15:00:00 6439 8

原创 MFC应用程序使用控制台的方法

CreateFile函数除了可以新建和打开文件外,还可以建立Win32环境下的控制台缓冲。此时CreateFile函数的返回值是控制台缓冲的句柄。HANDLE console_write=CreateFile("CONOUT$",//系统控制台缓冲文件GENERIC_READ|GENERIC_WRITE,//要读/写控制台缓冲文件,必须以读/写方式打开FILE_SHARE_READ|FIL

2009-05-10 14:50:00 2095 1

MediaPlayerClassic源码

MediaPlayerClassic的源码,用VC++编写

2007-04-15

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除