zoukankan      html  css  js  c++  java
  • wav文件格式分析(代码)

    这个是为上一篇文章做结尾用的。

    这里我只把基本的数据提取出来了,没有进行下一步处理,数据提取出来,后面怎么应用就看具体情况了。

    #include <iostream>
    #include <fstream>
    using namespace std;
    
    struct wav_struct
    {
        unsigned long file_size;        //文件大小
        unsigned short channel;            //通道数
        unsigned long frequency;        //采样频率
        unsigned long Bps;                //Byte率
        unsigned short sample_num_bit;    //一个样本的位数
        unsigned long data_size;        //数据大小
        unsigned char *data;            //音频数据 ,这里要定义什么就看样本位数了,我这里只是单纯的复制数据
    
    };
    
    int main(int argc,char **argv)
    {
        fstream fs;
        wav_struct WAV;
        fs.open("B:\\output.wav",ios::binary|ios::in);
    
    //    fs.seekg(0x04);                //从文件数据中获取文件大小
    //    fs.read((char*)&WAV.file_size,sizeof(WAV.file_size));
    //    WAV.file_size+=8;
        
        fs.seekg(0,ios::end);        //用c++常用方法获得文件大小
        WAV.file_size=fs.tellg();
    
        fs.seekg(0x14);
        fs.read((char*)&WAV.channel,sizeof(WAV.channel));
    
        fs.seekg(0x18);
        fs.read((char*)&WAV.frequency,sizeof(WAV.frequency));
    
        fs.seekg(0x1c);
        fs.read((char*)&WAV.Bps,sizeof(WAV.Bps));
    
        fs.seekg(0x22);
        fs.read((char*)&WAV.sample_num_bit,sizeof(WAV.sample_num_bit));
    
        fs.seekg(0x28);
        fs.read((char*)&WAV.data_size,sizeof(WAV.data_size));
    
        WAV.data=new unsigned char[WAV.data_size];
    
        fs.seekg(0x2c);
        fs.read((char *)WAV.data,sizeof(char)*WAV.data_size);
    
        cout<<"文件大小为  :"<<WAV.file_size<<endl;
        cout<<"音频通道数  :"<<WAV.channel<<endl;
        cout<<"采样频率    :"<<WAV.frequency<<endl;
        cout<<"Byte率      :"<<WAV.Bps<<endl;
        cout<<"样本位数    :"<<WAV.sample_num_bit<<endl;
        cout<<"音频数据大小:"<<WAV.data_size<<endl;
        cout<<"最后20个数据:"<<endl;
    
        for (unsigned long i=WAV.data_size-20;i<WAV.data_size;i++)
        {
            printf("%x  ",WAV.data[i]);
        }
        fs.close();
    
        delete[] WAV.data;
        system("pause");
    
    }

    运行结果:

    可以看出各种数据和上一篇文章中的分析都是对应的。

  • 相关阅读:
    单例模式的double check写法中的volatile关键字
    java开发中避免NullPointerException
    java.lang.NoClassDefFoundError: javax/xml/bind/JAXBContext
    linux环境工作记录
    常用Java开发者工具
    compile once,run anywhere
    Java 线程
    常用的git命令
    oracle 随笔
    常用px,pt,em换算表
  • 原文地址:https://www.cnblogs.com/tiandsp/p/2730022.html
Copyright © 2011-2022 走看看