如何使用WAVEFORMATEX编写.wav文件
How to write .WAV file using WAVEFORMATEX?
我写了一个程序,打开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 %sn", filename);
fclose(file);
}
else
printf("Could not open %s to write audio datan", filename);
}
您可以完全自己编写文件,但是使用helper API是更好的方法。参见使用waveInOpen保存wave文件获取代码参考和详细信息。
我组合了一些代码,并在以下链接中制作了源代码。它记录10秒,并将缓冲区保存为。wav文件。这很简单。对不起,我不能在这里张贴代码。
http://concon.comule.com/wero/mainsound.cpp相关文章:
- 尝试使用来自 Win32 WASAPI C++的"捕获流"创建 wav 文件
- 如何从wav文件中获取采样率?
- 写入 wav 文件时定期创建静音
- 如何使用curl c ++源代码发布wav文件数据,如何使用c ++使用--data-binary?
- 为什么 XAudio2 仅在系统暂停时播放.wav文件?
- webRTC : 如何通过从WAV文件获得的样本将webRTC的VAD应用于音频
- WAV文件停止功能
- 如何从特定点播放.WAV文件(例如30秒)
- 通过C(或C )中的WAV文件循环
- 开放式阅读WAV文件lib
- 使用C++ / Python的wav文件的FFT
- 在mbed中打开的wav文件数量是否有限制
- 音频编程 SDL - 如何使用 wav 文件在命令行中指定频率切割
- 无法使用两种不同的频率填充 *.wav 文件的缓冲区
- 禁用在使用QAudioRecorder时创建wav文件
- 无论如何,我可以从WAV文件中打印Sox即可打印幅度值
- WAV文件的数据在-1和1之间,C ,SNDFILE
- 如何将.wav文件保存在MFC中(使用文件对话框)
- 分析.WAV 文件
- 用A4色调扩展.WAV文件