2013-04-29 96 views
3

我寫了一個程序,打開wav文件並通過控制檯播放它們,然後修改聲音並重播它...如何用修改的聲音保存新的wav文件?所以基本上我想創建一個wav文件並將修改後的結果寫入它。我使用WAVEFORMATEX作爲音頻數據。如何使用WAVEFORMATEX編寫.WAV文件?

我的工作就可以了多一些,我得到的wav文件創建,但是它並沒有發揮

這裏是我的代碼:

// writes the modified audio data into a .WAV file 
void writeWaveFile(char* filename,WAVEFORMATEX& wfx) 
{ 
    FILE* file = fopen(filename, "wb"); 

    if (file) 
    { 
     // write wave header 
     unsigned short formatType = wfx.wFormatTag; 
     unsigned short numChannels = wfx.nChannels; 
     unsigned long sampleRate = wfx.nSamplesPerSec; 
     unsigned short bitsPerChannel = wfx.wBitsPerSample; 
     unsigned short bytesPerSample = wfx.nAvgBytesPerSec; 
     unsigned long bytesPerSecond = wfx.nAvgBytesPerSec; 
     unsigned long dataLen = wfx.nBlockAlign; 

     const int fmtChunkLen = 16; 
     const int waveHeaderLen = 4 + 8 + fmtChunkLen + 8; 

     unsigned long totalLen = waveHeaderLen + dataLen; 

     fwrite("RIFF", 4, 1, file); 
     fwrite(&totalLen, 4, 1, file); 
     fwrite("WAVE", 4, 1, file); 
     fwrite("fmt ", 4, 1, file); 
     fwrite(&fmtChunkLen, 4, 1, file); 
     fwrite(&formatType, 2, 1, file); 
     fwrite(&numChannels, 2, 1, file); 
     fwrite(&sampleRate, 4, 1, file); 
     fwrite(&bytesPerSecond, 4, 1, file); 
     fwrite(&bytesPerSample, 2, 1, file); 
     fwrite(&bitsPerChannel, 2, 1, file); 

     // write data 

     fwrite("data", 4, 1, file); 
     fwrite(&dataLen, 4, 1, file); 
     //fwrite(data, dataLen, 1, file); 

     // finish 

     printf("Saved audio as %s\n", filename); 
     fclose(file); 
    } 
    else 
     printf("Could not open %s to write audio data\n", filename); 
} 
+0

C++和我一直在嘗試不同的東西,我在網上找到的,但我不能讓他們的工作,所以我一直不得不重新開始,所以我沒有任何的代碼,但爲節約部分的程序 – 2013-04-29 19:20:38

+0

好吧,所以我工作了一些,我得到了創建的wav文件,但它不會播放 – 2013-04-30 01:39:49

+0

我的項目是由於明天我的決賽和我唯一離開這麼做的,我真的很感激幫助我希望我能做更多的研究,但明天我還有其他2場決賽,所以我沒有時間浪費時間做研究,就像我昨天整天不做研究一樣,任何援助都會很棒 – 2013-04-30 01:55:02

回答