+
+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) {
+ TRY_IO(riff_seek(reader, 0, SEEK_END));
+ reader->length = riff_tell(reader) / desc->bytes_per_frame;
+ TRY_IO(riff_seek(reader, 0, SEEK_SET));
+ } else
+ reader->length = INT64_MAX;
+ return reader;
+FAIL:
+ if (reader)
+ free(reader);
+ return 0;
+}
+
+