template<class Int>
bool WriteWaveFile(std::vector<Int>& D, std::uint64_t Hz, std::uint16_t Channel, std::string Name = "out.wav") {
	std::ofstream ofs(Name, std::ios::binary);
	char RIFF[] = "RIFF";
	char WAVE[] = "WAVE";
	char fmt[] = "fmt ";
	char data[] = "data";
	std::uint32_t FSize = (44 - 8) + (D.size() * sizeof(std::vector<Int>::value_type));
	std::uint32_t ui32 = 0;
	std::uint16_t ui16 = 0;
	ofs.write(RIFF, 4);
	ofs.write(reinterpret_cast<const char*>(&FSize), 4);//fsize-8.	
	ofs.write(WAVE, 4);
	ofs.write(fmt, 4);
	ui32 = 16;
	ofs.write(reinterpret_cast<const char*>(&ui32), 4);//fmt chunk size
	ui16 = 1;
	ofs.write(reinterpret_cast<const char*>(&ui16), 2);//sound type. PCM = 1.
	ui16 = Channel;
	ofs.write(reinterpret_cast<const char*>(&ui16), 2);//Channnel count.
	ui32 = static_cast<std::uint32_t>(Hz);
	ofs.write(reinterpret_cast<const char*>(&ui32), 4);//Sampling Hz.
	ui32 = static_cast<std::uint32_t>(Hz*Channel*(sizeof(std::vector<Int>::value_type)));
	ofs.write(reinterpret_cast<const char*>(&ui32), 4);//data speed??
	ui16 = Channel*(sizeof(std::vector<Int>::value_type));
	ofs.write(reinterpret_cast<const char*>(&ui16), 2);//BlockSize??
	ui16 = (sizeof(std::vector<Int>::value_type) * 8);
	ofs.write(reinterpret_cast<const char*>(&ui16), 2);//Sampling Bit.
	ofs.write(data, 4);
	ui32 = static_cast<std::uint32_t>(D.size() * sizeof(std::vector<Int>::value_type));
	ofs.write(reinterpret_cast<const char*>(&ui32), 4);//Sample's ALL SIZE.max at 32bit.

	ofs.write(reinterpret_cast<const char*>(&D[0]), D.size() * sizeof(std::vector<Int>::value_type));//WriteSamples.

	return true;
}