C++生産サイレントオーディオファイル
C++生産サイレントオーディオファイル引用 C++コード 引用する
こんにちは!この記事では、wavファイルのフォーマットと静音wavオーディオファイルの生産方法.
C++コード
こんにちは!この記事では、wavファイルのフォーマットと静音wavオーディオファイルの生産方法.
C++コード
#include
#include
#include
typedef struct tWAVEFORMATEX {
unsigned short wFormatTag; // ,WAVE_FORMAT_PCM...
unsigned short nChannels; //
unsigned long nSamplesPerSec; // , 11025,8000,22050,44100
unsigned long nAvgBytesPerSec;// (nSamplesPerSec * nChannels * wBitsPerSample) / 8
unsigned short nBlockAlign; // ,(nChannels * wBitsPerSample) / 8
unsigned short wBitsPerSample; // , 8 16 32
unsigned short cbSize; // ,PCM
} WAVEFORMATEX;
int main(int argc, char** argv) {
std::vector<char> data;
for(int i = 0; i<2646000; i++) {
data.push_back(0);
}
std::ofstream file("wave.wav", std::ios_base::binary | std::ios_base::trunc);
if (file.is_open()) {
WAVEFORMATEX format = {1, 1, 22050, 44100, 2, 16, 0};
int WaveHeaderSize = 36; // RIFF 12 , 26
int WaveFormatSize = 16; //
file.write("RIFF", 4); // ChunkID
// RIFF + + [8+dwSize]
int fileLen = (data.size() + WaveHeaderSize);
file.write((char *)&fileLen, 4); // ChunkSize
file.write("WAVE", 4); // Format
file.write("fmt ", 4); // Subchunk1 ID
file.write((char *)&WaveFormatSize, 4); // Subchunk1 Size
file.write((char *)&format.wFormatTag, 2); // AudioFormat
file.write((char *)&format.nChannels, 2); // Num Channels
file.write((char *)&format.nSamplesPerSec, 4); // Sample Rate
file.write((char *)&format.nAvgBytesPerSec, 4); //ByteRate
file.write((char *)&format.nBlockAlign, 2); // BlockAlign
file.write((char *)&format.wBitsPerSample, 2); //BitsPerSample
file.write("data", 4); // Subchunk2 ID
int size = data.size();
file.write((char *)&size, 4); // Subchunk2 ID
file.write((char *)data.data(), size); //data
file.close();
}
std::cout<<"wave.wav :"<<data.size() + 36<<"byte"<<std::endl;
return 0;
}