• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++读取WAV音频文件的头部数据的实现方法

c++ 搞代码 4年前 (2022-01-06) 25次浏览 已收录 0个评论

这篇文章主要介绍了C++读取WAV音频文件的头部数据的实现方法的相关资料,希望通过本文能帮助到大家,让大家实现这样的方法,需要的朋友可以参考下

C++读取WAV音频文件的头部数据的实现方法

前言:

在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正。写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长。  

实现代码:

 #include  #include  #include  using namespace std; using std::string; using std::fstream; typedef struct WAV_HEADER{ char        RIFF[4];    // RIFF Header   Magic header unsigned long    ChunkSize;   // RIFF Chunk Size char        WAVE[4];    // WAVE Header char        fmt[4];     // FMT header unsigned long    Subchunk1Size; // Size of the fmt chunk unsigned short   AudioFormat;  // Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM unsigned short   NumOfChan;   // Number of channels 1=Mono 2=Sterio unsigned long    SamplesPerSec; // Sampling Frequency in Hz unsigned long    bytesPerSec;  // bytes per second unsigned short   blockAlign;   // 2=16-bit mono, 4=16-bit stereo unsigned short   bitsPerSample; // Number of bits per sample char        Subchunk2ID[4]; // "data" string unsigned long    Subchunk2Size; // Sampled data length }wav_hdr; // Function prototypes int getFileSize(FILE *inFile); int main(int argc,char *argv[]){ wav_hdr wavHeader; FILE *wavFile; int headerSize = sizeof(wav_hdr),filelength = 0; string answer; do{ string input; string answer; const char* filePath; cout <> input; cin.get(); cout << endl; path = "C:\\Windows\\Media\\" + input + ".wav"; filePath = path.c_str(); wavFile = fopen( filePath , "r" ); if(wavFile == NULL){ printf("Can not able to open wave file\n"); //exit(EXIT_FAILURE); } fread(&wavHeader,headerSize,1,wavFile); filelength = getFileSize(wavFile); fclose(wavFile); cout << "File is          :" << filelength << " bytes." << endl; cout << "RIFF header        :<em style="color:transparent">来源[email protected]搞@^&代*@码)网</em>" << wavHeader.RIFF[0] << wavHeader.RIFF[1] << wavHeader.RIFF[2] << wavHeader.RIFF[3] << endl; cout << "WAVE header        :" << wavHeader.WAVE[0] << wavHeader.WAVE[1] << wavHeader.WAVE[2] << wavHeader.WAVE[3] << endl; cout << "FMT            :" << wavHeader.fmt[0] << wavHeader.fmt[1] << wavHeader.fmt[2] << wavHeader.fmt[3] << endl; cout << "Data size         :" << wavHeader.ChunkSize << endl; // Display the sampling Rate form the header cout << "Sampling Rate       :" << wavHeader.SamplesPerSec << endl; cout << "Number of bits used    :" << wavHeader.bitsPerSample << endl; cout << "Number of channels     :" << wavHeader.NumOfChan << endl; cout << "Number of bytes per second :" << wavHeader.bytesPerSec << endl; cout << "Data length        :" << wavHeader.Subchunk2Size << endl; cout << "Audio Format        :" << wavHeader.AudioFormat << endl; // Audio format 1=PCM,6=mulaw,7=alaw, 257=IBM Mu-Law, 258=IBM A-Law, 259=ADPCM cout << "Block align        :" << wavHeader.blockAlign << endl; cout << "Data string        :" << wavHeader.Subchunk2ID[0] << wavHeader.Subchunk2ID[1] << wavHeader.Subchunk2ID[2] << wavHeader.Subchunk2ID[3] << endl; cout << endl << endl <> answer; //cin.get(); cout << endl << endl; }while( answer == "y" ); getchar(); return 0; } // find the file size int getFileSize(FILE *inFile){ int fileSize = 0; fseek(inFile,0,SEEK_END); fileSize=ftell(inFile); fseek(inFile,0,SEEK_SET); return fileSize; } 

 如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望通过本文能帮助到大家,谢谢大家对本站的支持!

以上就是C++读取WAV音频文件的头部数据的实现方法的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++读取WAV音频文件的头部数据的实现方法
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址