From 6f203df2d2911b7e91d40beefe303d0dc7840c8c Mon Sep 17 00:00:00 2001 From: Lars Immisch Date: Mon, 4 Sep 2023 19:51:53 +0200 Subject: [PATCH] Implement aufile_set_position --- include/rem_aufile.h | 1 + rem/aufile/aufile.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/rem_aufile.h b/include/rem_aufile.h index 98a3628fd..88114b173 100644 --- a/include/rem_aufile.h +++ b/include/rem_aufile.h @@ -26,3 +26,4 @@ int aufile_read(struct aufile *af, uint8_t *p, size_t *sz); int aufile_write(struct aufile *af, const uint8_t *p, size_t sz); size_t aufile_get_size(struct aufile *af); size_t aufile_get_length(struct aufile *af, struct aufile_prm *prm); +size_t aufile_set_position(struct aufile *af, struct aufile_prm *prm, size_t pos_ms); diff --git a/rem/aufile/aufile.c b/rem/aufile/aufile.c index 8c9587b44..42bc7f304 100644 --- a/rem/aufile/aufile.c +++ b/rem/aufile/aufile.c @@ -278,3 +278,18 @@ size_t aufile_get_length(struct aufile *af, struct aufile_prm *prm) return 0; } + +/** + * Set initial playing position of a WAV file in ms + * + * @param af Audio-file + * @param prm Audio file parameters from aufile_open + * + * @return position in bytes or (size_t)-1 in case of an error. + */ +size_t aufile_set_position(struct aufile *af, struct aufile_prm *prm, size_t pos_ms) +{ + size_t pos = prm->srate * aufmt_sample_size(prm->fmt) * prm->channels * pos_ms / 1000; + + return fseek(af->f, pos, SEEK_SET); +}