zoukankan      html  css  js  c++  java
  • 基于VC的声音文件操作(五)

    (六)读取波形文件的实例

    1.打开文件后,可通过HMMO句柄获得文件中的波形部份:
    MMCKINFO mmckinfo;
    mmckinfo.fccType = mmioFOURCC('W','A','V','E');
    mmioDescend(h, &mmckinfo, NULL, MMIO_FINDRIFF);
    经上述调用,mmioDescend函数在句柄h所指向的文件中搜索构造类型为"WAVE"的块的信息,MMCKINFO结构用来接受波形部份信息,该函数调用时会通过检查MMCKINFO结构的fccType的数据来决定需要获得什么构造类型的信息,我们指定函数的wflags参数为MMIO_FINDRIFF,表示需要搜索"RIFF"块信息。
    RIFF文件的块信息结构MMCKINFO的定义如下:
    typedef struct 
    {
        FOURCC ckid;                // 记录块的标识
        DWORD cksize;             // 记录该块的数据长度,该长度不包含4字节的块标识长度
        FOURCC fccType;          // 记录块的类型
        DWORD dwDataOffset;  // 记录块数据成员的首地址距文件头的偏移量
        DOWRD dwFlags;          // 用来指定块的附加信息,一般为空或MMIO_DIRTY等标记
    }MMCKINFO;

    2. 得到波形部分的MMCKINFO结构指针后,下一步就是获得波形文件的信息部分:
    MMCKINFO mmfmtckinfo;
    mmfmtckinfo.ckid = mmioFOURCC('F','M','T',' ');
    mmioDescend(h, &mmfmtckinfo, &mmckinfo, MMIO_FINDCHUNCK);

    mmioDescend函数可以通过把"RIFF"块mmckinfo作为"父块",以块搜索块的方式搜索到构造类型为"fmt ";搜索到的块信息由mmfmtckinfo对象接受,MMIO_FINDCHUNCK标识表示搜索块信息;
    MMCKINFO结构中的fccType成员为四字节数据,如果类型不满4个字符,应该往后面添加空格。

    得到了fmt部分的MMCKINFO指针后需要通过mmfmtckinfo得到PCMWAVEFORMAT结构:
    PCMWAVEROMAT wformat;
    mmioRead(h, &wformat, mmfmtckinfo.cksize);
    当文件指针指到多媒体文件的mmfmtckinfo部分,函数会自动搜索到需要读入的PCMWAVEFORMT结构首地址,并按首地址顺次向wformat填mmfmtckinfo.cksize大小的字符数。

    3. 如果还需要得到波形文件的数据信息,也就是说,要得到data部分信息,也可以通过调用mmioDescend函数得以实现。实现的第一步使文件的当前位置退回到mmckinfo块的位置:
    mmioAscend(h, &mmfmtckinfo, 0);
    然后需要声明一个对象mmdatainfo,并把该对象的fccType成员设置为"data"类型。通过mmioDescend函数搜索到data部分的地址:
    MMCKINFO mmdatainfo;
    mmdatainfo.ckid = mmioFOURCC('d','a', 't', 'a');
    mmioDescend(h, &mmdatainfo, &mmckinfo, MMIO_FINDCHUNK);
    HGLOBAL hdata;
    LPSTR      pdata;
    hdata = GlobalAlloc(GMEM_MOVEALBE, mmdatainfo.cksize);
    pdata = (LPSTR)GlobalLock(hdata);
    mmioRead(h, pdata, mmdatainfo.cksize);

    版权申明:本站文章均来自网络,如有侵权,请评论 ,收到后立即删除,谢谢! 

  • 相关阅读:
    Android状态栏白底黑字,只需两步轻松搞定
    MyBatis注解
    MyBatis延迟加载和缓存
    MyBatis关联查询
    mybatis智能标签1
    Mybatis智能标签
    增删改查
    初始MyBatis
    第7章:Servlet 基础
    第3章 JSP数据交互(二)
  • 原文地址:https://www.cnblogs.com/wanghoney/p/3450396.html
Copyright © 2011-2022 走看看