找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3346|回复: 0
打印 上一主题 下一主题
收起左侧

Wave文件解码

[复制链接]
跳转到指定楼层
楼主
ID:75926 发表于 2015-4-10 16:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
typedef unsigned int uint32_t;

typedef unsigned short uint16_t;
//RIFF块
typedef  struct
{
    uint32_t ChunkID;                           //chunk id;这里固定为"RIFF",即0X46464952
    uint32_t ChunkSize ;                //集合大小;文件总大小-8
    uint32_t Format;                           //格式;WAVE,即0X45564157
}ChunkRIFF ;
//fmt块
typedef  struct
{
    uint32_t ChunkID;                           //chunk id;这里固定为"fmt ",即0X20746D66
    uint32_t ChunkSize ;                //子集合大小(不包括ID和Size);这里为:20.
    uint16_t AudioFormat;                  //音频格式;0X01,表示线性PCM;0X11表示IMA ADPCM
    uint16_t NumOfChannels;                //通道数量;1,表示单声道;2,表示双声道;
    uint32_t SampleRate;                //采样率  每秒钟有多少个字节的数据送到DAC上
    uint32_t ByteRate;                        //字节速率;通道数*DAC精度
    uint16_t BlockAlign;                //块对齐(字节);
    uint16_t BitsPerSample;                //单个采样数据大小  就是DAC需要的精度
//   uint16_t ByteExtraData;                //附加的数据字节;2个; 线性PCM,没有这个参数
}ChunkFMT;



int main()
{
    char Wave[]="ykzzldx.wav";
    ChunkRIFF Riff;
    ChunkFMT Fmt;
    FILE *Wavefil;
    Wavefil=fopen(Wave,"r+");
    if(Wavefil==NULL)
    {
        printf("da kai wen jian shi bai\n");
        return 0;
    }
    fread(&Riff,sizeof(Riff),1,Wavefil);
    fread(&Fmt,sizeof(Fmt),1,Wavefil);
    if(Riff.ChunkID==0X46464952)
    {
        printf("zhe shi wav wen jian \n");
        printf("zheng ge wen jian de da xiao wei: %dKB\n",(Riff.ChunkSize+8)>>10);
        if(Fmt.ChunkID==0X20746D66);
        {
            printf("Wav wen jian !\n");
            if(Fmt.AudioFormat==0x01)
            {
                printf("zhe shi xian xing PCM ge shi \n");
            }
            printf("tong dao shu liang wei %d\n",Fmt.NumOfChannels);
            printf("cai yang su lv wei: %dHz\n",Fmt.SampleRate);
            printf("zi jie su lv wei :%dHz\n",Fmt.ByteRate);
            printf("dan ge cai yang shu ju da xiao wei:\t%d\n",Fmt.BitsPerSample);
        }
    }
    else
    {
        printf("zhe bu shi WAV wen jian \n");
        return 0;
    }






    fclose(Wavefil);




    return 0;
}





分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表