C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法
更新時間:2017年10月30日 11:31:48 作者:vchelp
這篇文章主要介紹了C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的方法,需要的朋友可以參考下
C++讀取WAV音頻文件的頭部數(shù)據(jù)的實現(xiàn)方法
前言:
在這里分享一下自己的心得,希望和大家一起分享技術(shù),如果有什么不足,還請大家指正。寫出這篇目的,就是希望大家一起成長,我也相信技術(shù)之間沒有高低,只有互補(bǔ),只有分享,才能使彼此更加成長。
實現(xiàn)代碼:
#include <iostream> #include <string> #include <fstream> 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 << "Pick wav file from the Windows Media File: "; cin >> 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 :" << 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 << "Try something else? (y/n)"; cin >> 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; }
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望通過本文能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
C++中四種對象生存期和作用域以及static的用法總結(jié)分析
以下是對C++中四種對象生存期和作用域以及static的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下2013-09-09C++執(zhí)行shell命令的多種實現(xiàn)方法
在linux系統(tǒng)下,用C++程序執(zhí)行shell命令有多種方式,主要介紹了3中方法,具有一定的參考價值,感興趣的可以了解一下2021-11-11