+
+wav_reader_t *raw_open(wav_io_context_t *io_ctx, void *io_cookie,
+ const pcm_sample_description_t *desc)
+{
+ wav_reader_t *reader = 0;
+
+ if ((reader = calloc(1, sizeof(wav_reader_t))) == 0)
+ return 0;
+ memcpy(&reader->io, io_ctx, sizeof(wav_io_context_t));
+ memcpy(&reader->sample_format, desc, sizeof(pcm_sample_description_t));
+ reader->io_cookie = io_cookie;
+ if (io_ctx->seek && io_ctx->tell) {
+ if (reader->io.seek(reader->io_cookie, 0, SEEK_END) >= 0) {
+ int64_t size = reader->io.tell(reader->io_cookie);
+ if (size > 0)
+ reader->length = size / desc->bytes_per_frame;
+ reader->io.seek(reader->io_cookie, reader->data_offset, SEEK_SET);
+ }
+ } else
+ reader->length = INT64_MAX;
+ return reader;
+}
+
+