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); +}