关键数据结构之数据流向计算机二级考试
文章作者 100test 发表时间 2009:07:25 10:37:55
来源 100Test.Com百考试题网
编辑特别推荐:
全国计算机等级考试(等考)指定教材
全国计算机等级考试学习视频
全国计算机等级考试网上辅导招生
全国计算机等级考试时间及科目预告
百考试题教育全国计算机等级考试在线测试平台
全国计算机等级考试资料下载
全国计算机等级考试论坛
计算机等级考试四级应用题解析汇总
2009年下半年全国计算机二级考试报名时间从6月1日起已经开始报名。详情点击:2009年下半年全国计算机等级考试各地报名点汇总。2009年下半年全国计算机二级考试时间是2009年9月19日至23日。更多优质资料尽在百考试题论坛 百考试题在线题库。
根据使用平台的不同,你可以使用各种方法打开一个MP3文件,minimad.c中给出的是在UNIX下打开示例文件的方法,改写成Windows的也不难:
CFile file.
if(!file.Open("E:\\A.mp3",CFile::modeRead|CFile::shareDenyRead,NULL))
{
cout<.<."can not open file!"<.<.endl.
return -1.
}
DWORD file_size=file.GetLength().
DWORD file_readerd=0.
if(file_size==0)
{
cout<.<."File Error!"<.<.endl.
return -1.
}
unsigned char * file_buffer=(unsigned char *)malloc(file_size).
do
{
file_readerd=file.Read(file_buffer,file_size).
} while (file_readerd).
free(file_buffer).
file.Close().
整个mp3文件就被映射到了file_buffer里。这个file_buffer就可以传给解码器解码了。但是mad_decoder_init()和mad_decoder_run()的参数中并没有传入这个指针的地方。Minimad,c里使用了一个最简单的“自定义消息结构”(private message structure),通过mad_decoder_init()将buffer的start和length传给mad_decoder结构,再用mad_decoder_run()对mad_decoder进行解码:
static
int decode(unsigned char const *start, unsigned long length)
{
struct buffer buffer.
struct mad_decoder decoder.
int result.
/* initialize our private message structure */
buffer.start = start.
buffer.length = length.
/* configure input, output, and error functions */
mad_decoder_init(&.decoder, &.buffer,
input, 0 /* header */, 0 /* filter */, output,
error, 0 /* message */).
/* start decoding */
result = mad_decoder_run(&.decoder, MAD_DECODER_MODE_SYNC).
/* release the decoder */
mad_decoder_finish(&.decoder).
return result.
}
综合前面的分析,得出数据大体的走向:首先通过input回调函数调用mad_stream_buffer()函数将mp3文件绑定到一个mad_stream结构中,再由解码器从stream中分离出frame,最后解码单个frame得到pcm。
2009年9月全国计算机等级考试时间及科目预告
2009年NCRE考试有新变化
2009年全国计算机等级考试-大纲
全国计算机等级考试历年真题及答案
2009年上半年全国计算机等级考试试题及答案