8 :data(data), sz(size) {
10 sz = std::min(sz,head.size+at);
14 if(std::memcmp(listId,
"\0\0\0\0",4)==0)
20 if(std::memcmp(listId,
id,4)!=0)
21 throw std::runtime_error(
"invalid track");
26 return (std::memcmp(listId,
id,4)!=0)==0;
30 size_t len = (sz-at)/2;
36 read(&str[0],2*str.size());
46 read(&str[0],str.size());
53 read(&vec[0],vec.size());
58 Riff chunk(data+at,sz-at);
60 at+=chunk.head.size+8+(chunk.head.size%2);
64void Riff::readHdr(Riff::ChunkHeader &h) {
72 std::memcpy(dest,data+at,s);
82void Riff::onError(
const char *msg) {
83 throw std::runtime_error(msg);
Riff(const uint8_t *data, size_t sz)
void read(std::u16string &str)
void(*)(void *ctx, Riff &chunk) Callback
bool isListId(const char *id)