Advertisement
Guest User

Untitled

a guest
Nov 25th, 2022
18
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. void SoundProcessor::parseWavFile(std::ifstream &rawWavFile) {
  2.   auto riff = ChunkInfo{};
  3.   auto wave= ChunkInfo{};
  4.   auto chunk= ChunkInfo{};
  5.  
  6.   read(rawWavFile, riff, nullptr);
  7.   if(riff.chunkId != CT_RIFF){
  8.     throw std::runtime_error("First chunk must be RIFF");
  9.   }
  10.   std::cout << "RIFF Size: " << riff.chunkSize << std::endl;
  11.  
  12.   read(rawWavFile, &wave.chunkId, uint32Size, &riff);
  13.   wave.chunkSize = riff.chunkSize - uint32Size;
  14.   wave.position = 0;
  15.  
  16.   if(wave.chunkId != CT_WAVE){
  17.     throw std::runtime_error("File is not a WAV file");
  18.   }
  19.   std::cout << "RIFF Type: " << convert4ByteUIntToString(wave.chunkId) << std::endl;
  20.  
  21.   while (rawWavFile) {
  22.     read(rawWavFile, chunk, &riff);
  23.     uint32_t next_chunk = static_cast<size_t>(rawWavFile.tellg()) + chunk.chunkSize + (chunk.chunkSize & 1);
  24.  
  25.     //std::cout << "Chunk: '" << convert4ByteUIntToString(chunk.chunkId) << "', Size: " << chunk.chunkSize << std::endl;
  26.  
  27.     if(chunk.chunkId == CT_fmt){
  28.       auto fmtChunk = WavFmtHeader{};
  29.       rawWavFile.read(reinterpret_cast<char *>(&fmtChunk), sizeof(fmtChunk));
  30.       std::cout << convert4ByteUIntToString(chunk.chunkId) << std::endl;
  31.     }
  32.  
  33.     if(chunk.chunkId == CT_data){
  34.       std::cout << "DATA FOUND " << rawWavFile.eof() << std::endl;
  35.     }
  36.  
  37.  
  38.     rawWavFile.seekg(next_chunk);
  39.   }
  40. }
  41.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement