Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct WavSample {
- unsigned int Channels;
- unsigned int BytesPerSample;
- unsigned int DataSize;
- void *sampleData;
- };
- void SoundProcessor::parseWavFile(std::ifstream &rawWavFile) {
- auto riff = ChunkInfo{};
- auto wave= ChunkInfo{};
- auto chunk= ChunkInfo{};
- read(rawWavFile, riff, nullptr);
- if(riff.chunkId != CT_RIFF){
- throw std::runtime_error("First chunk must be RIFF");
- }
- std::cout << "RIFF Size: " << riff.chunkSize << std::endl;
- read(rawWavFile, &wave.chunkId, uint32Size, &riff);
- wave.chunkSize = riff.chunkSize - uint32Size;
- if(wave.chunkId != CT_WAVE){
- throw std::runtime_error("File is not a WAV file");
- }
- std::cout << "RIFF Type: " << convert4ByteUIntToString(wave.chunkId) << std::endl;
- while (rawWavFile) {
- read(rawWavFile, chunk, &riff);
- if(rawWavFile.eof()) break;
- uint32_t next_chunk = static_cast<size_t>(rawWavFile.tellg()) + chunk.chunkSize + (chunk.chunkSize & 1);
- //std::cout << "Chunk: '" << convert4ByteUIntToString(chunk.chunkId) << "', Size: " << chunk.chunkSize << std::endl;
- if(chunk.chunkId == CT_fmt){
- auto fmtChunk = WavFmtHeader{};
- rawWavFile.read(reinterpret_cast<char *>(&fmtChunk), sizeof(fmtChunk));
- std::cout << convert4ByteUIntToString(chunk.chunkId) << std::endl;
- }
- if(chunk.chunkId == CT_data){
- auto dataChunk = WavSample{};
- rawWavFile.read(reinterpret_cast<char *>(&dataChunk), sizeof(dataChunk));
- std::cout << convert4ByteUIntToString(chunk.chunkId) << std::endl;
- std::cout << "Channels num: " << dataChunk.Channels << std::endl;
- }
- if(rawWavFile.eof()) break;
- rawWavFile.seekg(next_chunk);
- }
- std::cout << "asd";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement