C++讀取WAV音頻文件的頭部數(shù)據(jù)的實(shí)現(xiàn)方法
C++讀取WAV音頻文件的頭部數(shù)據(jù)的實(shí)現(xiàn)方法
前言:
在這里分享一下自己的心得,希望和大家一起分享技術(shù),如果有什么不足,還請(qǐng)大家指正。寫(xiě)出這篇目的,就是希望大家一起成長(zhǎng),我也相信技術(shù)之間沒(méi)有高低,只有互補(bǔ),只有分享,才能使彼此更加成長(zhǎng)。
實(shí)現(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; }
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望通過(guò)本文能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C++中四種對(duì)象生存期和作用域以及static的用法總結(jié)分析
以下是對(duì)C++中四種對(duì)象生存期和作用域以及static的用法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下2013-09-09C/C++ 中實(shí)現(xiàn)讓控制臺(tái)暫停的方法
這篇文章主要介紹了C/C++ 中實(shí)現(xiàn)讓控制臺(tái)暫停的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07C++設(shè)計(jì)模式之裝飾模式(Decorator)
這篇文章主要為大家詳細(xì)介紹了C++設(shè)計(jì)模式之裝飾模式Decorator的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03C++執(zhí)行shell命令的多種實(shí)現(xiàn)方法
在linux系統(tǒng)下,用C++程序執(zhí)行shell命令有多種方式,主要介紹了3中方法,具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11