fork download
  1. template<class Int>
  2. bool WriteWaveFile(std::vector<Int>& D, std::uint64_t Hz, std::uint16_t Channel, std::string Name = "out.wav") {
  3. std::ofstream ofs(Name, std::ios::binary);
  4. char RIFF[] = "RIFF";
  5. char WAVE[] = "WAVE";
  6. char fmt[] = "fmt ";
  7. char data[] = "data";
  8. std::uint32_t FSize = (44 - 8) + (D.size() * sizeof(std::vector<Int>::value_type));
  9. std::uint32_t ui32 = 0;
  10. std::uint16_t ui16 = 0;
  11. ofs.write(RIFF, 4);
  12. ofs.write(reinterpret_cast<const char*>(&FSize), 4);//fsize-8.
  13. ofs.write(WAVE, 4);
  14. ofs.write(fmt, 4);
  15. ui32 = 16;
  16. ofs.write(reinterpret_cast<const char*>(&ui32), 4);//fmt chunk size
  17. ui16 = 1;
  18. ofs.write(reinterpret_cast<const char*>(&ui16), 2);//sound type. PCM = 1.
  19. ui16 = Channel;
  20. ofs.write(reinterpret_cast<const char*>(&ui16), 2);//Channnel count.
  21. ui32 = static_cast<std::uint32_t>(Hz);
  22. ofs.write(reinterpret_cast<const char*>(&ui32), 4);//Sampling Hz.
  23. ui32 = static_cast<std::uint32_t>(Hz*Channel*(sizeof(std::vector<Int>::value_type)));
  24. ofs.write(reinterpret_cast<const char*>(&ui32), 4);//data speed??
  25. ui16 = Channel*(sizeof(std::vector<Int>::value_type));
  26. ofs.write(reinterpret_cast<const char*>(&ui16), 2);//BlockSize??
  27. ui16 = (sizeof(std::vector<Int>::value_type) * 8);
  28. ofs.write(reinterpret_cast<const char*>(&ui16), 2);//Sampling Bit.
  29. ofs.write(data, 4);
  30. ui32 = static_cast<std::uint32_t>(D.size() * sizeof(std::vector<Int>::value_type));
  31. ofs.write(reinterpret_cast<const char*>(&ui32), 4);//Sample's ALL SIZE.max at 32bit.
  32.  
  33. ofs.write(reinterpret_cast<const char*>(&D[0]), D.size() * sizeof(std::vector<Int>::value_type));//WriteSamples.
  34.  
  35. return true;
  36. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty