//------------------------------------------------------------------------- bool ReadChunkData(const IwRIFFChunkHeader& header, MemoryFile &memfp, std::vector<short>&data, int samplebits) { size_t len = data.size(); if(samplebits == 16) { data.resize(len+header.length/2); if(memfp.Read(&data[len], header.length) != header.length) { return false; } } else { std::vector<char>bit8data(header.length); if(memfp.Read(&bit8data[0], header.length) != header.length) { return false; } data.resize(len+header.length); for(int i=0; i<header.length; i++) { data[len+i] = bit8data[i]*256; } } return true; }
bool ReadChunkFormat(const IwRIFFChunkHeader& header, MemoryFile &memfp, int &herz, int &samplebits, int &channels) { IwWAVEFormatChunkADPCM format; // Read data from file if ((header.length < sizeof(IwWAVEFormatChunk)) || (memfp.Read(&format, sizeof(IwWAVEFormatChunkADPCM)) != sizeof(IwWAVEFormatChunkADPCM))) { assert(0); return false; } assert(format.channels==1 && format.bitsPerSample==16 && format.samplesPerSec==22050); if((format.channels!=1&&format.channels!=2) || format.formatTag!=WAVE_FORMAT_PCM) { return false; } if(format.bitsPerSample != 16 && format.bitsPerSample!=8) { return false; } samplebits = format.bitsPerSample; herz = format.samplesPerSec; channels = format.channels; return true; }
//------------------------------------------------------------------------- bool ReadChunkFact(const IwRIFFChunkHeader& header, MemoryFile &memfp, int &sampleCount) { if (memfp.Read(&sampleCount, sizeof(int)) != sizeof(int)) { return false; } return true; }