Open
Description
#include <iostream>
#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
typedef signed short BitDepth; // 16bit audio
template <typename _Ty>
void write(std::ofstream &stream, const _Ty &ty)
{
stream.write((const char *)&ty, sizeof(_Ty));
}
void writeWaveFile(const char *filename, BitDepth *buffer, size_t sz)
{
const int samplerate = 16000;
const int channels = 1;
std::ofstream stream(filename, std::ios::binary);
stream.write("RIFF", 4);
write<int>(stream, 0); // todo
stream.write("WAVEfmt ", 8);
write<int>(stream, 16);
write<short>(stream, 1);
write<unsigned short>(stream, channels);
write<int>(stream, samplerate);
write<int>(stream, samplerate * channels * sizeof(BitDepth));
write<short>(stream, channels * sizeof(BitDepth));
write<short>(stream, sizeof(BitDepth) * 8);
stream.write("data", 4);
write<int>(stream, sz * sizeof(BitDepth));
stream.write((const char *)&buffer[0], sz * sizeof(BitDepth));
stream.close();
}
int main()
{
std::vector<BitDepth> b;
std::string line;
std::ifstream myfile("wave_data.txt");
if (myfile.is_open())
{
while (getline(myfile, line))
{
b.push_back(std::stof(line));
}
myfile.close();
}
writeWaveFile("./e2.wav", b.data(), b.size());
return 0;
}