【发布时间】:2013-04-22 13:53:47
【问题描述】:
我编写了一个程序,可以打开 wav 文件并通过控制台播放它们,然后修改声音并重播...如何使用修改后的声音保存新的 wav 文件?所以本质上我想创建一个 wav 文件并将修改后的结果写入它。我用WAVEFORMATEX作为音频的数据。
我又做了一些工作,创建了 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);
}
【问题讨论】:
-
C++,我一直在尝试我在网上找到的不同的东西,但我无法让它们工作,所以我不得不重新开始,所以我还没有任何代码来保存程序的一部分
-
好的,所以我又做了一些工作,创建了 wav 文件,但它无法播放
-
我的项目明天到期,这是我的期末考试,也是我唯一要做的事情,所以我非常感谢这方面的帮助,我希望我能做更多的研究,但我明天还有另外 2 个期末考试,所以我没有时间像昨天一整天一样浪费在研究上,而不是学习……任何帮助都会很棒